При разработке расширений для конфигураций на базе 1С:Предприятие 8.3 часто возникает задача добавить новые или существующие объекты в стандартные планы обмена, такие как СинхронизацияДанныхЧерезУниверсальныйФормат. Однако разработчики сталкиваются с тем, что состав плана обмена кажется заблокированным или добавленные объекты не появляются в интерфейсе настройки синхронизации. Разберем пошагово, как решить эти проблемы, учитывая особенности платформы и Библиотеки стандартных подсистем (БСП).
Первая проблема, с которой мы сталкиваемся: при заимствовании плана обмена в расширение вкладка Состав выглядит пустой, а кнопки добавления объектов недоступны. Проанализируем причину этой ситуации. Платформа 1С требует, чтобы план обмена «видел» объекты в том же контексте, где он находится. Если вы добавили план обмена в расширение, он не может включать в себя объекты основной конфигурации напрямую, пока они не «заявлены» в самом расширении.
Для решения этой задачи выполним следующие действия:
СинхронизацияДанныхЧерезУниверсальныйФормат) в расширение.Если нам необходимо добавить большое количество объектов сразу, воспользуемся небольшой хитростью в конфигураторе. Вместо того чтобы добавлять каждый объект вручную, мы можем выделить нужные элементы в дереве метаданных основной конфигурации, удерживая клавишу Ctrl или Shift, нажать правую кнопку мыши и выбрать пункт Добавить в расширение. Также допустимо использовать механизм сравнения и объединения с файлом конфигурации (cf), чтобы массово проставить отметки, однако помните, что избыточное расширение метаданных может замедлить работу системы.
Добавление объекта в состав плана обмена в конфигураторе — это лишь половина дела. В современных типовых решениях (ЗУП, ERP, КА) механизмы синхронизации опираются на справочники БСП. Рассмотрим, почему объект может не отображаться в режиме предприятия.
Система синхронизации использует справочник ИдентификаторыОбъектовМетаданных. Для объектов, добавленных через расширения, существует отдельный справочник — ИдентификаторыОбъектовМетаданныхРасширения. Если записи в этих справочниках не актуализированы, программный код БСП просто «не увидит» ваше нововведение. Чтобы исправить это, необходимо запустить процедуру обновления идентификаторов. Обычно это происходит автоматически при запуске системы с увеличением номера версии расширения, но можно инициировать процесс принудительно, используя инструменты разработчика или выполнив код:
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника();
// Для расширений механизм аналогичен, проверьте вызов в модуле БСП
Если вы используете план обмена СинхронизацияДанныхЧерезУниверсальныйФормат, нужно учитывать, что он жестко завязан на технологию XDTO. Мало добавить документ в состав плана обмена, нужно «научить» систему превращать этот документ в XML-сообщение определенного формата.
Разберем ситуацию: вы добавили регистр сведений в состав, но в списке передаваемых объектов его нет. Выясним причину: при использовании универсального формата выгрузка происходит через менеджер обмена. Если в XDTO-пакете EnterpriseData нет описания вашего объекта, или в обработке МенеджерОбменаЧерезУниверсальныйФормат отсутствуют соответствующие правила конвертации, объект будет проигнорирован.
Для решения этой проблемы нам потребуется:
Проанализируем еще один важный аспект — авторегистрацию. В расширениях свойство Авторегистрация в составе плана обмена иногда требует явного переопределения. Проверим, регистрируются ли изменения, открыв стандартную обработку Регистрация изменений для обмена. Если при записи документа в таблицу изменений ничего не попадает, нам придется прописать регистрацию программно в модуле объекта расширения:
&После("ПередЗаписью")
Процедура Расш_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, ЭтотОбъект);
КонецПроцедуры
Рассмотрим ситуацию, когда задача стоит в организации одностороннего обмена между двумя идентичными базами ЗУП. Если универсальный формат (EnterpriseData) кажется слишком громоздким для настройки через расширение, проанализируем возможность использования РИБ (Распределенных Информационных Баз).
Преимущества РИБ в данном контексте:
Для реализации одностороннего обмена в РИБ достаточно программно запретить регистрацию изменений в «принимающей» базе или очищать очередь регистрации перед отправкой ответного сообщения. Это гораздо быстрее, чем переписывать менеджер обмена через универсальный формат.
Подводя итог, для успешного расширения состава плана обмена нам необходимо выполнить три условия: корректно заимствовать объекты в конфигураторе для активации интерфейса Состав, обновить идентификаторы метаданных в режиме предприятия и, в случае использования универсального обмена, обеспечить поддержку объекта на уровне XDTO-пакетов и правил конвертации. Если же конфигурации идентичны, использование РИБ через расширение будет более эффективным и менее трудозатратным решением.