Почему при импорте XDTO-пакета не заполняется базовый тип объектов и как это исправить?

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

При адаптации конфигураций к новым версиям универсального формата обмена EnterpriseData разработчики часто сталкиваются с ситуацией: после выгрузки схем XSD из типовой базы (например, «Бухгалтерии предприятия») и их импорта в дорабатываемую конфигурацию (например, «Управление торговлей») у части типов данных пропадает свойство Базовый тип. В результате нарушается наследование свойств и структура формата становится невалидной.

Проанализируем причину такого поведения платформы 1С:Предприятие и разберем по шагам, как правильно перенести связанные пакеты XDTO без ручной правки сотен типов данных.

Причина возникновения проблемы

Схема универсального формата EnterpriseData наследует базовые типы и структуры из служебного пакета ExchangeMessage (пространство имен http://www.1c.ru/SSL/Exchange/Message). Когда мы выполняем штатный экспорт пакетов XDTO в файлы .xsd, платформа генерирует директиву импорта без указания физического пути к файлу:

<xs:import namespace="http://www.1c.ru/SSL/Exchange/Message"/>

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

Способ 1. Корректировка директивы xs:import в файле XSD

Для корректного связывания схем достаточно явно указать путь к зависимому файлу схемы через атрибут schemaLocation. Разберем этот процесс по шагам:

  1. Выгрузим оба необходимых пакета XDTO в один каталог на диске:
    • EnterpriseData_1_4_4 сохраним под именем ED.xsd;
    • ExchangeMessage сохраним под именем EM.xsd.
  2. Откроем файл ED.xsd в любом текстовом редакторе.
  3. Найдем строку импорта пространства имен сообщений обмена: <xs:import namespace="http://www.1c.ru/SSL/Exchange/Message"/>
  4. Заменим эту строку, добавив указание локального файла через атрибут schemaLocation:
    
    <xs:import schemaLocation="EM.xsd" namespace="http://www.1c.ru/SSL/Exchange/Message"/>
    
  5. Сохраним изменения в файле ED.xsd.
  6. В дереве метаданных конфигуратора перейдем в ветку Общие -> Пакеты XDTO, вызовем контекстное меню и выберем команду импорта.
  7. В диалоге выбора файлов выделим одновременно оба файла: ED.xsd и EM.xsd.

После выполнения этих шагов платформа успешно свяжет определения обоих файлов, и свойство Базовый тип у всех объектов пакета заполнится автоматически.

Способ 2. Перенос через сравнение и объединение конфигураций

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

  1. Сохраним конфигурацию-источник (где нужные пакеты уже есть) в файл .cf.
  2. В целевой конфигурации откроем меню Конфигурация -> Сравнить, объединить с конфигурацией из файла.
  3. Снимем все флажки объединения.
  4. Отметим флажками только требуемые пакеты: EnterpriseData и ExchangeMessage.
  5. Выполним объединение метаданных.

При таком способе платформа переносит внутренние связи объектов в исходном бинарном виде, полностью сохраняя все ссылки на базовые типы без риска ошибок парсинга XSD.

Что еще нужно для работы EnterpriseData в доработанной конфигурации

Импорт самих пакетов XDTO в метаданные — это лишь первый этап. Чтобы подсистема обмена данными БСП начала полноценно использовать новую версию формата, выполним следующие действия:

  1. Регистрация поддерживаемой версии формата: в общем модуле ОбменДаннымиПереопределяемый (или специализированной функции определения версий формата) добавим строку новой версии, например "1.4".
  2. Актуализация обработчиков формата: обновим логику выгрузки и загрузки реквизитов объектов в общем модуле МенеджерОбменаЧерезУниверсальныйФормат (либо в модулях конкретных версий формата, если они выделены отдельно).
  3. Обновление правил: актуализируем макеты ПравилаКонвертацииОбъектовXDTO и ПравилаРегистрацииОбъектов в составе подсистемы синхронизации данных.
← На главную