Часто перед разработчиками встает сложная задача: необходимо организовать двустороннюю синхронизацию данных (справочников и документов) между полностью самописной конфигурацией (или отраслевым решением) и типовой «Бухгалтерией предприятия 3.0». При этом ключевым условием является сохранение конфигурации-приемника (БП 3.0) на полной поддержке. Разберем ситуацию подробнее и выясним, как обойти встроенные ограничения платформы 1С и Библиотеки стандартных подсистем (БСП).
Если мы создадим новый план обмена, а также правила обмена и регистрации внутри расширения для БП 3.0, мы неминуемо столкнемся с техническим препятствием. Дело в том, что штатный модуль обмена данными (БСП) в типовой конфигурации использует регистры сведений (например, СоответствияОбъектовИнформационныхБаз или ПравилаОбменаДанными), измерения которых имеют составные типы, такие как ПланОбменаСсылка или ЛюбаяСсылка.
Из-за особенностей архитектуры 1С, эти составные типы в основной конфигурации «не видят» новые объекты метаданных, созданные исключительно внутри расширения. Как следствие, типовая подсистема обмена не может записать узел обмена в регистры, что вызывает множественные ошибки при попытке настроить синхронизацию. Рассмотрим несколько рабочих методов решения этой проблемы.
Если вы хотите остаться на привычных правилах обмена Конвертации данных 2.0 (КД 2), самым простым и надежным путем будет отказ от создания собственного плана обмена в расширении в пользу использования уже существующего в БП 3.0.
Проанализируем этот подход по шагам:
ОбменУправлениеТорговлей103БухгалтерияПредприятия30.Преимущество: Так как узел обмена физически принадлежит основной конфигурации, БСП обрабатывает его штатно. Типы данных в регистрах сведений не конфликтуют с узлом, и обмен начинает работать.
Поскольку БСП активно развивается в сторону формата EnterpriseData, использование механизма Конвертации данных 3.0 является более перспективным и архитектурно правильным решением. При обмене через универсальный формат нет жесткой привязки к конкретным объектам метаданных в планах обмена.
Посмотрим на пример того, как это можно реализовать:
СинхронизацияДанныхЧерезУниверсальныйФормат).МенеджерОбменаЧерезУниверсальныйФормат с помощью аннотаций &Вместо или &После.AdditionalInfo) в XML, либо использовать объекты формата Документ.УниверсальныйДокумент, если они предусмотрены используемой версией формата.В этом случае типовое регламентное задание БП 3.0 само берет на себя всю работу по транспорту и фоновой загрузке сообщений.
Если архитектура требует использования строго своего, отдельного плана обмена, созданного в расширении, платформу можно заставить с ним работать путем модификации общих модулей.
Разберем, что потребуется сделать в расширении:
ОбменДаннымиПереопределяемый.
&После("ПолучитьПланыОбмена")
Процедура Расш_ПолучитьПланыОбмена(ПланыОбменаПодсистемы)
ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.НашСобственныйПланИзРасширения);
КонецПроцедуры
СоответствияОбъектовИнформационныхБаз).ПланОбменаСсылка.НашСобственныйПланИзРасширения и ссылки на новые документы.Важный нюанс: при таком подходе также может понадобиться доработка команд синхронизации (заимствование общих команд и добавление их для нового плана обмена). Этот путь требует глубокого понимания внутренностей БСП, но позволяет создать полностью изолированный механизм обмена без модификации кода поставщика.