Свёртка информационной базы — трудоемкая процедура, которая при многократном повторении способна создать больше проблем, чем решить. Типичная ситуация: после последовательных ежегодных свёрток в конфигурации 1С:Бухгалтерия предприятия 3.0 накапливаются сотни тысяч помеченных на удаление документов (реализации, счета-фактуры и др.). При попытке очистить базу типовая обработка Удаление помеченных объектов намертво зависает, либо выдает ошибки ссылочной целостности, указывая на документы ввода остатков и служебные регистры.
Разберем подробно, почему возникает эта проблема, на что влияет регистр сведений ЖурналУчетаСчетовФактур и какими способами можно безопасно и быстро очистить информационную базу.
Выясним причину технического сбоя. Когда типовой механизм пытается удалить массив из 100 000 – 200 000 объектов, происходят следующие процессы:
rphost или системного пространства tempdb на стороне СУБД.ОперацияБух, созданные при предыдущих свёртках, содержат ссылки на старые счета-фактуры в регистрах или табличных частях, блокируя стандартное удаление.Проанализируем второй ключевой вопрос: можно ли безболезненно удалять движения по регистру ЖурналУчетаСчетовФактур и сами документы-регистраторы.
Записи этого регистра предназначены для формирования регламентированного отчета «Журнал учета полученных и выставленных счетов-фактур». Рассмотрим влияние регистра на учет:
НДС Покупки, НДС Продажи, НДС Раздельный учет) и регистру бухгалтерии (счета 19, 68.02, 76.АВ, 76.ВА). Ввод остатков по регистру ЖурналУчетаСчетовФактур для таких организаций не имеет практического смысла.Если требуется очистить рабочую базу штатным контролем целостности, разработаем алгоритм порционного удаления. Разбиение общего массива на небольшие пакеты (по 500–1000 документов) снимает пиковую нагрузку на оперативную память и СУБД.
Посмотрим на пример программной обработки для пакетного удаления:
МассивДляУдаления = Новый Массив;
РазмерПакета = 500;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 500
| Док.Ссылка КАК Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Док
|ГДЕ
| Док.ПометкаУдаления = ИСТИНА";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
МассивДляУдаления.Добавить(Выборка.Ссылка);
КонецЦикла;
Если МассивДляУдаления.Количество() > 0 Тогда
// Выполняем поиск ссылок и удаление только для текущего пакета
НайденныеСсылки = НайтиПоСсылкам(МассивДляУдаления);
// Если на объекты нет ссылок, выполняем удаление
Если НайденныеСсылки.Количество() = 0 Тогда
УдалитьОбъекты(МассивДляУдаления, Истина);
КонецЕсли;
КонецЕсли;
Когда документы не удаляются из-за того, что они зафиксированы в регистрах документа Операция, выполним предварительную очистку наборов записей.
Разберем по шагам, как очистить движения в конкретном регистре:
// Очистка набора записей регистра сведений по регистратору
НаборЗаписей = РегистрыСведений.ЖурналУчетаСчетовФактур.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаОперацию);
// Записываем пустой набор (очищаем записи)
НаборЗаписей.Записать(Истина);
После очистки движений ручных операций по регистру сведений счета-фактуры освобождаются от ссылок и могут быть удалены выборочным удалением.
В исключительных случаях, когда ссылки на старые документы находятся исключительно в исторических регистрах сведений, программисты используют прямое удаление через метод Удалить() у объекта ДокументОбъект без контроля ссылочной целостности с последующим запуском Тестирования и исправления (ТиИ).
Важное предупреждение: категорически не рекомендуется выполнять этот способ сразу на рабочей базе. При очистке ссылок через ТиИ бухгалтеры могут не заметить расхождений в специализированных регистрах НДС и НДФЛ при проверке стандартных отчетов (ОСВ, Карточка счета). Выполняйте данную процедуру исключительно на резервной копии с обязательной сдачей контрольного квартала отчетности.
Когда база пережила 4–5 последовательных свёрток, ее структура перегружена сотнями тысяч перекрестных ссылок, а таблицы сильно фрагментированы. В таких условиях наиболее надежным и чистым решением является перенос актуальных данных в новую конфигурацию:
Выгрузка и загрузка данных XML или универсального обмена переносим справочники, учетную политику и актуальные документы ввода остатков на выбранную дату.Этот подход гарантирует отсутствие «мусорных» ссылок, битых индексов и обеспечивает максимальную производительность системы.
После удаления 230 000 документов физический размер базы автоматически не уменьшится. Чтобы освободить место на диске и восстановить скорость работы, выполним регламентные процедуры:
Администрирование -> Тестирование и исправление с обязательным выбором пункта «Сжатие таблиц информационной базы», либо запускаем утилиту chdbfl.exe.