При переходе с редакции 2.0 на 3.0 многие разработчики сталкиваются с тем, что привычные механизмы распределенных информационных баз (РИБ) работают иначе. Одной из типичных проблем является ситуация, когда при создании начального образа «РИБ по организации» в периферийную базу улетают только справочники, а документы игнорируются, даже если они зарегистрированы к обмену. Разберем подробно, почему так происходит и как правильно настроить миграцию данных в современных конфигурациях на базе БСП.
Первым делом проанализируем настройки самого узла обмена в пользовательском режиме. В отличие от «Полного РИБ», версия «По организации» требует четкого указания фильтров. Если при создании начального образа или последующей синхронизации документы не попадают в пакет, необходимо проверить следующее:
Регистрация изменений для обмена данными.Выясним причину, по которой простого включения объекта в состав Плана обмена теперь недостаточно. В современных конфигурациях на БСП механизм «Авторегистрация» в Плане обмена часто либо выключен, либо перекрывается программной логикой. Основную работу по фильтрации и регистрации выполняют Подписки на события.
Рассмотрим стандартные подписки, которые отвечают за миграцию документов в РИБ по организации:
ПоОрганизацииЗарегистрироватьИзменениеДокументаПоОрганизацииЗарегистрироватьУдалениеПоОрганизацииРегистрацияНабора (для регистров)Эти подписки вызывают методы общих модулей (например, ОбменДаннымиСобытия), которые проверяют реквизит Организация в документе и сравнивают его со значением, установленным в узле обмена. Если вы добавили в конфигурацию собственный документ, его обязательно нужно включить в список объектов этих подписок, иначе он никогда не будет автоматически регистрироваться для обмена, даже если он добавлен в состав плана обмена.
Проанализируем ситуацию, когда необходимо внедрить в существующий РИБ новый тип документа. Чтобы он корректно мигрировал, выполним следующие шаги:
ПоОрганизации. Рекомендуется устанавливать Авторегистрация = Запретить, так как мы будем использовать механизмы БСП.Организация, но он должен фильтроваться по какому-то другому признаку), нам придется вмешаться в Правила регистрации объектов.Важный момент: В плане обмена ПоОрганизации существует макет ПравилаРегистрации. Это XML-файл, содержащий условия регистрации объектов. Если объект добавлен в состав плана, но отсутствует в этих правилах (или правила не обновлены), регистрация может работать некорректно.
Многие программисты пытаются отладить фильтрацию данных через процедуру ПриОтправкеДанныхПодчиненному в модуле объекта плана обмена. Рассмотрим, почему точка останова в ней может не срабатывать:
Во-первых, в БП 3.0 обмен чаще всего выполняется в фоновом задании. Чтобы отладчик «поймал» этот момент, необходимо включить отладку фоновых заданий в настройках или запускать обмен вручную в текущем сеансе.
Во-вторых, при создании начального образа (Initial Image) работают низкоуровневые механизмы платформы. В некоторых случаях они могут обходить стандартные обработчики модуля плана обмена, выполняя выгрузку данных напрямую по таблице регистрации.
Если автоматическая регистрация через подписки не отработала, мы можем проанализировать код, отвечающий за выборку узлов. В недрах БСП за это отвечает функция, которая определяет массив узлов-получателей на основе значений свойств объекта:
Функция МассивУзловПоЗначениямСвойств(ЗначенияСвойств, Знач ТекстЗапроса, Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага, Знач Выгрузка = Ложь) Экспорт
// Возвращаемое значение функции.
МассивУзловРезультат = Новый Массив;
// Подготавливаем запрос для получения узлов планов обмена.
Запрос = Новый Запрос;
// ... здесь происходит магия фильтрации по Организации ...
Возврат МассивУзловРезультат;
КонецФункции
Если вы пишете свою логику регистрации, вы можете вызвать программную регистрацию в процедуре ПередЗаписью или ПриЗаписи, используя методы глобального менеджера обмена данными:
ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, ЭтотОбъект);
Подведем итог нашему исследованию. Для того чтобы РИБ по организации в БП 3.0 работал корректно, соблюдайте следующий алгоритм:
Организация в настройках синхронизации в обеих базах (ЦБ и ПБ).Организация (например, Номенклатура или Валюты) обычно мигрируют без фильтров (выгружаются всем), именно поэтому они уходят в ПБ первыми, создавая иллюзию работающего обмена.Соблюдение этих структурных правил позволит вам избежать долгих часов отладки и обеспечит надежную работу распределенной базы данных.