Как правильно выполнить свертку базы 1С:ERP и перенести остатки?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет Промышленность, строительство и АПК
← На главную

Разберем одну из самых сложных и неоднозначных задач при сопровождении крупных систем — свертку информационной базы 1С:ERP Управление предприятием. В отличие от конфигураций вроде 1С:Бухгалтерия или 1С:Управление торговлей, где процесс давно отлажен и легко настраивается, в ERP мы сталкиваемся с колоссальным нагромождением взаимосвязей документов, справочников и регистров.

Проанализируем ситуацию, с которой часто сталкиваются программисты: база за несколько лет работы разрослась, часть алгоритмов учета была переделана, появились нетиповые документы и регистры сведений (например, для сложного непрерывного производства со сроками годности). Возникает естественное желание «срезать» базу на определенную дату, чтобы ускорить работу системы и очистить ее от старого мусора. Выясним причину, почему стандартные подходы здесь не работают, и рассмотрим по шагам, как решить эту задачу.

Типовой механизм свертки в 1С:ERP: скрытые камни

В конфигурации 1С:ERP присутствует встроенная обработка, которая находится в разделе НСИ_и_администрирование — Сервис — Свертка_информационной_базы. Рассмотрим подробнее, как она работает и какие режимы предоставляет.

Обработка поддерживает два режима:

  1. Автоматический — система сама пытается сформировать остатки, удалить старые движения и пометить документы на удаление. Подходит только для полностью типовых и небольших баз без сложного производства.
  2. Контролируемый (пошаговый) — процесс разбивается на этапы: формирование документов ввода остатков, анализ сформированных данных, пометка старых документов на удаление и проведение новых остатков.

Если ваша база содержит доработки, настоятельно рекомендуем использовать именно контролируемый режим. Он позволяет остановить процесс после первого этапа, сверить обороты и вручную скорректировать сгенерированные документы ВводНачальныхОстатков до того, как исторические данные будут безвозвратно удалены.

Почему типовая свертка не справляется с производственным учетом?

Главная сложность при свертке ERP кроется в блоке производства. Разберем основные проблемные места:

  1. Незавершенное производство (НЗП) и себестоимость: Типовая свертка создавалась для универсальных сценариев. На практике корректно «свернуть» НЗП крайне тяжело. Необходимо разделять остатки материалов в цеховых кладовых и фактически понесенные, но еще не распределенные на выпуск затраты.
  2. Нетиповые объекты: Если в конфигурацию добавлены свои регистры накопления или периодические регистры сведений (например, с подчинением регистратору), типовая обработка просто не поймет, по каким правилам их сворачивать, и может выдать ошибку или некорректное сальдо.
  3. Учет по сериям и срокам годности: Если на предприятии ведется строгий партионный или серийный учет (например, скоропортящиеся продукты питания), документы ввода остатков часто плодят «кучу мусора» в виде оторванных от партий серий.
  4. Этапы производства: Документ ЭтапПроизводства имеет сложную структуру статусов и обеспечений. Анализ незакрытых этапов на дату свертки — нетривиальная задача.

Гибридный подход: лучшая практика свертки 1С:ERP

Опыт внедренцев показывает, что пытаться полностью свернуть доработанную ERP типовой обработкой на «живой» базе — путь в никуда. Процесс может занять несколько суток, а результат окажется нерабочим. Посмотрим на альтернативный, гибридный алгоритм решения задачи.

Суть гибридного подхода заключается в том, что мы не удаляем документы из текущей базы, а переносим справочники и сформированные остатки в новую (чистую) базу. Разберем по шагам:

  1. Подготовка идеальной копии: Создаем полную копию рабочей базы. Вся грязная работа будет выполняться именно здесь, чтобы не останавливать работу предприятия.
  2. Закрытие периода: КРИТИЧЕСКИ ВАЖНЫЙ ШАГ. Перед любыми манипуляциями сворачиваемый период должен быть идеально закрыт. Все регламентные операции по закрытию месяца, расчету себестоимости и распределению затрат должны быть выполнены без ошибок. В регистрах не должно быть отрицательных остатков.
  3. Частичная типовая свертка на копии: Запускаем типовую обработку свертки на копии базы для стандартных и нетронутых блоков (например, касса, банк, взаиморасчеты с контрагентами, простой склад). Останавливаемся на этапе создания документов ввода остатков.
  4. Обработка нетиповых участков: Для самописных регистров и сложного НЗП программист пишет собственные внешние обработки. Эти обработки анализируют остатки на дату сверзки и формируют документы КорректировкаРегистров или кастомные документы ввода остатков.
  5. Перенос данных в чистую базу: Создается чистая (пустая) база 1С:ERP аналогичного релиза. Настраивается обмен (например, через планы обмена или универсальную выгрузку в формате XML). Из скопированной базы в чистую переносятся только справочники, непериодические регистры сведений и сформированные нами идеальные документы начальных остатков и корректировок.

Пример программного формирования корректировки регистров

Если вам нужно свернуть самописный регистр сведений или регистр накопления, вы можете программно сформировать документ КорректировкаРегистров. Посмотрим на пример кода, который создает такой документ и добавляет в него движения для нужного регистра:


// Создаем новый документ Корректировка регистров
ДокументКорректировка = Документы.КорректировкаРегистров.СоздатьДокумент();
ДокументКорректировка.Дата = ДатаСвертки;
ДокументКорректировка.Комментарий = "Свертка нетипового регистра НЗП";

// Указываем, какие регистры будем корректировать
ТаблицаРегистров = ДокументКорректировка.ТаблицаРегистровНакопления;
НоваяСтрокаРегистра = ТаблицаРегистров.Добавить();
НоваяСтрокаРегистра.Имя = "НашНетиповойРегистрНЗП";

ДокументКорректировка.Записать();

// Получаем набор записей нужного регистра с отбором по нашему документу
НаборЗаписей = РегистрыНакопления.НашНетиповойРегистрНЗП.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ДокументКорректировка.Ссылка);

// Здесь должен быть код получения свернутых остатков из виртуальной таблицы
// Допустим, мы выгрузили их в ТаблицуЗначений "ТаблицаОстатков"

Для Каждого СтрокаОстатка Из ТаблицаОстатков Цикл
    НовоеДвижение = НаборЗаписей.Добавить();
    НовоеДвижение.ВидДвижения = ВидДвиженияНакопления.Приход;
    НовоеДвижение.Период = ДатаСвертки;
    НовоеДвижение.Номенклатура = СтрокаОстатка.Номенклатура;
    НовоеДвижение.Количество = СтрокаОстатка.Количество;
    НовоеДвижение.Сумма = СтрокаОстатка.Сумма;
КонецЦикла;

НаборЗаписей.Записать();

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

Подведение итогов

Проанализируем ситуацию в целом: классическая свертка базы (с удалением старых документов) в 1С:ERP крайне не рекомендуется из-за сложной архитектуры программы и высоких рисков нарушения целостности данных. Если база стала работать слишком медленно из-за исторического «мусора», самым надежным и профессиональным решением является методика переноса остатков в новую базу.

Да, этот подход требует написания собственных правил выгрузки для документов ввода остатков и корректировок регистров, особенно если в конфигурации переписан производственный блок или учет затрат. Однако время, потраченное на написание правил обмена и выверку остатков на тестовой копии, с лихвой окупается стабильностью работы новой чистой базы.

← На главную