Разберем одну из самых сложных и неоднозначных задач при сопровождении крупных систем — свертку информационной базы 1С:ERP Управление предприятием. В отличие от конфигураций вроде 1С:Бухгалтерия или 1С:Управление торговлей, где процесс давно отлажен и легко настраивается, в ERP мы сталкиваемся с колоссальным нагромождением взаимосвязей документов, справочников и регистров.
Проанализируем ситуацию, с которой часто сталкиваются программисты: база за несколько лет работы разрослась, часть алгоритмов учета была переделана, появились нетиповые документы и регистры сведений (например, для сложного непрерывного производства со сроками годности). Возникает естественное желание «срезать» базу на определенную дату, чтобы ускорить работу системы и очистить ее от старого мусора. Выясним причину, почему стандартные подходы здесь не работают, и рассмотрим по шагам, как решить эту задачу.
В конфигурации 1С:ERP присутствует встроенная обработка, которая находится в разделе НСИ_и_администрирование — Сервис — Свертка_информационной_базы. Рассмотрим подробнее, как она работает и какие режимы предоставляет.
Обработка поддерживает два режима:
Если ваша база содержит доработки, настоятельно рекомендуем использовать именно контролируемый режим. Он позволяет остановить процесс после первого этапа, сверить обороты и вручную скорректировать сгенерированные документы ВводНачальныхОстатков до того, как исторические данные будут безвозвратно удалены.
Главная сложность при свертке ERP кроется в блоке производства. Разберем основные проблемные места:
ЭтапПроизводства имеет сложную структуру статусов и обеспечений. Анализ незакрытых этапов на дату свертки — нетривиальная задача.Опыт внедренцев показывает, что пытаться полностью свернуть доработанную ERP типовой обработкой на «живой» базе — путь в никуда. Процесс может занять несколько суток, а результат окажется нерабочим. Посмотрим на альтернативный, гибридный алгоритм решения задачи.
Суть гибридного подхода заключается в том, что мы не удаляем документы из текущей базы, а переносим справочники и сформированные остатки в новую (чистую) базу. Разберем по шагам:
КорректировкаРегистров или кастомные документы ввода остатков.Если вам нужно свернуть самописный регистр сведений или регистр накопления, вы можете программно сформировать документ КорректировкаРегистров. Посмотрим на пример кода, который создает такой документ и добавляет в него движения для нужного регистра:
// Создаем новый документ Корректировка регистров
ДокументКорректировка = Документы.КорректировкаРегистров.СоздатьДокумент();
ДокументКорректировка.Дата = ДатаСвертки;
ДокументКорректировка.Комментарий = "Свертка нетипового регистра НЗП";
// Указываем, какие регистры будем корректировать
ТаблицаРегистров = ДокументКорректировка.ТаблицаРегистровНакопления;
НоваяСтрокаРегистра = ТаблицаРегистров.Добавить();
НоваяСтрокаРегистра.Имя = "НашНетиповойРегистрНЗП";
ДокументКорректировка.Записать();
// Получаем набор записей нужного регистра с отбором по нашему документу
НаборЗаписей = РегистрыНакопления.НашНетиповойРегистрНЗП.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ДокументКорректировка.Ссылка);
// Здесь должен быть код получения свернутых остатков из виртуальной таблицы
// Допустим, мы выгрузили их в ТаблицуЗначений "ТаблицаОстатков"
Для Каждого СтрокаОстатка Из ТаблицаОстатков Цикл
НовоеДвижение = НаборЗаписей.Добавить();
НовоеДвижение.ВидДвижения = ВидДвиженияНакопления.Приход;
НовоеДвижение.Период = ДатаСвертки;
НовоеДвижение.Номенклатура = СтрокаОстатка.Номенклатура;
НовоеДвижение.Количество = СтрокаОстатка.Количество;
НовоеДвижение.Сумма = СтрокаОстатка.Сумма;
КонецЦикла;
НаборЗаписей.Записать();
Такой скрипт можно встроить во внешнюю обработку и запускать для каждого нетипового регистра, который не подхватывается стандартным механизмом.
Проанализируем ситуацию в целом: классическая свертка базы (с удалением старых документов) в 1С:ERP крайне не рекомендуется из-за сложной архитектуры программы и высоких рисков нарушения целостности данных. Если база стала работать слишком медленно из-за исторического «мусора», самым надежным и профессиональным решением является методика переноса остатков в новую базу.
Да, этот подход требует написания собственных правил выгрузки для документов ввода остатков и корректировок регистров, особенно если в конфигурации переписан производственный блок или учет затрат. Однако время, потраченное на написание правил обмена и выверку остатков на тестовой копии, с лихвой окупается стабильностью работы новой чистой базы.