Почему при создании нового узла РИБ в 1С выгружаются не все движения документов и как это исправить?

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

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

Причины неполной выгрузки движений при создании начального образа

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

  1. Программная обработка события выгрузки в модуле плана обмена. В стандартных и доработанных конфигурациях (например, УПП, УТ 10.3) логика формирования начального образа может корректироваться программно. В модуле плана обмена используется обработчик ПриОтправкеДанныхПодчинённому, принимающий параметр СозданиеНачальногоОбраза. Если в конфигурации прописаны алгоритмы пропуска определенных метаданных или движений при включенных отборах, платформа отфильтрует часть записей.
  2. Ограничения прав на уровне записей (RLS). Если выгрузка начального образа запускается от имени пользователя, у которого активны роли с ограничением доступа на уровне записей (RLS), платформа СУБД отфильтрует все строки регистров, не подпадающие под условия прав этого пользователя. При этом процесс завершится без видимых ошибок.
  3. Настройки фильтрации узлов (по организациям, складам, подразделениям). Даже если план обмена является РИБ, в нем могут быть задействованы механизмы отбора данных, переопределяющие состав отправляемых записей регистров накопления и сведений.
  4. Ошибки ссылочной целостности и битые ссылки. Наличие записей регистров, ссылающихся на несуществующие регистраторы или удаленные объекты, приводит к пропускам таких строк при стандартной сериализации данных.

Анализ программного кода выгрузки

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


Процедура ИгнорироватьОтправкуОбъектовНачальногоОбраза(ЭлементДанных, ОтправкаЭлемента, Знач СозданиеНачальногоОбраза = Ложь)
    
    Если Не СозданиеНачальногоОбраза
        И ЭтоОбъектНачальногоОбразаУзлаРИБ(ОбъектМетаданных(ЭлементДанных))
        И Не ЭтоПредопределенныйЭлемент(ЭлементДанных) Тогда
        
        ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
        
    КонецЕсли;
    
КонецПроцедуры

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

Способы решения проблемы и восстановления данных

Выяснив возможные причины, разберем по шагам варианты устранения неполноты данных в созданном узле.

Шаг 1. Проверка прав и запуск под полными правами

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

Шаг 2. Точечная дорегистрация движений документов

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

Шаг 3. Создание узла через полную копию информационной базы

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

  1. Разворачиваем полную копию центральной информационной базы (через выгрузку файла .dt или средствами СУБД).
  2. В созданной копии программно устанавливаем связь с главным узлом с помощью вызова функции ПланыОбмена.УстановитьГлавныйУзел(), передавая ссылку на узлы плана обмена.
  3. В центральной базе и в новом подчиненном узле выравниваем номера отправленных и принятых сообщений обмена.
  4. При необходимости удаляем из подчиненного узла неактуальные настройки или лишние данные.

Этот подход гарантирует 100% совпадение всех движений документов и исключает потери при формировании периферийной базы.

← На главную