При работе с обменом данными в 1С:Предприятие часто возникает необходимость инициализировать фабрику XDTO на основе сторонних XSD-схем. Однако разработчики нередко сталкиваются с критической ошибкой xdto-valueType-6.1. Давайте разберем, почему она возникает и как заставить 1С успешно обработать ваш файл схемы.
Ошибка xdto-valueType-6.1 указывает на то, что парсер XDTO платформы 1С не может обработать определение анонимного типа внутри структуры атрибута или элемента. Механизм СоздатьФабрикуXDTO в 1С обладает более строгими требованиями к XML-схемам, чем стандартные валидаторы (например, Altova XMLSpy).
Чаще всего проблема кроется в конструкции, где для атрибута одновременно задается базовый тип и дополнительное ограничение (xs:restriction) с перечислением значений (xs:enumeration). Платформа 1С в данном контексте ожидает строгого именования типов на верхнем уровне схемы.
Если вы получаете ошибку при чтении схемы, первым делом проанализируйте код 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 начнет корректно считывать структуру схемы.
После того как фабрика успешно создана, возникает вопрос: как правильно обратиться к корневому элементу, например, к элементу Файл? Многие начинающие разработчики пытаются создать элементы по аналогии с простыми типами, но упускают из виду пространство имен.
Разберем, как корректно инициировать работу с пакетом:
ФайлыXSD = Новый Массив(); ФайлыXSD.Добавить("ПутьКФайлу.xsd"); МояФабрикаXDTO = СоздатьФабрикуXDTO(ФайлыXSD);ТипФайла = МояФабрикаXDTO.Тип("http://ваш-namespace", "Файл");ОбъектФайл = МояФабрикаXDTO.Создать(ТипФайла);Важно помнить, что если схема была загружена правильно, МояФабрикаXDTO.Пакеты будет содержать все доступные типы. Если вы сомневаетесь в именах типов или пространстве имен, можно отладить код, просмотрев коллекцию пакетов в отладчике 1С.
Чтобы избежать подобных проблем в будущем, рекомендуем придерживаться следующих правил:
type="ИмяТипа" работают в 1С значительно стабильнее, чем вложенные анонимные определения.xs:choice или сложные цикличные зависимости), рассмотрите возможность отказа от использования фабрики в пользу прямого чтения и записи XML через объекты XMLЗапись и XMLЧтение. Это потребует больше ручного кодирования, но гарантирует отсутствие проблем с парсером XDTO.Следуя этим шагам, вы сможете успешно интегрировать любую схему XML в ваш проект на 1С и избежать типичных ошибок при работе с моделью XDTO.