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