Механизм обмена данными — одна из важнейших компетенций 1С-разработчика. Несмотря на активное развитие технологии EnterpriseData (Конвертация данных 3.0), классическая «Конвертация данных 2.1» (КД 2.1) остается промышленным стандартом для реализации сложных, нестандартных и высокопроизводительных переносов данных между любыми конфигурациями 1С. В этой статье мы подробно разберем, с чего начать обучение, какие учебные материалы использовать, как разбираться в программном коде правил и как отлаживать сложные алгоритмы.
Изучение КД 2.1 по обрывкам статей в интернете часто приводит к путанице. Для формирования прочной базы знаний рекомендуется изучить профильную литературу. Рассмотрим основные книги, которые высоко ценятся в профессиональном сообществе:
Для тех, кому проще воспринимать информацию визуально, отличным подспорьем станут практические видеокурсы:
Не нужно пытаться изобрести велосипед. Самый эффективный способ понять, как работают сложные алгоритмы и запросы в КД 2.1 — это препарировать готовые рабочие решения. Разберем, где их взять:
%username%\AppData\Roaming\1C\1cv8\tmplts\) лежат рабочие xml-файлы правил для обмена между УТ, БП, ЗУП и другими типовыми решениями. Импортируйте эти xml-файлы в свою «Конвертацию данных» и посмотрите, как разработчики «1С» решают сложные задачи. Например, как один сложный документ переносится в несколько разных документов или как заполняются реквизиты сопоставления контрагентов и партнеров.Рассмотрим конкретную техническую ситуацию, часто вызывающую вопросы у новичков. Ситуация: у нас есть Правило Конвертации Свойств (ПКС). Источник в интерфейсе не указан, Приемником назначен реквизит «Магазин» (с зеленой галочкой у источника). В обработчике события ПередВыгрузкой этого ПКС написан следующий код:
Значение = Параметры.Магазин;
Выясним причину использования такой конструкции и проанализируем, как она работает по шагам:
Значение? В обработчике ПередВыгрузкой для ПКС система предоставляет специальную переменную Значение. То, что мы запишем в эту переменную внутри кода обработчика, и будет отправлено в файл выгрузки в качестве значения для данного реквизита приемника.Параметры? Это глобальные параметры обмена, которые мы можем заранее определить в КД 2.1 на специальной вкладке «Параметры». При запуске обмена через обработку «Универсальный обмен данными в формате XML» на вкладке «Параметры обмена» пользователь видит интерактивное поле ввода, где может выбрать конкретное значение (в данном случае — элемент справочника «Магазины» из базы-источника).Значение = Параметры.Магазин; берет выбранное пользователем значение глобального параметра обмена и принудительно подставляет его в реквизит «Магазин» для каждого выгружаемого объекта. Таким образом, склад источника гибко превращается в нужный нам магазин в приемнике.Для повышения надежности этот код в обработчике ПередВыгрузкой ПКС рекомендуется усложнить проверкой на заполнение параметра:
Если Параметры.Свойство("Магазин") И ЗначениеЗаполнено(Параметры.Магазин) Тогда
Значение = Параметры.Магазин;
Иначе
// Если параметр не заполнен, мы можем отменить выгрузку конкретно этого свойства
Отказ = Истина;
КонецЕсли;
Главная трудность для начинающего разработчика — это невозможность просто поставить точку останова в конфигураторе КД 2.1, поскольку весь программный код обработчиков выгружается в xml-файл и интерпретируется платформой на лету. Тем не менее в КД 2.1 заложен мощнейший механизм отладки. Разберем его по шагам:
ОбработкаДляОтладкиВыгрузки.epf поставляется вместе с КД 2.1).По мере освоения базовых принципов вам обязательно потребуется программное управление выгрузкой объектов. Рассмотрим важнейшую функцию, которую должен знать каждый разработчик КД 2.1:
ВыгрузитьПоПравилу() — это метод, позволяющий программно вызвать выгрузку любого объекта из любого обработчика событий, не полагаясь на автоматический обход ссылок системой. Это крайне полезно, когда нужно выгрузить связанные данные, табличные части или независимые регистры сведений.
Пример использования функции ВыгрузитьПоПравилу() в обработчике события:
// Создаем структуру исходящих данных для передачи в ПКО
ИсходящиеДанныеДляКонтрагента = Новый Структура;
ИсходящиеДанныеДляКонтрагента.Вставить("Наименование", "Новый Контрагент из алгоритма");
ИсходящиеДанныеДляКонтрагента.Вставить("ИНН", "7700000000");
// Программно вызываем выгрузку по конкретному правилу конвертации (ПКО)
ВыгрузитьПоПравилу(,, ИсходящиеДанныеДляКонтрагента,, "Контрагенты");
Изучая «Конвертацию данных 2.1», помните: не нужно пытаться зазубривать обработчики. Достаточно понять общую архитектуру системы, научиться пользоваться встроенной справкой, читать типовые правила обмена от фирмы «1С» и освоить механизм отладки обработчиков. Со временем вы сможете без труда решать самые сложные интеграционные задачи в среде 1С!