При адаптации конфигураций к новым версиям универсального формата обмена 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 не может самостоятельно сопоставить указанное пространство имен с другими файлами на диске. Если парсер не находит определения родительского типа в текущем контексте загрузки, он очищает значение Базовый тип у зависимых типов данных без генерации критической ошибки.
Для корректного связывания схем достаточно явно указать путь к зависимому файлу схемы через атрибут schemaLocation. Разберем этот процесс по шагам:
EnterpriseData_1_4_4 сохраним под именем ED.xsd;ExchangeMessage сохраним под именем EM.xsd.
<xs:import namespace="http://www.1c.ru/SSL/Exchange/Message"/>
schemaLocation:
<xs:import schemaLocation="EM.xsd" namespace="http://www.1c.ru/SSL/Exchange/Message"/>
Общие -> Пакеты XDTO, вызовем контекстное меню и выберем команду импорта.После выполнения этих шагов платформа успешно свяжет определения обоих файлов, и свойство Базовый тип у всех объектов пакета заполнится автоматически.
Если нет желания вручную редактировать файлы схем, рассмотрим альтернативный вариант — перенос пакетов XDTO напрямую через механизм объединения конфигураций:
.cf.Конфигурация -> Сравнить, объединить с конфигурацией из файла.EnterpriseData и ExchangeMessage.При таком способе платформа переносит внутренние связи объектов в исходном бинарном виде, полностью сохраняя все ссылки на базовые типы без риска ошибок парсинга XSD.
Импорт самих пакетов XDTO в метаданные — это лишь первый этап. Чтобы подсистема обмена данными БСП начала полноценно использовать новую версию формата, выполним следующие действия:
ОбменДаннымиПереопределяемый (или специализированной функции определения версий формата) добавим строку новой версии, например "1.4".МенеджерОбменаЧерезУниверсальныйФормат (либо в модулях конкретных версий формата, если они выделены отдельно).ПравилаКонвертацииОбъектовXDTO и ПравилаРегистрацииОбъектов в составе подсистемы синхронизации данных.