Свёртка распределённой информационной базы (РИБ) — одна из наиболее трудоёмких и рискованных процедур при администрировании баз 1С:Розница 2.3. Основная сложность заключается не в самой обработке удаления документов и формировании остатков, а в механизме регистрации изменений планов обмена. Разберём подробно, почему возникает проблема, обязательно ли отвязывать периферийные узлы и какие практические способы позволяют корректно выполнить процедуру с минимальными трудозатратами.
В чём заключается проблема свёртки в распределённой базе
Проанализируем механику работы типового плана обмена. В процессе свёртки информационная база создаёт документы ввода остатков, а сотни тысяч исторических документов помечаются на удаление либо физически удаляются из базы. Для каждого изменённого или помеченного на удаление объекта система автоматически создаёт запись в таблицах регистрации изменений плана обмена (_1SChngR).
В результате при следующей штатной синхронизации платформа пытается выгрузить гигантский пакет данных размером в несколько гигабайт XML. Это приводит к критическим сбоям:
Сериализатор XML платформы 1С завершает работу аварийно с ошибкой Недостаточно памяти (Out of Memory), особенно на 32-битных клиентах или серверах с ограниченными ресурсами.
Периферийные базы на торговых точках часто работают в файловом режиме, где размер внутренней таблицы базы ограничен 4 ГБ. Попытка загрузить огромный пакет приводит к полному зависанию базы или повреждению файла базы данных.
Длительные транзакции блокируют базу и вызывают таймауты соединений.
Перед началом любых манипуляций со свёрткой обязательно выполним предварительные операции, специфичные для розничной торговли:
Архивация чеков ККМ. Запустим штатную процедуру архивации чеков за закрытые кассовые смены. В результате отдельные чеки сворачиваются в сводные документы ОтчетОРозничныхПродажах, что сразу освобождает существенный объём дискового пространства и облегчает последующую обработку.
Проверка накопительных программ и бонусов. Типовые документы ввода остатков могут некорректно сформировать остатки по бонусным баллам и порогам накопительных скидок. Зафиксируем текущие остатки баллов покупателей, чтобы проверить их после свёртки.
Контроль подарочных сертификатов. Убедимся, что проданные, но ещё не отоваренные сертификаты сохранили статус активных и доступных к оплате.
Синхронизация и создание резервных копий. Выполним полный взаимный обмен между главным узлом и всеми периферийными точками до состояния, когда в очередях обмена нет неотправленных и непринятых пакетов, после чего снимем полные копии всех баз данных.
Способ 1. Свёртка в центральной базе с ручной очисткой регистрации изменений
Рассмотрим сценарий, при котором периферийный узел не отвязывается, а пересоздание начального образа не требуется. Это позволяет сохранить рабочие места, параметры торгового оборудования и настройки пользователей на торговой точке.
Разберём пошаговый алгоритм:
Выполняем штатную свёртку информационной базы только в главном (центральном) узле.
Важно: до запуска процедуры синхронизации открываем обработку Регистрация изменений для обмена данными.
Находим узел периферийной базы и полностью отменяем регистрацию изменений по удалённым и помеченным на удаление документам прошлых периодов, а также по регистрам накопления, движения которых были свернуты.
Оставляем на узле только регистрацию новых документов ввода остатков и изменённых элементов справочников.
В периферийном узле аналогичные исторические документы удаляем локально с помощью групповой обработки удаления данных, чтобы не перегружать канал связи выгрузкой сотен тысяч удалений через XML.
Запускаем штатный обмен — файл синхронизации получится компактным и успешно загрузится на кассе без переполнения памяти.
Способ 2. Временное отсоединение узла от РИБ
Если объём данных критически велик, надёжнее временно разорвать связь между базами, выполнить свёртку параллельно и восстановить связь без пересоздания базы и повторного ввода оборудования.
Разберём реализацию данного подхода по шагам:
Дожидаемся полного завершения обменов и создаём резервные копии.
В периферийной базе программно снимаем признак подчинения главному узлу. Для этого выполним следующий код:
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
База становится автономной. Все локальные настройки: справочник РабочиеМеста, ПодключаемоеОборудование, авторизация кассиров и системные параметры торговой точки остаются в сохранности.
Проводим процедуру свёртки параллельно в центральной и отвязанной периферийной базах на одну и ту же дату среза.
После завершения свёртки и контроля остатков возвращаем главному узлу статус центрального. Для этого программно укажем ссылку на узел:
УзелКорень = ПланыОбмена.ПолнотекстовыйПоиск.НайтиПоКоду("ЦУ"); // Указываем имя или код главного узла
ПланыОбмена.УстановитьГлавныйУзел(УзелКорень);
С помощью обработки регистрации изменений выравниваем номера отправленных и принятых сообщений в обеих базах, чтобы разорванный обмен продолжился штатно без требования инициализации начального образа.
Способ 3. Пересоздание узла с переносом настроек оборудования
Создание чистого начального образа — наиболее надёжный способ получить максимально компактную базу на кассе, однако администраторы часто избегают его из-за потери настроек торгового оборудования, сканеров, фискальных регистраторов и авторизации пользователей.
Эту проблему можно решить штатной выгрузкой настроек. Разберём порядок действий:
В старой периферийной базе с помощью универсальной обработки Выгрузка и загрузка данных XML выгружаем служебные справочники: РабочиеМеста, ПодключаемоеОборудование, а также привязанных к кассе локальных пользователей.
В центральной базе выполняем свёртку и формируем новый начальный образ для кассового узла.
Разворачиваем созданный образ на кассе.
С помощью той же обработки загружаем ранее выгруженный XML-файл с оборудованием.
Проверяем соответствие имени локального компьютера и сетевого имени рабочего места кассира. Оборудование и кассы ККМ сразу переходят в рабочее состояние без ручной перенастройки драйверов и портов.