Как в 1С работать со схемой XDTO при наличии «Определения типа»?

Программист IT и автоматизация бизнеса
← На главную

При интеграции через XML-схемы разработчики 1С нередко сталкиваются со структурой, в которой типы узлов отображаются в дереве пакета XDTO как «Определение типа». Такая ситуация возникает, когда во входящем XSD-файле сложные типы объявлены как анонимные (вложенный тег complexType внутри element без явного атрибута name или type). При попытке программно получить доступ к дочерним реквизитам или создать экземпляр через глобальную Фабрику XDTO стандартный вызов по имени типа завершается ошибкой, так как самостоятельного глобального типа у элемента в схеме просто нет.

Особенности структуры схемы и причины затруднений

В типовых XSD-схемах, сформированных сторонними системами (например, генераторами на базе Microsoft DataSet), часто встречаются две конструктивные особенности:

Попытка обратиться напрямую через коллекцию пакетов с неверным ключом (например, передача системного имени пакета вместо URI пространства имен) приводит к тому, что пакет не находится, либо не удается получить определение целевого типа.

Сценарий 1: Чтение входящего XML-файла

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

  1. Файл XML открывается с помощью объекта ЧтениеXML.
  2. Выполняется вызов ФабрикаXDTO.ПрочитатьXML(), который считывает входящий документ на основании загруженного пакета XDTO.
  3. Платформа автоматически строит дерево объектов. Корневой узел представляет собой объект XDTO, а вложенный узел со списком документов становится доступен как свойство-коллекция.
  4. Обход записей выполняется стандартной итерацией: каждый элемент списка содержит доступные через точку реквизиты, описанные в схеме (идентификаторы, даты, числа и строки).

Сценарий 2: Программное создание и заполнение структуры

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

Альтернативный вариант: Корректировка XSD-схемы

Если файл XSD-схемы не является жестким требованием внешней стороны и может быть изменен разработчиком, можно устранить саму причину появления «Определения типа». Для этого вложенные определения complexType выносятся на верхний уровень схемы с присвоением им явных имен, а элементы связываются с ними через атрибут type. Это позволяет обращаться к типам напрямую через стандартный метод ФабрикаXDTO.Тип() без необходимости спускаться по цепочке свойств родительских объектов.

← На главную