Цель: разработать алгоритм массового удаления больших количеств документов из УТ 11 без потери ссылочности базы.
Мои действия (операции на серверной базе):
1. Я написал программу, которая позволяет определить количество "задействованных" типов документов в текущей базе, их соответствие таблицам sql.
программу можно посмотреть (скачать) //infostart.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. Теперь, нужно "доочистить" все документы от оставшихся движений, пометив их на удаление (отмена проведения). Для этого, я написал вот эту программу
Запускаю, обработку. Распроведение всех документов составила приблизительно 2 часа.
В результате, я имею все документы базы помеченные на удаление и без движений.
4. Последним шагом я физически удаляю документы из базы, запустив такой скрипт
Для Каждого ТекДанные Из Объект.ДокументыБазы Цикл
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Данные.Ссылка КАК Ссылка
|ИЗ
| Документ." + ТекДанные.ДокументПолноеИмя + " КАК Данные";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДокВыб = Выборка.Ссылка.ПолучитьОбъект();
ДокВыб.Удалить();
КонецЦикла;
КонецЦикла;
Все физическое удаление (по счетчику секунд) - у меня составило приблизительно 5 часов.
После завершения удаления - делаю проверку базы ТИИ - битых ссылок не обнаружил. Все документы удалены.