Обмен EnterpriseData (универсальный формат, «КД3-обмен») можно доработать без «Конвертации данных 3»: правила обработки данных (ПОД) и правила конвертации объектов (ПКО) — это обычные процедуры в модуле менеджера обмена через универсальный формат. Чтобы передать новый документ с табличной частью, нужно в обеих базах добавить его в план обмена и правила регистрации, описать объект в пакете XDTO формата, а затем написать ПОД и ПКО на отправке и на приеме. Табличная часть передается таблицей значений в ДанныеXDTO.

Этот путь нужен, когда проекта КД3 для ваших конфигураций нет или он устарел, а доработать обмен надо сейчас. Ниже — маршрут по шагам, образцы обработчиков и проверки, которые экономят время отладки.

Когда это оправдано

СитуацияРекомендация
Есть актуальный проект КД3 для обеих конфигурацийДорабатывайте в КД3 и генерируйте модуль
Проекта нет, обе базы вашиРучная доработка по этой инструкции
Обмен с типовой базой, которую вы не меняетеТолько типовые объекты формата или расширение формата
Обменов много и они разнородныеПосмотрите в сторону интеграционной шины

Ручная доработка — это код, который придется поддерживать при обновлениях. Держите доработки в одном месте, с префиксом и комментариями: при следующем обновлении типовой их придется переносить.

Шаг 1. Регистрация документа к обмену

  1. План обмена. Добавьте документ в состав плана обмена, по которому работает синхронизация. Авторегистрацию, как правило, выключают: регистрацией управляют правила.
  2. Правила регистрации объектов. Выгрузите действующие правила из настроек обмена, доработайте их (например, в «Конвертации данных 2», где редактируются правила регистрации), загрузите обратно в настройки и положите обновленную версию в макет правил регистрации плана обмена, чтобы она не потерялась при пересоздании настроек.
  3. Проверка. Запишите тестовый документ и убедитесь, что он появился в составе изменений узла.

Шаг 2. Объект в формате EnterpriseData

  1. Пакет XDTO. Добавьте объект формата (например, Документ.АктОсмотра со свойствами шапки и табличной частью Товары) в пакет формата по аналогии с соседними объектами. Делайте это в обеих базах одинаково; для проверки выгрузите пакеты в файлы и сравните их средствами конфигуратора «Файл» → «Сравнить файлы».
  2. Поддерживаемые объекты. Добавьте объект формата в список объектов, которые узел умеет отправлять и принимать. В исходной реализации это процедура ЗаполнитьСтруктуруНастроекXDTO общего модуля ОбменДаннымиXDTOСервер; в вашей версии БСП место может отличаться — найдите, где перечислены уже существующие объекты формата. Указывается именно имя объекта формата, а не объекта метаданных.

Если менять пакет формата нельзя (обмен с чужой типовой базой), используйте механизм расширений формата: отдельный пакет с вашими объектами, который поддерживает подсистема обмена.

Обмен EnterpriseData: документ разбирается на шапку и строки и собирается в приемнике
Обмен EnterpriseData: документ разбирается на шапку и строки и собирается в приемнике

Шаг 3. Правила на стороне отправителя

Все процедуры пишутся в модуле менеджера обмена через универсальный формат (МенеджерОбменаЧерезУниверсальныйФормат). Лучший способ не ошибиться в служебных функциях — скопировать набор процедур уже существующего документа с табличной частью и заменить имена.

ПроцедураНазначениеКуда добавить вызов
ДобавитьПОД_Документ_АктОсмотра_ОтправкаПравило обработки: какой объект выбирать и какие ПКО использоватьЗаполнитьПравилаОбработкиДанных
ДобавитьПКО_Документ_АктОсмотра_ОтправкаПравило конвертации: соответствие свойств конфигурации и форматаЗаполнитьПравилаКонвертацииОбъектов
ПКО_Документ_АктОсмотра_Отправка_ПриОтправкеДанныхКлючевые свойства, вычисляемые свойства, табличные частиВыполнитьПроцедуруМодуляМенеджера
ПОД_Документ_АктОсмотра_Отправка_ПриОбработкеВыбор ПКО по условию (по подразделению, виду операции)ВыполнитьПроцедуруМодуляМенеджера

Правила описания свойств в ПКО:

  • Примитивные типы (дата, число, строка): достаточно указать свойство конфигурации и свойство формата.
  • Ссылочные типы (организация, номенклатура): дополнительно имя правила конвертации свойства, то есть ПКО справочника, по которому объект будет выгружен.
  • Свойства, вычисляемые алгоритмом: свойство конфигурации оставляют пустым, отмечают использование алгоритма, а значение кладут в ДанныеXDTO в обработчике. Если такое свойство ссылочное, ПКС для него все равно указывается.
  • Табличная часть: отдельная таблица свойств в СвойстваТабличныхЧастей правила, с колонками и их ПКС.

Имя ПКО (ИмяПКО) должно совпадать со строкой, которую ПОД перечисляет в используемых ПКО, — опечатка здесь дает тихий пропуск объекта.

Обработчик ПриОтправкеДанных

