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

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

Свертка крупной информационной базы, такой как 1С:ERP Управление предприятием, — это сложный и ресурсозатратный процесс. Основная проблема заключается в том, что на предприятиях с непрерывным циклом производства невозможно остановить работу системы на несколько дней, которые требуются стандартной обработке для завершения всех этапов. В данной статье мы разберем методику «живой» свертки базы, проанализируем использование планов обмена для синхронизации данных и рассмотрим альтернативные способы ускорения процесса с помощью SQL.

Метод 1: Использование плана обмена для синхронизации изменений

Рассмотрим основной сценарий, который позволяет не прерывать работу пользователей. Суть метода заключается в подготовке свернутой копии и последующем «доливе» в нее документов, созданных за время свертки. Разберем этот процесс по шагам.

Шаг 1: Подготовка инфраструктуры

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

Шаг 2: Регистрация изменений

Для автоматической фиксации правок установим свойство Авторегистрация в значение «Разрешить». Как только копия базы будет сделана, в основной базе создаем узел обмена. С этого момента система начнет накапливать ссылки на все измененные объекты в таблицах регистрации изменений. Пока на копии несколько дней идет процесс свертки (формирование остатков, удаление движений), основная база продолжает работать, и мы ничего не теряем.

Шаг 3: Перенос накопленных данных

Когда свертка на копии завершена, нам нужно перенести данные, созданные за эти дни, из боевой базы в свернутую. Рассмотрим подробнее, как это сделать без написания сложных правил обмена. Воспользуемся платформенным механизмом выгрузки сообщений обмена в формате XML.

Для выгрузки данных можно использовать стандартную функцию платформы или написать небольшой код для выгрузки сообщения:


ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Exchange\data.xml");
ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелПолучатель);

ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(УзелПолучатель, ЗаписьСообщения.НомерСообщения);
Пока ВыборкаИзменений.Следующий() Цикл
    Данные = ВыборкаИзменений.Получить();
    ЗаписатьXML(ЗаписьXML, Данные);
КонецЦикла;

ЗаписьСообщения.ЗакончитьЗапись();
ЗаписьXML.Закрыть();

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

Метод 2: Оптимизация через прямое взаимодействие с БД (SQL)

Проанализируем ситуацию, когда стандартная свертка работает слишком долго. Чаще всего «узким местом» является этап пометки документов на удаление и очистка движений. Если база имеет внушительный объем, эти действия через объектную модель 1С могут длиться вечность.

Выясним причину: при пометке документа на удаление 1С выполняет проверку прав, подписки на события и транзакционную запись в таблицы. Чтобы ускорить процесс, проанализируем возможность использования SQL-запросов для очистки таблиц регистров.

Внимание: Использование прямых запросов SQL требует высокой квалификации и понимания структуры таблиц. Перед выполнением обязательно получите структуру хранения с помощью функции ПолучитьСтруктуруХраненияБазыДанных().

  1. Очистка движений: Вместо штатного удаления движений каждым документом, можно выполнить TRUNCATE TABLE или DELETE для таблиц регистров накопления и сведений за период до даты свертки. Это происходит практически мгновенно.
  2. Удаление версий объектов: Часто огромный объем базы занимает регистр сведений ВерсииОбъектов. Его очистка перед сверткой может существенно повысить производительность системы.
  3. Пометка на удаление: Если пометка на удаление через 1С идет долго, можно программно установить реквизит ПометкаУдаления в Истина через Запрос и Объект.Записать(РежимЗаписиДокумента.Запись), предварительно отключив все проверки в подписках.

Метод 3: Ручное формирование остатков и использование «Универсальной выгрузки»

Разберем еще один практический совет: иногда проще не использовать стандартную свертку вовсе, а написать собственные обработки формирования документов ВводОстатков. Это актуально для 1С:ERP, где логика партионного учета и интеркампани крайне сложна.

Посмотрим на алгоритм действий:

Важный момент по синхронизации справочников: При использовании обработки ВыгрузкаЗагрузкаДанныхXML83 система автоматически подтягивает связанные справочники. Если в документе задействована новая номенклатура, она будет перенесена вместе с ним. Однако, если справочник был создан, но нигде не использован, он не попадет в выгрузку без явного указания.

Критически важные нюансы при свертке ERP

Проанализируем риски, которые могут возникнуть при использовании любого из методов.

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

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

Механизм «История данных»
Вместо создания дополнительных реквизитов вроде ДатаИзменения, о которых шла речь в дискуссии, мы рекомендуем обратить внимание на системный механизм История данных. Если он включен, вы можете программно получить список всех измененных объектов за любой период, используя метод ИсторияДанных.ВыбратьВерсии(). Это позволит сформировать список объектов для переноса без изменения структуры конфигурации.

Итоговые рекомендации для успешного перехода

Для минимизации времени простоя («окна» переключения) используйте следующую последовательность:

  1. Подготовьте свернутую базу на копии, используя комбинацию стандартной свертки и SQL-оптимизации.
  2. Настройте План обмена в рабочей базе за 3-5 дней до планируемого перехода.
  3. В день перехода («час Х») переведите рабочую базу в режим «Только чтение» для всех пользователей, кроме администратора.
  4. Выполните финальную выгрузку-загрузку данных через план обмена.
  5. Проверьте ключевые отчеты: Остатки и доступность товаров, Ведомость по денежным средствам, Оборотно-сальдовая ведомость. Данные в обеих базах на дату свертки должны совпадать до копейки.
  6. Замените адрес боевой базы на адрес свернутой базы на сервере приложений или переименуйте базы в консоли администрирования 1С.

Таким образом, использование планов обмена в сочетании с грамотной подготовкой данных позволяет провести свертку 1С:ERP практически незаметно для бизнес-процессов предприятия.

← На главную