Как правильно выполнить свертку базы 1С:Управление торговлей и почему не работает свертка через РИБ?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет IT и автоматизация бизнеса
← На главную

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

Суть проблемы: почему стандартная «свертка через РИБ» не оправдывает ожиданий

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

Выясним причину такого поведения системы. При вызове метода создания начального образа подчиненного узла (через Конфигуратор или программно) платформа физически копирует всю базу данных целиком (создается полный клон СУБД или файлового CD-файла). На этом этапе любые настроенные фильтры регистрации изменений в планах обмена игнорируются. Фильтры начинают работать только при последующих регулярных сеансах синхронизации. Таким образом, получить урезанную по дате базу напрямую из механизма создания начального образа РИБ технически невозможно.

Пошаговые обходные пути реализации свертки через РИБ

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

Способ А: Метод обратной очистки (Переименование узлов в копии)

  1. Создаем полную резервную копию основной информационной базы. Это будет наша будущая «свернутая» база.
  2. В созданной копии полностью очищаем таблицы регистрации изменений. Для этого можно использовать стандартную обработку «Регистрация изменений для обмена данными» или написать простой скрипт очистки регистраций:

ВыборкаУзлов = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.Выбрать();
Пока ВыборкаУзлов.Следующий() Цикл
    Если ВыборкаУзлов.Ссылка = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.ЭтотУзел() Тогда
        Продолжить;
    КонецЕсли;
    ПланыОбмена.УдалитьРегистрациюИзменений(ВыборкаУзлов.Ссылка);
КонецЦикла;
  1. Переходим в справочник ПланыОбмена в копии базы и меняем местами коды и наименования главного и подчиненного узлов (делаем «перевертыш»).
  2. Программно объявляем текущую базу подчиненным узлом по отношению к нашей центральной базе. Для этого выполняем в режиме «1С:Предприятие» следующую команду:

// Назначаем главный узел для текущей базы
ПланыОбмена.УстановитьГлавныйУзел(СсылкаНаГлавныйУзел);
  1. В настоящей центральной базе настраиваем жесткий фильтр по дате (например, выгружать документы только с 01.08.2018).
  2. Запускаем синхронизацию. Центральная база, обнаружив расхождения, пришлет в наш новый подчиненный узел команды на удаление для всех документов и движений, которые не соответствуют дате фильтра. Подчиненная база автоматически очистится.
  3. После успешного удаления отвязываем базу от главного узла.

Способ Б: Создание «пустого» подчиненного узла

Этот метод исключает процедуру массового удаления данных, выполняя наполнение подчиненной базы с нуля:

  1. Разворачиваем абсолютно чистую базу с идентичной конфигурацией.
  2. Программно прописываем в ней код подчиненного узла РИБ, связав ее с центральной базой.
  3. Настраиваем правила регистрации с фильтрацией по дате в центральном узле.
  4. Запускаем первый сеанс обмена. Из центральной базы в пустую базу «прилетят» только актуальные справочники и документы, созданные после даты свертки.
  5. Важный нюанс: В чистой базе при первом запуске платформа автоматически генерирует предопределенные элементы (валюты, ставки НДС, классификаторы). Чтобы избежать их дублирования при первом обмене, перед синхронизацией необходимо тщательно сопоставить их по уникальным идентификаторам (UUID).

Как правильно «отвязать» подчиненную базу от РИБ

Когда очистка данных в подчиненном узле завершена, базу необходимо превратить в полноценную самостоятельную конфигурацию. Разберем, как корректно снять признак подчиненности РИБ.

Сделать это можно двумя путями:

  1. Через параметры запуска Конфигуратора: Открываем настройки запуска базы в стартере 1С. В поле «Дополнительные параметры запуска» прописываем специальный ключ /ResetMasterNode. Запускаем базу в режиме Конфигуратора один раз. Связь с главным узлом будет аннулирована.
  2. Программным способом в режиме Предприятия: Запускаем внешнюю обработку со следующим кодом:

// Снятие признака подчиненности узла
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);

После отключения РИБ в базах, использующих Библиотеку стандартных подсистем (БСП), могут остаться заблокированными некоторые функции (например, редактирование номеров документов или изменение конфигурации). Чтобы полностью вернуть базу в штатный режим, необходимо сбросить служебные константы. Для этого через «Функции для технического специалиста» находим константы НастройкаПодчиненногоУзлаРИБЗавершена и ЭтоАвтономноеРабочееМесто и устанавливаем их в значение Ложь, а также удаляем сам подчиненный элемент из Плана обмена.

Разбор ошибок при стандартной свертке УТ 11: почему ломаются заказы

Если мы решим пойти по пути стандартного помощника свертки в конфигурации «Управление торговлей 11» (меню «НСИ и администрирование» — «Свертка информационной базы»), мы можем столкнуться с неприятной проблемой: в заказах клиентов и поставщиков автоматически проставляются флаги отмены строк, хотя до свертки все документы были оформлены корректно.

Проанализируем причину этой проблемы. В УТ 11 состояние заказов контролируется сложной системой регистров накопления (таких как ЗаказыКлиентов, ЗаказыПоставщикам). Если на момент даты свертки заказ выполнен не до конца (была частичная отгрузка или неполная оплата), система расценивает его как активный (незавершенный).

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

Решение проблемы с заказами при свертке:

Проблема задвоения предопределенных данных при XML-переносе

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

Чтобы избежать этой проблемы, рекомендуется отказаться от прямой XML-выгрузки в пользу «1С:Конвертация данных 2.0» (КД 2). При настройке правил обмена (ПКО) придерживайтесь следующих правил:

Альтернативный и наиболее надежный сценарий: свертка остатков и переход на новую БП с помощью Конвертации Данных

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

  1. Подготовка УТ: Проводим аудит базы УТ, закрываем все зависшие заказы клиентов и поставщиков, устраняем отрицательные остатки по складам и выполняем «Тестирование и исправление».
  2. Свертка УТ: Запускаем штатный помощник свертки в УТ на выбранную дату (например, на начало года или квартала). Получаем свернутую оперативную базу УТ с вменяемым объемом данных.
  3. Перенос остатков в БП через КД 2.0: Вместо переноса миллионов первичных документов прошлых лет, пишем или используем готовые правила конвертации для переноса **только свернутых остатков** (остатки товаров на складах, взаиморасчеты с контрагентами, остатки денежных средств) на дату свертки из УТ напрямую в документы «Ввод остатков» в БП 3.0.
  4. Настройка обмена: После успешного переноса остатков настраиваем штатную синхронизацию между УТ и БП для автоматического переноса только новых документов текущего периода.

Данный подход гарантирует стабильную работу СУБД, отсутствие мусорных и битых ссылок в новой бухгалтерской базе и избавляет от необходимости долгой и мучительной ручной выверки перенесенных документов прошлых периодов.

← На главную