Сигнатуру берите из соседних обработчиков вашего модуля; обычно это (ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки).

1С
// Заполняет ключевые свойства и табличную часть акта для выгрузки в EnterpriseData.
Процедура ПКО_Документ_АктОсмотра_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)

	// Ключевые свойства: по ним приемник ищет уже загруженный документ.
	КлючевыеСвойства = Новый Структура;
	КлючевыеСвойства.Вставить("Номер", ДанныеИБ.Номер);
	КлючевыеСвойства.Вставить("Дата", ДанныеИБ.Дата);
	ДанныеXDTO.Вставить("КлючевыеСвойства", КлючевыеСвойства);

	// Табличная часть: имена колонок совпадают со свойствами формата из ПКО.
	Товары = Новый ТаблицаЗначений;
	Товары.Колонки.Добавить("Номенклатура");
	Товары.Колонки.Добавить("Количество");
	Товары.Колонки.Добавить("Комментарий");

	Для Каждого СтрокаАкта Из ДанныеИБ.Товары Цикл
		НоваяСтрока = Товары.Добавить();
		НоваяСтрока.Номенклатура = СтрокаАкта.Номенклатура;
		НоваяСтрока.Количество = СтрокаАкта.Количество;
		НоваяСтрока.Комментарий = СокрЛП(СтрокаАкта.Комментарий);
	КонецЦикла;

	ДанныеXDTO.Вставить("Товары", Товары);

КонецПроцедуры

Колонки называются по свойствам формата, а не конфигурации. Если в конфигурации колонка Кол, а в формате Количество, в таблицу кладется Количество.

Шаг 4. Правила на стороне получателя

На приеме набор аналогичный, с суффиксом _Получение:

ПроцедураКуда добавить вызов
ДобавитьПОД_Документ_АктОсмотра_ПолучениеЗаполнитьПравилаОбработкиДанных
ДобавитьПКО_Документ_АктОсмотра_ПолучениеЗаполнитьПравилаКонвертацииОбъектов
ПКО_Документ_АктОсмотра_Получение_ПриКонвертацииДанныхXDTOВыполнитьПроцедуруМодуляМенеджера

В обработчике конвертации заполняется то, что не покрывается правилами свойств, например табличная часть с особой логикой:

1С
// Переносит строки табличной части из данных формата в загружаемый документ.
Процедура ЗаполнитьТоварыИзДанныхXDTO(ДанныеXDTO, ПолученныеДанные)

	Если Не ДанныеXDTO.Свойство("Товары") Или ДанныеXDTO.Товары = Неопределено Тогда
		Возврат;
	КонецЕсли;

	ПолученныеДанные.Товары.Очистить();
	Для Каждого СтрокаФормата Из ДанныеXDTO.Товары Цикл
		НоваяСтрока = ПолученныеДанные.Товары.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаФормата, "Номенклатура, Количество, Комментарий");
	КонецЦикла;

КонецПроцедуры

Ссылочные колонки, описанные в ПКО с правилами конвертации, механизм обмена преобразует в ссылки приемника сам. Если вы разбираете таблицу вручную, убедитесь, что значения уже сконвертированы, а не пришли как структуры ключевых свойств, — проверьте это в отладчике на первом же тестовом пакете. Отключать отдельные ПКС по условию можно в обработчике ПриОбработке правила обработки — так же, как на стороне отправки.

Как отлаживать

  1. Выгрузите сообщение обмена в файл и откройте XML: есть ли в нем ваш объект, заполнена ли табличная часть.
  2. Если объекта нет — смотрите регистрацию, ПОД и диспетчер ВыполнитьПроцедуруМодуляМенеджера.
  3. Если объект есть, но в приемнике пусто — проверьте совпадение пакетов XDTO и обработчик конвертации.
  4. Протокол обмена и журнал регистрации показывают, на каком объекте упала загрузка; ставьте точку останова в обработчиках ПКО.

Типичные ошибки

  • Пакет XDTO доработан только в одной базе.
  • ИмяПКО не совпадает со строкой в используемых ПКО правила обработки.
  • Процедура обработчика написана, но не добавлена в ВыполнитьПроцедуруМодуляМенеджера.
  • Колонки табличной части названы по реквизитам конфигурации, а не по свойствам формата.
  • Нет ключевых свойств — при повторной выгрузке в приемнике создаются дубли.
  • Доработанные правила регистрации не положены в макет и пропали при пересоздании настроек обмена.

Обмены на EnterpriseData я дорабатываю и сопровождаю в рамках услуги обмен между базами 1С; когда систем больше двух, обсуждаем интеграционную шину.

Коротко

  • Обмен EnterpriseData дорабатывается кодом в модуле менеджера обмена, даже без КД3.
  • Обе базы: план обмена, правила регистрации, одинаковый пакет XDTO, список поддерживаемых объектов.
  • Отправка: ПОД, ПКО, ПриОтправкеДанных с ключевыми свойствами и таблицей для табличной части.
  • Прием: ПОД, ПКО и обработчик конвертации, который раскладывает строки в документ.
  • Копируйте процедуры соседнего документа — так меньше шансов ошибиться в служебных функциях.