Как добавить новый объект в структуру формата данных при использовании Конвертации данных 3.0

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Работа с Конвертацией данных 3.0 (КД 3.0) и технологией EnterpriseData (Универсальный формат) кардинально отличается от привычной КД 2.0. Если в старой версии нам было достаточно сопоставить объекты метаданных напрямую, то в КД 3.0 появляется «прослойка» в виде XDTO-пакета, описывающего структуру самого формата. Если нужного объекта (например, специфического справочника «Объекты строительства») нет в стандартном описании формата, система просто не даст создать для него правила. Разберем по шагам, как решить эту задачу и расширить возможности обмена.

Понимание архитектуры обмена

Для начала проанализируем, почему нельзя просто создать ПКО (правила конвертации объектов) в КД 3.0. В этой версии конвертации процесс выглядит так: База-источник -> Формат (XDTO) -> База-приемник. Чтобы добавить новый объект, мы должны выполнить действия на трех уровнях:

  1. Уровень формата: Описать новый объект в XDTO-пакете.
  2. Уровень метаданных: Включить объект в состав плана обмена и подписок в самих базах 1С.
  3. Уровень кода: Прописать логику выгрузки/загрузки в общем модуле менеджера обмена.

Шаг 1: Расширение структуры формата (XDTO-пакет)

Если объекта нет в стандартном пакете EnterpriseData, его нужно туда добавить. Чтобы не изменять типовую конфигурацию, крайне рекомендуется использовать расширения. Создадим в расширении свой XDTO-пакет, который будет дополнять или имитировать структуру основного. Однако самый надежный способ для КД 3.0 — это модификация самого определения схемы (XSD).

Рассмотрим алгоритм действий:

  1. В конфигураторе откройте ветку Общие -> XDTO-пакеты. Найдите пакет EnterpriseData_X_X_X (где X — версия формата).
  2. Экспортируйте схему в файл .xsd.
  3. Добавьте в этот файл описание вашего нового типа (например, Справочник.ОбъектыСтроительства). Это можно сделать в текстовом редакторе или специализированном ПО, соблюдая структуру пространства имен.
  4. В базе Конвертация данных 3.0 перейдите в раздел «Форматы данных» и загрузите обновленный файл схемы.

После этого новый объект станет доступен для выбора в интерфейсе КД 3.0 при создании новых ПКО и ПВД.

Шаг 2: Программная регистрация в модуле менеджера

Одной настройки в КД 3.0 недостаточно. Чтобы система «увидела» новые правила, их нужно описать в общем модуле МенеджерОбменаЧерезУниверсальныйФормат. Рассмотрим основные процедуры, которые нам необходимо дополнить.

Во-первых, проанализируем процедуру ЗаполнитьПравилаКонвертацииОбъектов. Здесь мы регистрируем связь между объектом метаданных и типом XDTO:


Процедура ЗаполнитьПравилаКонвертацииОбъектов(ПравилаКонвертации) Экспорт
    
    Правило = ПравилаКонвертации.Добавить();
    Правило.Имя = "Справочник_ОбъектыСтроительства_Отправка";
    Правило.ОбъектДанных = "Справочник.ОбъектыСтроительства";
    Правило.ОбъектФормата = "Справочник.ОбъектыСтроительства"; // Имя типа из XDTO
    
КонецПроцедуры

Во-вторых, необходимо зарегистрировать правила выгрузки в процедуре ЗаполнитьПравилаВыгрузкиДанных, иначе объект не попадет в состав отправляемых данных:


Процедура ЗаполнитьПравилаВыгрузкиДанных(ПравилаВыгрузки) Экспорт
    
    Правило = ПравилаВыгрузки.Добавить();
    Правило.Имя = "Справочник_ОбъектыСтроительства";
    Правило.ОбъектДанных = "Справочник.ОбъектыСтроительства";
    Правило.ИмяПКО = "Справочник_ОбъектыСтроительства_Отправка";
    
КонецПроцедуры

Шаг 3: Регистрация изменений и План обмена

Выясним причину, по которой объект может не выгружаться, даже если правила написаны. Для автоматической синхронизации объект обязательно должен быть включен в состав используемого плана обмена (обычно это СинхронизацияДанныхЧерезУниверсальныйФормат).

Основные действия в конфигураторе:

  1. Добавьте справочник ОбъектыСтроительства в состав плана обмена.
  2. Проверьте подписки на события, отвечающие за регистрацию изменений (например, БлагодаряПодпискеПриЗаписиРегистрироватьИзменения). Ваш новый объект должен быть в них включен.
  3. В КД 3.0 настройте Правила регистрации данных (ПРД). Эти правила определяют, при каких условиях (например, только для определенной организации) объект должен помечаться к выгрузке.

Шаг 4: Использование AdditionalInfo (Альтернативный вариант)

Если вы не хотите менять XDTO-пакет (что является трудоемкой задачей), можно применить «маскировку» данных через свойство AdditionalInfo. Это специальная структура, которая есть почти у каждого объекта в Универсальном формате.

Рассмотрим ситуацию: мы выгружаем «Объект строительства», маскируя его под обычную «Номенклатуру».

  1. В правилах выгрузки (ПВД) на стороне источника в обработчике события мы добавляем информацию в AdditionalInfo:
    
    СтруктураДопИнфо = Новый Структура;
    СтруктураДопИнфо.Вставить("ЭтоОбъектСтроительства", Истина);
    // Далее передаем эту структуру в соответствующее поле XDTO
    
  2. На стороне приемника в правилах загрузки (ПКО) в обработчике ПередЗагрузкойДанных мы проверяем этот флаг. Если он истинный — программно подменяем тип создаваемого объекта или перенаправляем данные в другой справочник.

Важно: Этот метод является «костылем» и может привести к проблемам со ссылочной целостностью. Если другой объект будет ссылаться на эту «Номенклатуру», приемник может не понять, что на самом деле это «Объект строительства», пока сам объект не будет полностью обработан.

Завершение настройки

После внесения всех изменений в конфигурации баз, не забудьте обновить метаданные в самой КД 3.0. Для этого используйте обработку ExtractMetaData.epf. Выгрузите структуру, загрузите ее в КД 3.0 и выполните сопоставление.

Помните, что дорабатывать нужно обе базы: и отправителя, и получателя. Если база-получатель не будет знать о новом типе XDTO в своей схеме, она выдаст ошибку при попытке прочитать файл обмена. Использование расширений для этих целей позволит вам сохранить конфигурации на поддержке и обеспечит корректную работу синхронизации по расписанию.

← На главную