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