При формировании первичного (начального) образа подчиненного узла Распределенной Информационной Базы (РИБ) разработчики и администраторы иногда сталкиваются с неприятной проблемой: в новом периферийном узле документы переносятся не полностью. Например, документ поступления товаров в центральной базе содержит 200 записей в регистре накопления ПартииТоваровНаСкладах, а в новом узле — всего 50. Рассмотрим подробно, почему происходит усечение движений и какими способами можно восстановить полноту данных.
На первый взгляд кажется, что платформа 1С при создании начального образа переносит абсолютно все данные, включенные в состав плана обмена. Однако на этот процесс оказывают влияние как настройки самой конфигурации, так и платформенные механизмы.
ПриОтправкеДанныхПодчинённому, принимающий параметр СозданиеНачальногоОбраза. Если в конфигурации прописаны алгоритмы пропуска определенных метаданных или движений при включенных отборах, платформа отфильтрует часть записей.Проанализируем пример кода из модуля плана обмена, где управляется отправка элементов данных при создании начального образа. С помощью флага СозданиеНачальногоОбраза система определяет, формируется ли первичный образ или идет штатный обмен пакетами:
Процедура ИгнорироватьОтправкуОбъектовНачальногоОбраза(ЭлементДанных, ОтправкаЭлемента, Знач СозданиеНачальногоОбраза = Ложь)
Если Не СозданиеНачальногоОбраза
И ЭтоОбъектНачальногоОбразаУзлаРИБ(ОбъектМетаданных(ЭлементДанных))
И Не ЭтоПредопределенныйЭлемент(ЭлементДанных) Тогда
ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
КонецЕсли;
КонецПроцедуры
Если в аналогичные процедуры выгрузки вписана логика проверки движений по складам или организациям, которые не должны попадать в подчиненный узел, часть записей регистра будет установлена в значение ОтправкаЭлементаДанных.Игнорировать.
Выяснив возможные причины, разберем по шагам варианты устранения неполноты данных в созданном узле.
Всегда формируйте начальный образ информационной базы исключительно под учетной записью с административными правами, у которой отключены любые механизмы RLS. Это исключит платформенное отсечение записей СУБД.
Если начальный образ уже создан, а пересоздавать его целиком слишком затратно по времени, можно довыгрузить отсутствующие движения через регистрацию изменений. Проводить сами документы заново при этом не требуется. Достаточно зарегистрировать наборы записей конкретных регистров по нужным регистраторам с помощью метода ПланыОбмена.ЗарегистрироватьИзменения().
Стандартный механизм СоздатьНачальныйОбраза() выполняется в рамках одной транзакции, что на больших объемах данных может приводить к сбоям. Надежный альтернативный способ создания подчиненного узла состоит из следующих шагов:
.dt или средствами СУБД).ПланыОбмена.УстановитьГлавныйУзел(), передавая ссылку на узлы плана обмена.Этот подход гарантирует 100% совпадение всех движений документов и исключает потери при формировании периферийной базы.