При разработке собственных интеграций в экосистеме «1С:Предприятие» программисты часто сталкиваются с необходимостью создания уникального плана обмена. Однако простого добавления объекта метаданных в дерево конфигурации недостаточно для того, чтобы он появился в пользовательском интерфейсе. В современных конфигурациях, созданных на базе Библиотеки стандартных подсистем (БСП) (таких как «Бухгалтерия предприятия 3.0», «Управление торговлей 11» и др.), список доступных обменов формируется динамически программным путем.
В этой статье мы подробно рассмотрим, как правильно зарегистрировать новый план обмена в подсистеме синхронизации данных БСП, настроить его модуль менеджера, определить состав и правила регистрации объектов, а также разберем, как сделать это красиво и без снятия конфигурации с поддержки с помощью механизма расширений.
В БСП за вывод списка доступных настроек синхронизации отвечает специализированный программный механизм. Он опрашивает зарегистрированные в системе планы обмена, проверяет их параметры и выводит пользователю только те, которые официально «объявлены» в коде подсистемы. Это сделано для исключения технических или служебных планов обмена (например, планов обмена для распределенных информационных баз конфигурации) из общего пользовательского списка.
Для интеграции нашего нового плана обмена нам потребуется выполнить несколько последовательных шагов в конфигураторе и в режиме «1С:Предприятие».
---
Основным местом, где регистрируются все планы обмена, участвующие в интеграционных процессах БСП, является общий модуль ОбменДаннымиПереопределяемый. В нем расположена процедура ПолучитьПланыОбмена.
Рассмотрим, как выглядит этот процесс при стандартной доработке конфигурации. Нам необходимо найти данную процедуру и добавить в массив ПланыОбменаПодсистемы имя нашего нового плана обмена:
Процедура ПолучитьПланыОбмена(ПланыОбменаПодсистемы) Экспорт
// Добавляем типовые планы обмена...
// ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.ОбменУправлениеТорговлейБухгалтерияПредприятия30);
// Добавление нашего нового плана обмена:
ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.НашНовыйОбменДанными);
КонецПроцедуры
Если мы не хотим изменять типовую конфигурацию и планируем сохранить ее на полной поддержке, мы можем использовать механизм расширений. Для этого заимствуем общий модуль ОбменДаннымиПереопределяемый в расширение и переопределяем процедуру с помощью аннотации &После:
&После("ПолучитьПланыОбмена")
Процедура Расш_ПолучитьПланыОбмена(ПланыОбменаПодсистемы)
// Безопасно добавляем наш план обмена, созданный в расширении или основной конфигурации
ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.НашНовыйОбменДанными);
КонецПроцедуры
---
Для того чтобы подсистема синхронизации БСП понимала, как именно работать с нашим планом обмена, какие настройки ему сопоставить и какую информацию выводить пользователю, необходимо описать экспортную процедуру ПриПолученииНастроек в модуле менеджера нового плана обмена. Без этой процедуры система выдаст ошибку при попытке инициализировать обмен.
Разберем пример стандартного наполнения этой процедуры в модуле менеджера созданного плана обмена НашНовыйОбменДанными:
Процедура ПриПолученииНастроек(Настройки) Экспорт
// Определяем базовые настройки интеграции
Настройки.ЗаголовокКомандыДляСозданияНовогоОбменаДанными = НСтр("ru = 'Настроить синхронизацию с Нашей Внешней Системой'");
// Имя файла, в который будут выгружены настройки для принимающей стороны
Настройки.ИмяФайлаНастроекДляПриемника = "ПередачаНастроекСинхронизации.xml";
// Определяем, используется ли обмен в модели сервиса (облачные технологии)
Настройки.ДоступенВМоделиСервиса = Ложь;
// Задаем варианты транспорта данных по умолчанию
Настройки.ВариантыТранспортаДанных.Добавить(Перечисления.ВидыТранспортаДанных.ЛокальныйКаталог);
Настройки.ВариантыТранспортаДанных.Добавить(Перечисления.ВидыТранспортаДанных.FTP);
Настройки.ВариантыТранспортаДанных.Добавить(Перечисления.ВидыТранспортаДанных.ЭлектроннаяПочта);
КонецПроцедуры
В зависимости от версии БСП, используемой в вашей конфигурации, имя процедуры может незначительно отличаться (например, в старых версиях это могла быть процедура ПриОпределенииНастроек). Мы рекомендуем ориентироваться на код аналогичных типовых планов обмена в вашей базе данных.
---
БСП ожидает, что внутри плана обмена будут находиться определенные технические макеты. Без них система не сможет инициализировать загрузку и выгрузку данных. Создадим в нашем плане обмена следующие макеты:
ПравилаОбмена (тип: Текстовый документ) — здесь будут храниться правила конвертации данных (обычно XML, созданные в программе «Конвертация данных 2.0» или «3.0»).ПравилаОбменаКорреспондента (тип: Текстовый документ) — аналогичные правила для принимающей стороны (если обмен двусторонний).ПравилаРегистрации (тип: Текстовый документ) — XML-файл с правилами, определяющими, какие именно объекты базы данных должны регистрироваться к отправке при их изменении.ПодробнаяИнформация (тип: HTML-документ) — текстовое описание обмена, которое система покажет пользователю на первом шаге помощника настройки обмена.Даже если на этапе тестирования у вас еще нет готовых правил, создайте эти макеты пустыми или с минимальной XML-структурой, иначе БСП сообщит об их отсутствии при попытке открыть форму создания новой настройки.
---
При проектировании состава нового плана обмена необходимо строго придерживаться стандартов разработки 1С и БСП, чтобы избежать критического снижения производительности базы данных и блокировок транзакций.
Проанализируем ключевые правила настройки состава:
Авторегистрация должно быть установлено в значение «Запретить». Стандартный механизм авторегистрации платформы накладывает избыточные блокировки на таблицы СУБД. БСП решает эту проблему собственным оптимизированным механизмом.ОбменДаннымиСобытияПередЗаписью... или ОбменДаннымиСобытияПередУдалением...). Эти подписки вызывают код БСП, который производит запись в таблицы регистрации изменений на основании XML-правил регистрации из макета ПравилаРегистрации.СоответствияОбъектовИнформационныхБаз. Этот регистр используется механизмами БСП для сопоставления ссылок объектов (UUID) между базами данных и предотвращения дублирования справочников и документов.---
После того как все изменения внесены и база данных обновлена в конфигураторе, проверим результат:
ПриПолученииНастроек (в нашем примере: «Настроить синхронизацию с Нашей Внешней Системой»).Если пункт появился, значит, программная интеграция выполнена корректно! Теперь вы можете приступить к непосредственной отладке правил конвертации и обмена сообщениями между информационными системами.