Как настроить автоматическую регистрацию справочников «при необходимости» в 1С:Конвертация данных 2.1?

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

При настройке обмена данными между конфигурациями на платформе 1С:Предприятие с использованием 1С:Конвертация данных 2.1 (КД 2.1) программисты часто сталкиваются с ситуацией, когда связанные объекты (например, справочники, указанные в реквизитах документов) не переносятся в базу-приемник. В результате в приемнике вместо полноценного объекта мы видим так называемую «битую ссылку» — объект с правильным уникальным идентификатором (UUID), но без заполненного наименования и других реквизитов.

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

Разбор механизма «Выгружать при необходимости»

Для начала проанализируем, как задуман этот режим в КД 2.1. Когда мы устанавливаем для справочника в правилах выгрузки данных (ПВД) или правилах конвертации объекта (ПКО) режим ВыгружатьПриНеобходимости, мы ожидаем, что объект будет выгружен только тогда, когда на него есть ссылка в другом объекте (например, в документе СписаниеСРасчетногоСчета), который уже зарегистрирован на узле плана обмена.

Однако на практике работа этого механизма тесно связана с тем, как инициируется обмен. Рассмотрим два сценария:

  1. Выгрузка по ссылке: Если основной объект выгружается, программа ищет подходящее ПКО для реквизита. Если ПКО найдено, данные будут помещены в файл обмена. Но если в ПКО справочника стоит флаг «Не замещать объекты в приемнике» или если в базе-приемнике уже есть объект с таким UUID (но пустой), данные могут не обновиться.
  2. Регистрация изменений: В современных системах обмен чаще всего происходит через планы обмена. Если справочник не зарегистрирован в таблице изменений узла, механизм обмена БСП может просто проигнорировать необходимость передачи его полной структуры, ограничившись только ссылкой.

Почему возникают «битые ссылки»?

Выясним причину, по которой документ выгружается успешно, а связанное с ним подразделение — нет. Если при регистрации документа СписаниеСРасчетногоСчета в базе-приемнике вместо подразделения появляется пустая запись, это означает, что ссылка (UUID) была передана, но само тело объекта (его реквизиты) отсутствовало в файле выгрузки.

Это происходит потому, что для корректной работы «выгрузки по ссылке» в КД 2.1 требуется выполнение нескольких условий:

Роль подписок на события в БСП

Проанализируем наиболее критичный момент, который часто упускают разработчики. В конфигурациях, использующих БСП (например, «Бухгалтерия предприятия 3.0», «Управление торговлей 11»), регистрация объектов на узлах плана обмена происходит не автоматически платформой, а программно, через механизмы правил регистрации объектов (ПРО).

Чтобы код регистрации вообще начал выполняться, объект должен быть включен в соответствующую подписку на события. Обычно такие подписки называются по шаблону ОбменДанными[ИмяПланаОбмена]Регистрация, ОбменДанными[ИмяПланаОбмена]РегистрацияДокумента или ОбменДанными[ИмяПланаОбмена]РегистрацияСправочника.

Если вы добавили новый справочник (например, ПодразделенияОрганизаций) в состав плана обмена в конфигураторе, но забыли добавить его в состав источников подписки на события ПриЗаписи, то при изменении подразделения или даже при попытке программной регистрации через БСП ничего не произойдет. Код, который должен обращаться к правилам регистрации и записывать изменения в таблицу плана обмена, просто не будет вызван.

Настройка правил регистрации объектов (ПРО)

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

Посмотрим на типичный алгоритм настройки:

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

Если вы внесли изменения в состав подписок, обязательно выполните обновление конфигурации базы данных. Без этого регистрация «по ссылке» может отрабатывать некорректно, так как БСП не будет видеть объект как полноправного участника обмена.

Практические рекомендации по исправлению

Разберем по шагам, что нужно сделать, если вы столкнулись с проблемой отсутствия регистрации справочника:

Шаг 1. Проверка ПКО и ПКС. Убедитесь, что в правилах конвертации (XML) для свойства документа указано конкретное ПКО справочника. Если поле ПКО оставлено пустым, система попытается определить его автоматически, что иногда приводит к сбоям при сложной иерархии правил.

Шаг 2. Принудительная выгрузка по правилу. В некоторых случаях помогает программный вызов выгрузки в обработчике ПКС ПриВыгрузке. Это гарантирует, что объект будет обработан конвертацией независимо от настроек регистрации:


// Пример в обработчике ПКС "Подразделение" документа
Если ЗначениеЗаполнено(Источник.Подразделение) Тогда
    ВыгрузитьПоПравилу(Источник.Подразделение, , , , "ПодразделенияОрганизаций");
КонецЕсли;

Шаг 3. Включение в подписку. Это самое частое решение. Откройте дерево метаданных, перейдите в раздел Общие -> Подписки на события. Найдите подписку, связанную с вашим планом обмена (например, СинхронизацияДанныхЧерезУниверсальныйФорматРегистрацияСправочника). В списке типов объектов-источников найдите ваш справочник и установите флажок.

Шаг 4. Сброс кэша правил. После изменения правил регистрации в режиме «1С:Предприятие» не забудьте, что БСП может кэшировать эти правила. Рекомендуется перезайти в программу или воспользоваться обработкой «Регистрация изменений для обмена данными», чтобы проверить, появляются ли объекты в списке изменений при их записи.

Резюме

Механизм «Выгружать при необходимости» в связке с БСП требует внимательного отношения к метаданным конфигурации. Помните, что правила конвертации (ПКО) отвечают за то, как объект превращается в XML, а подписки на события и план обмена — за то, когда и какой объект должен попасть в этот процесс. Если справочник не включен в подписку на события, автоматическая регистрация «прицепом» к документу может не сработать, оставляя в базе-приемнике лишь пустые ссылки.

← На главную