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