При переходе с классической технологии обмена данными через «1С:Конвертация данных 2.1» на современную версию 3.0 многие разработчики сталкиваются с отсутствием привычной литературы. Если по версии 2.1 в свое время была выпущена подробная бумажная книга, ставшая настольным пособием, то с третьей версией ситуация обстоит иначе. В этой статье мы подробно разберем, как восполнить этот информационный дефицит, где искать качественные учебные материалы и как решать сложные практические задачи в КД 3.0.
Для начала давайте разберем причины отсутствия физических книг по этой теме. Технология «1С:Конвертация данных 3.0» базируется на концепции универсального формата обмена EnterpriseData (ED). Этот формат, в отличие от жестких правил XML прошлых лет, развивается крайне динамично. Версии формата обновляются регулярно, добавляются новые схемы XDTO, а логика взаимодействия компонентов Библиотеки стандартных подсистем (БСП) постоянно оптимизируется.
Издание классической бумажной книги в таких условиях нерационально: к моменту выхода из типографии часть интерфейсов и подходов к программированию механизмов обмена может существенно измениться. Кроме того, философия КД 3.0 сместила фокус с визуального проектирования связей между реквизитами на написание «чистого кода» в самой конфигурации. Программисту 1С теперь требуется не столько знание специализированного интерфейса конвертора, сколько понимание стандартов XML, схем XDTO и объектной модели БСП.
Поскольку традиционного учебника нет, давайте проанализируем, какими альтернативными ресурсами может воспользоваться разработчик для быстрого погружения в тему:
Давайте проанализируем, в чем заключается ключевое отличие КД 3.0 от КД 2.1. В старой версии мы создавали огромные XML-файлы правил обмена, которые загружались в универсальную обработку. В КД 3.0 результатом настройки правил является генерация модулей на встроенном языке 1С. Вся логика конвертации выгружается в общий модуль конфигурации МенеджерОбменаЧерезУниверсальныйФормат.
Этот подход породил важный современный тренд: опытные разработчики часто отказываются от постоянного использования самой информационной базы «Конвертация данных 3.0» при небольших доработках. Вместо этого они вносят изменения напрямую в код общего модуля конфигурации или создают расширения конфигурации, перехватывая события БСП. Это избавляет от рутинного цикла «выгрузка метаданных – загрузка в КД – настройка правил – генерация модуля – загрузка модуля в рабочую базу».
Одной из наиболее частых практических проблем при переходе на КД 3.0 является реализация сценария обмена «один ко многим» (когда один документ из базы-источника должен породить несколько разных документов в базе-приемнике). Давайте пошагово разберем, как правильно реализовать эту логику в рамках концепции EnterpriseData.
В отличие от КД 2.1, где базы были тесно связаны, в КД 3.0 базы изолированы друг от друга универсальным форматом. Процесс разделяется на два независимых этапа: выгрузка в формат XDTO и загрузка из формата XDTO.
Если при выгрузке одного объекта (например, документа пересортицы) нам необходимо принудительно зарегистрировать и отправить сопутствующие данные, мы должны использовать специальное событие ПКО (Правило конвертации объекта) ПриОтправке. В этом обработчике мы программно инициируем выгрузку дополнительных связанных объектов через вызов методов БСП.
Рассмотрим пример кода, который регистрирует связанные объекты для выгрузки в текущей сессии обмена:
Процедура ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена)
// Проверим, что выгружается нужный нам тип документа
Если ТипЗнч(ДанныеИБ) = Тип("ДокументСсылка.ПересортицаТоваров") Тогда
// Получаем связанные документы, которые нужно отправить следом
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТЧ.ДокументОснование КАК Ссылка
|ИЗ
| Документ.ПересортицаТоваров.Товары КАК ТЧ
|ГДЕ
| ТЧ.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ДанныеИБ);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Принудительно отправляем объект в поток данных обмена
ОбменДаннымиXDTOСервер.ВыгрузкаОбъектаВыборки(Выборка.Ссылка, КомпонентыОбмена);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Метод ОбменДаннымиXDTOСервер.ВыгрузкаОбъектаВыборки() позволяет динамически поместить любой другой связанный объект информационной базы в текущую итерацию обмена, преобразовав его в соответствии с его собственным ПКО.
Если один входящий пакет XDTO должен породить несколько документов в базе-получателе, логику распределения необходимо описывать в обработчиках загрузки. Наиболее подходящим местом является обработчик ПриКонвертацииДанныхXDTO или событие ПослеЗагрузкиДанных.
Давайте посмотрим, как можно считать данные из одного входящего XDTO-объекта и программно создать дополнительный документ в базе-приемнике:
Процедура ПослеЗагрузкиОбъекта(ПолученныйОбъект, ДанныеXDTO, КомпонентыОбмена)
// Проверяем, что загружен целевой документ
Если ТипЗнч(ПолученныйОбъект) = Тип("ДокументОбъект.ПоступлениеТоваровУслуг") Тогда
// Создаем дополнительный документ, например, УстановкаЦенНоменклатуры
НовыйДокумент = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
НовыйДокумент.Дата = ПолученныйОбъект.Дата;
НовыйДокумент.Ответственный = ПараметрыСеанса.ТекущийПользователь;
// Заполняем табличную часть на основе данных загруженного XDTO-пакета
Для Каждого СтрокаXDTO Из ДанныеXDTO.Товары Цикл
НоваяСтрока = НовыйДокумент.Товары.Добавить();
// Сопоставляем номенклатуру по ссылке, полученной при конвертации
НоваяСтрока.Номенклатура = ПолученныйОбъект.Товары[ДанныеXDTO.Товары.Индекс(СтрокаXDTO)].Номенклатура;
НоваяСтрока.Цена = СтрокаXDTO.Цена;
КонецЦикла;
Попытка
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
Исключение
ЗаписьЖурналаРегистрации("ОбменДанными.КонвертацияДанных3",
УровеньЖурналаРегистрации.Ошибка,
НовыйДокумент.Метаданные(),,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЕсли;
КонецПроцедуры
В данном сценарии мы перехватываем объект сразу после его стандартного заполнения механизмами КД 3.0 и, используя входящую структуру ДанныеXDTO, создаем полностью независимый сопутствующий документ.
Для того чтобы ваша работа с КД 3.0 не омрачилась неожиданными сбоями на этапе интеграции, давайте проанализируем три ключевые архитектурные особенности этой конфигурации:
ПередКонвертациейСвойств и явным образом взводить флаги модифицированности для пустых значений.Подводя итог, можно с уверенностью сказать: отсутствие традиционных книг по «1С:Конвертация данных 3.0» компенсируется гибкостью самой платформы 1С и обилием практического кода в типовых конфигурациях. Изучайте структуру EnterpriseData, практикуйтесь на чтении кода менеджеров обмена и используйте расширения для быстрой отладки правил!