К статье
Практический материал

Разработка и Конфигурация · 12 мин

Несоответствие типов XDTO в 1С: что это и как исправить

Разбираем ошибку несоответствия типов XDTO в 1С: почему возникает при обмене и веб-сервисах, как найти проблемный тип и исправить пакет XDTO.

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

Механизм XDTO (XML Data Transfer Objects) — это способ платформы 1С описывать структуру XML-документов: какие элементы допустимы, какого они типа, обязательны ли они и в каком порядке следуют. Пакеты XDTO хранятся в конфигурации в ветке «Общие — XDTO-пакеты» либо подгружаются из WSDL-описаний веб-сервисов. Когда входящий XML не соответствует этой схеме, сериализация прерывается с ошибкой проверки типа.

Проблема почти всегда находится на стыке двух систем: одна сторона изменила формат (добавила поле, поменяла тип, стала передавать пустое значение там, где раньше было число), а вторая продолжает работать по старой схеме. Поэтому диагностика сводится к трём вопросам: какой тип ожидался, что фактически пришло и кто из участников обмена изменил формат.

Что такое пакет XDTO и как он связан с ошибкой

Пакет XDTO — это описание модели данных в терминах XML Schema: пространство имён, набор типов объектов, их свойства и типы значений свойств. При чтении XML платформа создаёт объекты XDTO и проверяет каждое значение на соответствие объявленному типу. Если в схеме свойство «Сумма» объявлено как decimal, а в файле пришло «12 500,00 руб.» — возникает ошибка несоответствия типа.

Типичный текст ошибки выглядит примерно так: «Ошибка проверки данных XDTO: Значение ... не соответствует типу ...» либо «Несоответствие типов XDTO: свойство ... отсутствует в типе». Первая форма указывает на неверное значение, вторая — на то, что в пришедших данных есть свойство, которого нет в схеме пакета.

Важно понимать, что XDTO-пакеты бывают двух видов: явно созданные разработчиком в конфигураторе и автоматически сгенерированные платформой — например, при добавлении WS-ссылки на веб-сервис или при использовании типовых форматов обмена (EnterpriseData, обмен с сайтом, ЭДО). Во втором случае схема «зашита» в механизмы конфигурации, и править её напрямую нельзя.

Типичные сценарии, где возникает ошибка

Чаще всего с несоответствием типов XDTO сталкиваются в четырёх ситуациях. Первая — обмен между двумя базами 1С через планы обмена и правила конвертации, когда конфигурации обновлены не синхронно: одна база уже выгружает новое поле или новый формат, а вторая ещё работает по старой схеме. Вторая — интеграция через веб-сервисы: поставщик сервиса обновил WSDL, а WS-ссылка в конфигурации осталась старой.

Третья ситуация — загрузка файлов из сторонних систем: выгрузка из сайта, банковская выписка, файл от контрагента. Здесь источник ошибки — сами данные: пустое значение там, где схема требует обязательное поле, дата в неожиданном формате, число с пробелами или неразрывными пробелами. Четвёртая — ручная сериализация объектов через ЗаписатьJSON/ПрочитатьJSON или фабрику XDTO в собственном коде, когда разработчик заполняет объект XDTO значением несовместимого типа.

Ошибка при получении данныхПроблема во входящем XML

Сравнить пришедший файл со схемой пакета XDTO

Ошибка при отправкеОбъект XDTO заполнен неверно

Проверить типы значений, которые код записывает в свойства

Ошибка после обновленияРассинхронизация версий

Проверить, совпадают ли версии конфигураций на обеих сторонах обмена

Ошибка у веб-сервисаУстаревшая WS-ссылка

Сверить текущий WSDL сервиса со схемой в конфигурации

Как локализовать проблемный тип и свойство

Первый шаг — дочитать текст ошибки до конца. Платформа почти всегда указывает имя типа, имя свойства и порой фрагмент значения, которое не прошло проверку. Если сообщение обрезано в окне пользователя, полный текст ищите в журнале регистрации: отфильтруйте события с уровнем «Ошибка» за нужный период и откройте комментарий.

