Как исправить ошибку проверки модели XDTO: xdto-valueType-6.1 при создании фабрики из XSD-файла?

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

При работе с обменом данными в 1С:Предприятие часто возникает необходимость инициализировать фабрику XDTO на основе сторонних XSD-схем. Однако разработчики нередко сталкиваются с критической ошибкой xdto-valueType-6.1. Давайте разберем, почему она возникает и как заставить 1С успешно обработать ваш файл схемы.

Понимание причины ошибки

Ошибка xdto-valueType-6.1 указывает на то, что парсер XDTO платформы 1С не может обработать определение анонимного типа внутри структуры атрибута или элемента. Механизм СоздатьФабрикуXDTO в 1С обладает более строгими требованиями к XML-схемам, чем стандартные валидаторы (например, Altova XMLSpy).

Чаще всего проблема кроется в конструкции, где для атрибута одновременно задается базовый тип и дополнительное ограничение (xs:restriction) с перечислением значений (xs:enumeration). Платформа 1С в данном контексте ожидает строгого именования типов на верхнем уровне схемы.

Шаг 1: Очистка XSD-схемы от анонимных типов

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

Рассмотрим пример того, как выглядело проблемное место:


<xs:attribute name="КНД" use="required">
    <xs:simpleType>
        <xs:restriction base="КНДТип">
            <xs:enumeration value="1167005"/>
        </xs:restriction>
    </xs:simpleType>
</xs:attribute>

Чтобы исправить ошибку, мы можем убрать вложенное перечисление и оставить только привязку к уже описанному в схеме типу КНДТип. В результате блок должен выглядеть так:


<xs:attribute name="КНД" type="КНДТип" use="required">
    <xs:annotation>
        <xs:documentation>Код формы по КНД</xs:documentation>
    </xs:annotation>
</xs:attribute>

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

Шаг 2: Создание объектов XDTO после инициализации фабрики

После того как фабрика успешно создана, возникает вопрос: как правильно обратиться к корневому элементу, например, к элементу Файл? Многие начинающие разработчики пытаются создать элементы по аналогии с простыми типами, но упускают из виду пространство имен.

Разберем, как корректно инициировать работу с пакетом:

  1. Загружаем схему: ФайлыXSD = Новый Массив(); ФайлыXSD.Добавить("ПутьКФайлу.xsd"); МояФабрикаXDTO = СоздатьФабрикуXDTO(ФайлыXSD);
  2. Определяем тип корневого элемента: ТипФайла = МояФабрикаXDTO.Тип("http://ваш-namespace", "Файл");
  3. Создаем объект: ОбъектФайл = МояФабрикаXDTO.Создать(ТипФайла);

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

Практические рекомендации

Чтобы избежать подобных проблем в будущем, рекомендуем придерживаться следующих правил:

Следуя этим шагам, вы сможете успешно интегрировать любую схему XML в ваш проект на 1С и избежать типичных ошибок при работе с моделью XDTO.

← На главную