Удаление сотен тысяч документов за несколько часов из УТ11

Цель: разработать алгоритм массового удаления больших количеств документов из УТ 11 без потери ссылочности базы.

 

Мои действия (операции на серверной базе):

1. Я написал программу, которая позволяет определить количество “задействованных” типов документов в текущей базе, их соответствие таблицам sql.

программу можно посмотреть (скачать)  //catalog.1c-e.ru/public/310610/

запустив программу, я вижу, что в базе более 300 тыс документов, их соответствие таблицам sql, а также таблицы регистров, по которым делают движения задействованные документы базы.

 

2. Делаю такой ход: удаляю все регистры накопления у типов документов, количество которых больше 30000 шт.

В моем случае это документы – ПеремещениеТоваров, ЗаказКлиента, Реализация, ПКО.

 

Для физического удаления регистров, я воспользовался sql запросом из базы 1с, он может быть, например, таким:

 

    СтрПодключения = "Provider=SQLOLEDB.1;Password=" + Пароль + ";Persist Security Info=True;Context connection=true;User ID="
    + Пользователь + ";Initial Catalog=" + База + ";Data Source=" + Сервер;
	
    Connection = Новый COMОбъект("ADODB.Connection");
    Connection.ConnectionString =  СтрПодключения;
    Connection.CommandTimeout = 600;
	
    Попытка
        Connection.Open();
		Сообщить("Подключено!");
    Исключение
      	Connection = Неопределено;
		Сообщить(ОписаниеОшибки());
		Возврат;
 	КонецПопытки;
	
	Запрос = Новый COMОбъект("ADODB.Recordset");
	Запрос.Activeconnection = Connection;
	
	Для Каждого Стр1 ИЗ Объект.ТаблицаСоответствия Цикл
	
		ТекстЗапроса = "DELETE FROM dbo._"+Стр1.ИмяВТаблицеБД;
		
		Попытка
			Запрос.Open(ТекстЗапроса);
		Исключение
			Сообщить(ОписаниеОшибки());
			Возврат;
		КонецПопытки;
	
	КонецЦикла;
	
	Connection = Неопределено;	
	Сообщить("Выполнено!");	

 

Время выполнения запросов по удалению регистров накопления по моим выбранным документам составило примерно 7 – 10 минут. 


Захожу в “Движения документов” – вижу, что движений нет. Сработало все чисто.

 

3. Теперь, нужно “доочистить” все документы от оставшихся движений, пометив их на удаление (отмена проведения). Для этого, я написал вот эту программу

//catalog.1c-e.ru/public/310737/

Запускаю, обработку. Распроведение всех документов составила приблизительно 2 часа.

В результате, я имею все документы базы помеченные на удаление и без движений.

 

4. Последним шагом я физически удаляю документы из базы, запустив такой скрипт

 

Для Каждого ТекДанные Из Объект.ДокументыБазы Цикл
		
		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ
		               |	Данные.Ссылка КАК Ссылка
		               |ИЗ
		               |	Документ." + ТекДанные.ДокументПолноеИмя + " КАК Данные";
			 					
		Выборка = Запрос.Выполнить().Выбрать();
					
		Пока Выборка.Следующий() Цикл
			
			ДокВыб = Выборка.Ссылка.ПолучитьОбъект();
			ДокВыб.Удалить();
						
		КонецЦикла;
						
	КонецЦикла;

Все физическое удаление (по счетчику секунд) – у меня составило приблизительно 5 часов.

После завершения удаления – делаю проверку базы ТИИ – битых ссылок не обнаружил. Все документы удалены.

В КАТАЛОГ »