Дальше нужен сам XML-документ. Для обменов через файлы — сохраните файл сообщения до его удаления (в типовых обменах есть настройка «не удалять файлы обмена» или каталог временных файлов). Для веб-сервисов — включите протоколирование на сервере или перехватите ответ внешним инструментом. Для обменов через план обмена полезно выгрузить сообщение повторно в файл и открыть его в текстовом редакторе.

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

В конфигураторе пакет XDTO открывается через «Общие — XDTO-пакеты». Найдите нужный пакет по пространству имён (оно указано в корневом элементе XML), затем тип объекта и свойство. Сравните объявленный тип, минимальное и максимальное количество (обязательность) с тем, что реально пришло в файле.

Основные причины и способы исправления

Неверный тип значения в свойстве

Самый частый случай: схема ожидает число, дату или булево, а приходит строка. Например, сумма с символом валюты, дата в формате «31.12.2026» вместо ISO-формата, или «да/нет» вместо true/false. Исправление — на стороне формирования данных: привести значение к нужному типу до записи в XML. Если данные формирует чужая система, которую вы не контролируете, вариант — ослабить тип в собственном пакете XDTO (объявить свойство строкой) и конвертировать значение уже после чтения.

Пустое или отсутствующее обязательное свойство

Если в схеме у свойства минимальное количество равно 1, а отправитель передаёт пустой тег или не передаёт элемент вовсе, проверка типа не проходит. Выходы: заполнять значение по умолчанию на стороне отправителя либо изменить в пакете XDTO минимальное количество на 0 и обрабатывать отсутствие значения в коде. Помните, что пустая строка и отсутствующий элемент для XDTO — разные вещи.

Лишние элементы и несовпадение версий формата

Когда отправитель обновился и стал передавать новое поле, а приёмник работает по старой схеме, возникает ошибка вида «свойство отсутствует в типе». Правильное решение — обновить конфигурацию приёмника или пакет XDTO до актуальной версии формата. Временный обходной путь — договориться с отправителем о выгрузке в старой версии формата, если она поддерживается.

Маршрут решения

Как выбрать действие

Формат контролируете вы (свой обмен, свой сервис)Исправьте формирование данных или схему пакета XDTO — обе стороны в ваших руках
Формат задаёт внешняя системаОслабьте типы в своём пакете XDTO и конвертируйте значения программно после чтения
Ошибка в типовом обмене (EnterpriseData, обмен с сайтом)Обновите обе конфигурации до совместимых релизов и проверьте настройки версии формата
Ошибка в WS-ссылкеОбновите WSDL-описание в WS-ссылке до актуальной версии сервиса

Особенности типовых обменов и веб-сервисов

В типовых обменах (синхронизация БП–УТ, обмен с сайтом, ЭДО) пакеты XDTO являются частью поставки конфигурации, и редактировать их вручную — плохая идея: при следующем обновлении изменения затрутся, а обмен может сломаться непредсказуемо. Здесь ошибка несоответствия типов почти всегда означает рассинхронизацию релизов: проверьте, что обе базы обновлены до версий, поддерживающих общий формат, и что в настройках синхронизации выбрана корректная версия формата обмена.

Для интеграций через WS-ссылки типовая причина — поставщик веб-сервиса изменил описание, а ссылка в конфигурации хранит старую схему. Обновите определение WS-ссылки, указав актуальный URL WSDL, и проверьте, не переименованы ли методы и параметры. Если сервис версионируется, убедитесь, что вы обращаетесь к той версии, под которую написан код.

Отладка собственного кода с фабрикой XDTO

Если ошибка возникает в вашем коде при записи объекта XDTO, проверяйте значения до вызова сериализации. Частая ошибка — присвоение свойству значения типа «Строка» там, где схема объявляет число или дату, либо присвоение Неопределено обязательному свойству. Перед записью полезно явно преобразовывать значения: XMLСтрока() для проверки представления, ТипЗнч() для контроля типа.

