При разработке собственных механизмов интеграции в конфигурациях на базе Библиотеки Стандартных Подсистем (БСП), таких как «1С:Зарплата и Управление Персоналом 3.1», часто возникает задача использования типовых инструментов администрирования. Одной из таких задач является отображение созданного вручную плана обмена в стандартной обработке Регистрация изменений для обмена данными.
Рассмотрим подробно, почему новый узел может быть не виден в интерфейсе, какие настройки необходимо выполнить в конфигураторе и какие функции следует реализовать для корректной работы.
Важно понимать, что обработка «Регистрация изменений для обмена данными» — это часть БСП. Она не просто сканирует все планы обмена, существующие в метаданных. Она работает только с теми объектами, которые «разрешены» или «подключены» к подсистеме обмена данными через определенные механизмы настройки.
Если мы просто добавим объект метаданных ПланОбмена, система не увидит его в стандартных сервисных обработках, пока мы явно не укажем, что этот план обмена является частью механизма синхронизации БСП.
Самой частой причиной, по которой новый план обмена не отображается в обработке регистрации изменений, является его отсутствие в составе нужных Определяемых типов (DefinedTypes). Это ключевой момент настройки.
Давайте проверим состав следующих определяемых типов в дереве метаданных:
Общие -> Определяемые типы, открыть его свойства и на вкладке «Тип» отметить галочкой наш новый план обмена.Без включения вашего плана обмена в определяемый тип ПланОбменаПоддерживающийРегистрациюИзменений, типовая обработка будет его игнорировать, даже если вы напишете идеальный код в модулях.
Помимо настройки типов, в современных версиях БСП требуется программная регистрация плана обмена в общем модуле. Это необходимо для того, чтобы подсистема знала о правилах работы с этим планом.
Нам нужно найти общий модуль, который обычно называется ОбменДаннымиПереопределяемый (DataExchangeOverridable). В нем нас интересует процедура ПриПолученииПлановОбмена.
Давайте посмотрим, как выглядит примерный код регистрации:
Процедура ПриПолученииПлановОбмена(ПланыОбмена) Экспорт
// Регистрация нашего нового плана обмена
ПланыОбмена.Добавить(Метаданные.ПланыОбмена.НашНовыйПланОбмена);
КонецПроцедуры
В некоторых версиях конфигураций этот шаг может быть необязателен для простой видимости, но он критичен для полноценной работы обмена.
Автор темы спрашивал о функциях в модуле менеджера. Хотя для того, чтобы узел просто «появился» в списке выбора, функции модуля менеджера могут и не потребоваться (если выполнен пункт с Определяемыми типами), для корректной работы системы нам следует придерживаться стандартов.
Рекомендуем обратить внимание на типовые планы обмена, например ОбменЗарплата3Бухгалтерия3. Если мы откроем его модуль менеджера, то увидим, что БСП ожидает наличия определенных настроек.
Обычно это процедура инициализации настроек, которая может выглядеть так (сигнатура может отличаться в зависимости от версии БСП, всегда сверяйтесь с документацией на ИТС для вашей версии):
// Настройки обмена данными.
//
// Параметры:
// Настройки - Структура - настройки плана обмена.
//
Процедура ПриПолученииНастроек(Настройки) Экспорт
Настройки.ИмяМакетаПравилРегистрации = "ПравилаРегистрации";
Настройки.ИмяМакетаПравилОбмена = "ПравилаОбмена";
// Другие настройки, специфичные для вашего обмена
КонецПроцедуры
В обсуждении упоминалось, что обработка «смотрит» на подписки. Это верное замечание, но с оговоркой. Подписки на события (Event Subscriptions) нужны не столько для отображения самого узла в списке, сколько для:
Чтобы система работала правильно, нам нужно создать подписки на события (обычно ПередЗаписью, ПриЗаписи, ПередУдалением) для объектов, входящих в состав нашего плана обмена. В качестве обработчика эти подписки должны вызывать процедуры из модуля ОбменДаннымиСобытия.
Важно: Имена подписок должны соответствовать стандартам именования БСП (часто это префикс плана обмена + действие), иначе диагностические обработки могут выдавать предупреждения.
Если вы выполнили настройки определяемых типов, но план обмена все равно не виден, применим метод, предложенный в обсуждении — отладку.
Обработка Регистрация изменений для обмена данными является внешней или встроенной частью конфигурации. Если она встроенная:
Обработки -> РегистрацияИзмененийДляОбменаДанными.ПриСозданииНаСервере или в месте, где заполняется список узлов.В отладчике мы увидим, откуда система берет список планов обмена. Чаще всего это будет запрос к метаданным, отфильтрованный через функцию проверки вхождения в ОпределяемыйТип.ПланОбменаПоддерживающийРегистрациюИзменений.
Давайте резюмируем действия для решения проблемы:
ПланОбмена добавлен в тип ПланОбменаПоддерживающийРегистрациюИзменений.ОбменДаннымиПереопределяемый (если это требуется вашей версией БСП).Следуя этому плану, вы гарантированно обеспечите видимость вашего плана обмена в типовых инструментах ЗУП 3.1.