Как исправить ошибку «Атомарная модель содержания не соответствует определению типа значения» при загрузке XSD от nalog.ru в 1С?

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

При интеграции систем 1С с сервисами Федеральной налоговой службы (ФНС) разработчики часто сталкиваются с необходимостью импорта официальных XSD-схем. Однако попытка загрузить схему, скачанную с сайта nalog.ru, в дерево конфигурации или создать на её основе фабрику XDTO программно часто заканчивается ошибкой: «Ошибка проверки модели XDTO: xdto-valueType-6.1. Атомарная модель содержания не соответствует определению типа значения». Рассмотрим подробнее, почему это происходит и как адаптировать налоговые схемы под требования платформы 1С.

Разбор причины конфликта в логике 1С

Проанализируем ситуацию: ошибка xdto-valueType-6.1 возникает из-за того, что парсер XDTO в 1С предъявляет очень строгие требования к описанию типов данных. В схемах ФНС часто встречаются элементы, которые объявлены как имеющие простое (атомарное) значение (например, строка или число), но структура их описания внутри XML-схемы кажется 1С избыточной или противоречивой.

Выясним основные причины:

  1. Конфликт пространств имен: Типы данных объявлены в одном пространстве имен, а используются без указания префикса в контексте, где 1С ожидает явного определения.
  2. Отсутствие базового типа: В тегах xs:restriction (ограничениях) не указан атрибут base, из-за чего 1С не может понять, на основе чего строится «атомарный» тип.
  3. Анонимные типы: Использование сложных конструкций внутри определений элементов (особенно при наличии атрибутов у простых типов).

Разберем по шагам методики исправления этих проблем.

Способ 1. Исправление пространств имен (xmlns)

Это самая частая причина ошибки при работе со схемами ФНС. В файле XSD обычно объявлено целевое пространство имен targetNamespace. Если при этом для типов текущей схемы назначен префикс (например, xmlns:ns1), но внутри элементов ссылки на типы (такие как ДатаТип, ИННТип, КНДТип) идут без этого префикса, 1С не может сопоставить их.

Рассмотрим, как это исправить. Откроем XSD-файл в текстовом редакторе и найдем заголовок схемы. Проанализируем типичную структуру:


<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns:ns1="http://example.com/schema" 
           targetNamespace="http://example.com/schema">

Для того чтобы 1С корректно распознала типы без префиксов внутри схемы, нам нужно назначить это же пространство имен как пространство имен по умолчанию. Удалим префикс ns1 и оставим только xmlns. Исправленный заголовок должен выглядеть так:


<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns="http://example.com/schema" 
           targetNamespace="http://example.com/schema">

Важно: значение xmlns (без префикса) должно в точности совпадать с targetNamespace. Это заставляет 1С искать все типы, указанные в атрибутах type, «внутри себя», если они не имеют префикса xs:.

Способ 2. Явное указание базовых типов в ограничениях

Иногда ошибка возникает в элементах типа «Индекс» или «ВерсияПрог». Посмотрим на пример некорректного (с точки зрения 1С) описания типа:


<xs:element name="Индекс">
    <xs:simpleType>
        <xs:restriction>
            <xs:pattern value="\d{6}"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>

В данном случае в теге xs:restriction пропущено указание, от какого типа мы наследуем ограничение. Платформа 1С требует обязательного наличия атрибута base. Исправим ситуацию, явно указав строковый тип:


<xs:element name="Индекс">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:pattern value="\d{6}"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>

Проанализируем все вхождения xs:restriction в файле и убедимся, что везде прописан base="xs:string", base="xs:decimal" или другой подходящий стандартный тип xs.

Способ 3. Комментирование сложных определений

Если схема содержит вспомогательные описания, которые не критичны для формирования структуры XML, но вызывают ошибку валидации, их можно закомментировать. Часто это касается кода формы по КНД или справочных полей.

Пример комментирования блока, вызывающего ошибку:


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

Однако используйте этот метод с осторожностью: если это поле обязательно для принимающего шлюза налоговой, файл, сформированный по такой «урезанной» схеме, может не пройти форматный контроль на стороне ФНС.

Способ 4. Динамическое создание фабрики XDTO

Заметим важную особенность: импорт схемы непосредственно в конфигуратор (объекты XDTO-пакеты) работает гораздо жестче, чем создание фабрики в коде. Если вам нужно просто прочитать или записать файл, попробуйте создать фабрику динамически, минуя дерево конфигурации. Это может позволить «проскочить» некоторые мелкие несоответствия.

Посмотрим на пример кода для динамической загрузки:


ПутьКФайлуСхемы = "C:\Schemas\FNS_Sved.xsd";
Попытка
    МояФабрика = СоздатьФабрикуXDTO(ПутьКФайлуСхемы);
    Сообщить("Схема успешно загружена в память!");
Исключение
    Сообщить("Ошибка при создании фабрики: " + ОписаниеОшибки());
КонецПопытки;

Если даже динамическая фабрика выдает ошибку xdto-valueType-6.1, значит, правка текста XSD (как описано в Способах 1 и 2) неизбежна.

Практические советы по очистке схем nalog.ru

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

  1. Очистка от лишних комментариев: Иногда кириллица в тегах xs:documentation в сочетании с неправильной кодировкой (например, ANSI вместо UTF-8) сбивает парсер 1С. Удалите аннотации или перекодируйте файл в UTF-8 (без BOM).
  2. Унификация префиксов: Убедитесь, что для стандартных типов используется префикс xs: или xsd:, и он правильно определен в заголовке (xmlns:xs="http://www.w3.org/2001/XMLSchema").
  3. Проверка атрибута fixed: В налоговых схемах часто встречается fixed="1.0". Проверьте, чтобы у таких элементов тип был явно указан как xs:string.
  4. Использование визуальных редакторов: Воспользуйтесь инструментами типа Altova XMLSpy или плагинами для VS Code. Они помогут подсветить места, где структура схемы нарушает стандарты W3C, что почти всегда является критичным для 1С.

Резюмируем: Основной секрет успеха при работе с XSD от ФНС в 1С заключается в приведении пространств имен к единому знаменателю (xmlns = targetNamespace) и строгом соблюдении типизации в блоках restriction. Выполнив эти действия, вы сможете использовать всю мощь XDTO-модели для обмена данными с государственными системами.

← На главную