Для диагностики чтения используйте отладчик: остановитесь на строке ФабрикаXDTO.ПрочитатьXML(...) и проверьте, на каком элементе падает чтение. Если файл большой, временно сократите его до одного проблемного объекта — так проще увидеть несоответствие. Также помните, что фабрика XDTO строга к регистру имён элементов и пространствам имён: Sum и sum — разные свойства.

Типичные ошибки
01
Правка пакета XDTO типовой конфигурации вместо обновления релизов — изменения теряются при обновлении
02
Игнорирование пространств имён: схема не находит элементы, хотя имена визуально совпадают
03
Присвоение Неопределено обязательному свойству XDTO — ошибка сериализации на ровном месте
04
Передача даты и числа в локальном формате вместо канонического XML-представления
05
Попытка чинить обмен, не сохранив файл сообщения — после удаления файла диагностика невозможна

Проверка результата после исправления

После исправления схемы или данных повторите обмен полностью: отправка, получение, загрузка. Убедитесь, что сообщение обработано, в журнале регистрации нет новых ошибок XDTO, а данные в приёмнике появились в полном объёме. Если исправляли тип значения — проверьте, что сконвертированные значения корректны (суммы сходятся, даты на месте, ссылки разрешились).

Для регламентных обменов имеет смысл несколько циклов понаблюдать за синхронизацией: ошибка несоответствия типов может проявляться только на определённых документах с нестандартным заполнением (пустые реквизиты, ручные операции, отрицательные суммы). Составьте короткий список «проблемных» документов и прогоните обмен по ним.

Контрольные точки

Как проверить результат

Журнал регистрации после обмена
Норма

Нет ошибок проверки данных XDTO

Тревожный признак

Ошибки повторяются на тех же или новых свойствах

Данные в приёмнике
Норма

Документы и справочники загружены, суммы и даты корректны

Тревожный признак

Объекты созданы, но реквизиты пустые или искажены

Очередь сообщений обмена
Норма

Сообщения обработаны и удалены из очереди

Тревожный признак

Сообщения копятся, обмен останавливается

Повторные циклы обмена
Норма

Несколько сеансов подряд проходят без ошибок

Тревожный признак

Ошибка возникает периодически на отдельных данных

Итог

Что важно запомнить

Несоответствие типов XDTO означает, что XML-данные не совпадают со схемой пакета XDTO. Диагностика — полный текст ошибки, файл сообщения и сравнение значения со схемой. Исправление — на той стороне, которая контролирует формат: приведение типов данных или обновление схемы. Типовые пакеты XDTO не правят вручную — обновляют релизы конфигураций.

Частые вопросы

Можно ли отключить проверку типов XDTO, чтобы обмен не падал?

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

Ошибка возникает только на некоторых документах. Почему?

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

Обновил конфигурацию — обмен сломался с ошибкой XDTO. Что делать?

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

Чем отличается «несоответствие типов XDTO» от «ошибки преобразования данных XDTO»?

Несоответствие типов — это конфликт значения и схемы (неверный тип, лишнее или отсутствующее свойство). Ошибка преобразования возникает на этапе маппинга объектов XDTO в объекты конфигурации — например, когда значение не удаётся привести к типу реквизита. Диагностируются обе через текст ошибки и файл обмена.

Где посмотреть, какой пакет XDTO использует мой обмен?

Пространство имён указано в корневом элементе XML-сообщения обмена. По нему найдите пакет в ветке «Общие — XDTO-пакеты» конфигуратора. Для веб-сервисов схема хранится в соответствующей WS-ссылке, а для типовых форматов — в пакетах с именами форматов (например, EnterpriseData).

Может ли ошибка быть вызвана кодировкой файла?

Кодировка сама по себе редко вызывает именно несоответствие типов, но повреждённые из-за неверной кодировки символы могут испортить значения (например, даты и числа), что приведёт к ошибке проверки. Убедитесь, что файл в UTF-8 и открывается без искажений.