Как расширить состав плана обмена в расширении 1С и обеспечить корректную выгрузку данных

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

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

Обеспечение доступности состава плана обмена в конфигураторе

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

Для решения этой задачи выполним следующие действия:

  1. Заимствуем необходимый план обмена (например, СинхронизацияДанныхЧерезУниверсальныйФормат) в расширение.
  2. Важный шаг: заимствуем в расширение те объекты метаданных (справочники, документы, регистры), которые мы планируем включить в состав обмена.
  3. Только после того, как объекты появились в дереве метаданных расширения, переходим к редактированию состава плана обмена. Теперь нужные объекты станут доступны для выбора.

Если нам необходимо добавить большое количество объектов сразу, воспользуемся небольшой хитростью в конфигураторе. Вместо того чтобы добавлять каждый объект вручную, мы можем выделить нужные элементы в дереве метаданных основной конфигурации, удерживая клавишу Ctrl или Shift, нажать правую кнопку мыши и выбрать пункт Добавить в расширение. Также допустимо использовать механизм сравнения и объединения с файлом конфигурации (cf), чтобы массово проставить отметки, однако помните, что избыточное расширение метаданных может замедлить работу системы.

Обновление идентификаторов объектов метаданных

Добавление объекта в состав плана обмена в конфигураторе — это лишь половина дела. В современных типовых решениях (ЗУП, ERP, КА) механизмы синхронизации опираются на справочники БСП. Рассмотрим, почему объект может не отображаться в режиме предприятия.

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


Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника();
// Для расширений механизм аналогичен, проверьте вызов в модуле БСП

Проблема универсального формата (EnterpriseData) и XDTO-пакетов

Если вы используете план обмена СинхронизацияДанныхЧерезУниверсальныйФормат, нужно учитывать, что он жестко завязан на технологию XDTO. Мало добавить документ в состав плана обмена, нужно «научить» систему превращать этот документ в XML-сообщение определенного формата.

Разберем ситуацию: вы добавили регистр сведений в состав, но в списке передаваемых объектов его нет. Выясним причину: при использовании универсального формата выгрузка происходит через менеджер обмена. Если в XDTO-пакете EnterpriseData нет описания вашего объекта, или в обработке МенеджерОбменаЧерезУниверсальныйФормат отсутствуют соответствующие правила конвертации, объект будет проигнорирован.

Для решения этой проблемы нам потребуется:

  1. Расширить XDTO-пакет, добавив в него описание структуры вашего объекта (если вы передаете кастомные данные).
  2. Создать или расширить правила регистрации данных. В типовых конфигурациях они часто хранятся в макетах плана обмена.
  3. Внести изменения в модуль менеджера обмена, чтобы определить логику сопоставления полей объекта 1С и узлов XML.

Настройка автоматической регистрации изменений

Проанализируем еще один важный аспект — авторегистрацию. В расширениях свойство Авторегистрация в составе плана обмена иногда требует явного переопределения. Проверим, регистрируются ли изменения, открыв стандартную обработку Регистрация изменений для обмена. Если при записи документа в таблицу изменений ничего не попадает, нам придется прописать регистрацию программно в модуле объекта расширения:


&После("ПередЗаписью")
Процедура Расш_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, ЭтотОбъект);
КонецПроцедуры

Альтернативный подход: использование РИБ

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

Преимущества РИБ в данном контексте:

Для реализации одностороннего обмена в РИБ достаточно программно запретить регистрацию изменений в «принимающей» базе или очищать очередь регистрации перед отправкой ответного сообщения. Это гораздо быстрее, чем переписывать менеджер обмена через универсальный формат.

Резюме

Подводя итог, для успешного расширения состава плана обмена нам необходимо выполнить три условия: корректно заимствовать объекты в конфигураторе для активации интерфейса Состав, обновить идентификаторы метаданных в режиме предприятия и, в случае использования универсального обмена, обеспечить поддержку объекта на уровне XDTO-пакетов и правил конвертации. Если же конфигурации идентичны, использование РИБ через расширение будет более эффективным и менее трудозатратным решением.

← На главную