Работа с Конвертацией данных 3.0 (КД 3.0) и технологией EnterpriseData (Универсальный формат) кардинально отличается от привычной КД 2.0. Если в старой версии нам было достаточно сопоставить объекты метаданных напрямую, то в КД 3.0 появляется «прослойка» в виде XDTO-пакета, описывающего структуру самого формата. Если нужного объекта (например, специфического справочника «Объекты строительства») нет в стандартном описании формата, система просто не даст создать для него правила. Разберем по шагам, как решить эту задачу и расширить возможности обмена.
Для начала проанализируем, почему нельзя просто создать ПКО (правила конвертации объектов) в КД 3.0. В этой версии конвертации процесс выглядит так: База-источник -> Формат (XDTO) -> База-приемник. Чтобы добавить новый объект, мы должны выполнить действия на трех уровнях:
Если объекта нет в стандартном пакете EnterpriseData, его нужно туда добавить. Чтобы не изменять типовую конфигурацию, крайне рекомендуется использовать расширения. Создадим в расширении свой XDTO-пакет, который будет дополнять или имитировать структуру основного. Однако самый надежный способ для КД 3.0 — это модификация самого определения схемы (XSD).
Рассмотрим алгоритм действий:
EnterpriseData_X_X_X (где X — версия формата)..xsd.Справочник.ОбъектыСтроительства). Это можно сделать в текстовом редакторе или специализированном ПО, соблюдая структуру пространства имен.После этого новый объект станет доступен для выбора в интерфейсе КД 3.0 при создании новых ПКО и ПВД.
Одной настройки в КД 3.0 недостаточно. Чтобы система «увидела» новые правила, их нужно описать в общем модуле МенеджерОбменаЧерезУниверсальныйФормат. Рассмотрим основные процедуры, которые нам необходимо дополнить.
Во-первых, проанализируем процедуру ЗаполнитьПравилаКонвертацииОбъектов. Здесь мы регистрируем связь между объектом метаданных и типом XDTO:
Процедура ЗаполнитьПравилаКонвертацииОбъектов(ПравилаКонвертации) Экспорт
Правило = ПравилаКонвертации.Добавить();
Правило.Имя = "Справочник_ОбъектыСтроительства_Отправка";
Правило.ОбъектДанных = "Справочник.ОбъектыСтроительства";
Правило.ОбъектФормата = "Справочник.ОбъектыСтроительства"; // Имя типа из XDTO
КонецПроцедуры
Во-вторых, необходимо зарегистрировать правила выгрузки в процедуре ЗаполнитьПравилаВыгрузкиДанных, иначе объект не попадет в состав отправляемых данных:
Процедура ЗаполнитьПравилаВыгрузкиДанных(ПравилаВыгрузки) Экспорт
Правило = ПравилаВыгрузки.Добавить();
Правило.Имя = "Справочник_ОбъектыСтроительства";
Правило.ОбъектДанных = "Справочник.ОбъектыСтроительства";
Правило.ИмяПКО = "Справочник_ОбъектыСтроительства_Отправка";
КонецПроцедуры
Выясним причину, по которой объект может не выгружаться, даже если правила написаны. Для автоматической синхронизации объект обязательно должен быть включен в состав используемого плана обмена (обычно это СинхронизацияДанныхЧерезУниверсальныйФормат).
Основные действия в конфигураторе:
ОбъектыСтроительства в состав плана обмена.БлагодаряПодпискеПриЗаписиРегистрироватьИзменения). Ваш новый объект должен быть в них включен.Если вы не хотите менять XDTO-пакет (что является трудоемкой задачей), можно применить «маскировку» данных через свойство AdditionalInfo. Это специальная структура, которая есть почти у каждого объекта в Универсальном формате.
Рассмотрим ситуацию: мы выгружаем «Объект строительства», маскируя его под обычную «Номенклатуру».
AdditionalInfo:
СтруктураДопИнфо = Новый Структура;
СтруктураДопИнфо.Вставить("ЭтоОбъектСтроительства", Истина);
// Далее передаем эту структуру в соответствующее поле XDTO
ПередЗагрузкойДанных мы проверяем этот флаг. Если он истинный — программно подменяем тип создаваемого объекта или перенаправляем данные в другой справочник.Важно: Этот метод является «костылем» и может привести к проблемам со ссылочной целостностью. Если другой объект будет ссылаться на эту «Номенклатуру», приемник может не понять, что на самом деле это «Объект строительства», пока сам объект не будет полностью обработан.
После внесения всех изменений в конфигурации баз, не забудьте обновить метаданные в самой КД 3.0. Для этого используйте обработку ExtractMetaData.epf. Выгрузите структуру, загрузите ее в КД 3.0 и выполните сопоставление.
Помните, что дорабатывать нужно обе базы: и отправителя, и получателя. Если база-получатель не будет знать о новом типе XDTO в своей схеме, она выдаст ошибку при попытке прочитать файл обмена. Использование расширений для этих целей позволит вам сохранить конфигурации на поддержке и обеспечит корректную работу синхронизации по расписанию.