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

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

Что такое XDTO в 1С и как с ним работать

XDTO в 1С: что это такое, как работают пакеты XDTO, сериализация объектов, фабрика XDTO, веб-сервисы и типичные ошибки при обмене данными.

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

Главная идея XDTO — отделить структуру данных от конкретной реализации. Разработчик описывает модель данных в виде пакета XDTO (по сути, XML-схемы), а платформа автоматически проверяет типы, выполняет сериализацию и десериализацию. Это снижает количество ошибок при интеграции: если структура входящего сообщения не соответствует схеме, ошибка выявляется на этапе чтения, а не в середине бизнес-логики.

XDTO применяется повсеместно в типовых решениях: обмен между «Управлением торговлей» и «Бухгалтерией», синхронизация с сайтом, интеграция с ЭДО, выгрузка в форматах ФНС — почти везде под капотом работает именно этот механизм. Понимание его устройства необходимо любому разработчику, который занимается интеграциями.

Из чего состоит механизм XDTO

Механизм включает несколько связанных компонентов. Первый — пакеты XDTO: объекты метаданных в ветке «Общие» дерева конфигурации. Каждый пакет содержит описание типов данных, объектов и их свойств в терминах XML Schema. Пакет можно создать вручную в конфигураторе или импортировать из готового XSD-файла.

Второй компонент — фабрика XDTO. Это программный объект, который «знает» один или несколько пакетов и умеет создавать значения и объекты XDTO, читать и записывать XML с проверкой соответствия схеме. Глобальная фабрика (ФабрикаXDTO) включает все пакеты конфигурации и встроенные пакеты платформы; можно также создавать собственные фабрики из отдельных файлов схем.

Третий элемент — объекты и значения XDTO. Объект XDTO (ОбъектXDTO) — аналог составной структуры данных, значение XDTO (ЗначениеXDTO) — простое поле. Разработчик заполняет объект в коде, а затем записывает его в XML одним вызовом метода фабрики.

Как работает сериализация через XDTO

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

Обратная операция — десериализация — выполняется методом ФабрикаXDTO.ПрочитатьXML(). Фабрика читает XML-документ и строит дерево объектов XDTO, с которыми дальше работает код. Если входящий файл не соответствует схеме пакета (лишний элемент, неверный тип, пропущенное обязательное поле), чтение завершится ошибкой с указанием проблемного места.

Отдельный частный случай — сериализация объектов конфигурации. Методы СериализаторXDTO.ЗаписатьXML() и СериализаторXDTO.ПрочитатьXML() умеют превращать в XML ссылки, объекты документов и справочников без ручного описания пакета. Это удобно для простых выгрузок, но даёт мало контроля над форматом.

bsl
Фабрика = ФабрикаXDTO;
ТипЗаказ = Фабрика.Тип("http://example.com/orders", "Заказ");
Заказ = Фабрика.Создать(ТипЗаказ);
Заказ.Номер = "А-001";
Заказ.Дата = ТекущаяДатаСеанса();

Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку("UTF-8");
Фабрика.ЗаписатьXML(Запись, Заказ);
ТекстXML = Запись.Закрыть();

Где XDTO применяется на практике

Наиболее частые сценарии использования механизма:

  • Веб-сервисы 1С. Операции веб-сервисов принимают и возвращают объекты XDTO — платформа автоматически формирует WSDL-описание на основе пакетов.
  • Планы обмена и конвертация данных. Универсальный формат EnterpriseData, используемый в типовых синхронизациях, построен на XDTO-пакетах.
  • Обмен с внешними системами. Загрузка и выгрузка XML-файлов по согласованной с контрагентом схеме: каталоги, заказы, статусы доставки.
  • Регламентные форматы. Выгрузки для государственных систем и ЭДО, где структура файла строго задана XSD-схемой.
  • HTTP-сервисы. Когда REST-интеграция требует XML-тела запросов и ответов с валидацией.

Во всех этих случаях XDTO снимает с разработчика рутинную работу: не нужно вручную склеивать строки XML или писать парсер — достаточно описать схему и работать с типизированными объектами.

Есть XSD-схема от контрагентаXDTO подходит идеально

Импортируйте схему в пакет XDTO и работайте с типизированными объектами

Нужен обмен через веб-сервис SOAPXDTO — стандарт платформы

Операции веб-сервисов 1С работают только через объекты XDTO

Данные в формате JSONXDTO не подходит

Используйте ЧтениеJSON/ЗаписьJSON — XDTO работает только с XML

Простая разовая выгрузкаXDTO избыточен

Рассмотрите СериализаторXDTO или ручную запись XML

Создание пакета XDTO: порядок действий

В конфигураторе откройте ветку «Общие → Пакеты XDTO» и добавьте новый пакет. Главное свойство — пространство имён: уникальный URI, идентифицирующий вашу схему (например, http://mycompany.ru/exchange/orders). Он не обязан вести на реальный сайт — это просто уникальный идентификатор.

Далее опишите типы: простые типы значений (строки с ограничением длины, числа, перечисления) и типы объектов со свойствами. Для каждого свойства задаётся имя, тип, обязательность и кратность (одиночное значение или список). Если у вас уже есть XSD-файл от партнёра или из типовой конфигурации, используйте импорт: правый клик по пакету → «Импорт XML-схемы».

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

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

Чтение и запись XML: практические детали

При записи обращайте внимание на кодировку: для обмена с внешними системами стандартом является UTF-8, но некоторые старые системы требуют windows-1251 — это задаётся параметром при создании ЗаписьXML. Несовпадение кодировки — частая причина «битых» русских символов у принимающей стороны.

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

Списковые свойства (с кратностью «неограниченно») читаются как СписокXDTO. Перед обходом проверяйте, что свойство заполнено: если в XML не было ни одного элемента списка, обращение может вернуть пустой список или, для одиночных необязательных свойств, значение Неопределено. Используйте метод Установлено() объекта XDTO, чтобы отличить «поле не пришло» от «поле пришло пустым».

XDTO против альтернатив: что выбрать

Сравнение подходов к обмену

Пакеты XDTO + ФабрикаXDTO

Полный контроль схемы, валидация типов, веб-сервисы. Требует описания пакета и аккуратного кода

СериализаторXDTO

Быстрая выгрузка объектов конфигурации без описания схемы. Формат фиксирован платформой, внешней системе его сложно читать

Ручная ЗаписьXML/ЧтениеXML

Максимальная гибкость для нестандартных форматов, но нет валидации и много ручного кода

JSON (ЧтениеJSON/ЗаписьJSON)

Стандарт для REST и веб-интеграций, компактнее XML. Нет строгой схемы из коробки

Конвертация данных 2.1/3.0

Готовые правила обмена между типовыми конфигурациями поверх XDTO. Требует освоения отдельного инструмента

Выбор зависит от задачи. Если есть формальная XSD-схема или нужен веб-сервис — берите пакеты XDTO. Если нужно быстро перенести объекты между двумя базами 1С — достаточно сериализатора. Для REST-интеграций с современными системами чаще выбирают JSON, а XDTO остаётся там, где формат жёстко задан внешними требованиями.

Типичные ошибки и ограничения

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

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

Как проверить корректность обмена

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

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

Запись объекта в XML
Норма

Файл формируется без исключений, все обязательные поля заполнены

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

Ошибка вида «Несоответствие типов XDTO» или пустые обязательные элементы

Чтение входящего файла
Норма

ПрочитатьXML отрабатывает, объект содержит ожидаемые свойства

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

Исключение с указанием элемента, нарушающего схему

Кодировка файла
Норма

Русские символы корректно отображаются у принимающей стороны

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

Кракозябры или ошибки парсинга на стороне приёмника

Необязательные поля
Норма

Отсутствующие поля корректно определяются через Установлено()

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

Падение кода при обращении к непришедшему свойству

Полезная практика — сохранять все входящие и исходящие XML-файлы в архиве обмена хотя бы несколько недель. При расхождениях данных это позволяет восстановить, что именно было передано, и определить, на чьей стороне ошибка.

Итог

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

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

Частые вопросы об XDTO в 1С

Чем XDTO отличается от обычной работы с XML в 1С?

Ручная работа через ЧтениеXML и ЗаписьXML требует от разработчика самостоятельно обходить узлы и контролировать структуру. XDTO добавляет схему: платформа сама проверяет типы, обязательность и порядок элементов, а разработчик работает с типизированными объектами вместо строк и тегов.

Можно ли использовать XDTO без создания пакета в конфигурации?

Да. Можно создать фабрику программно из XSD-файла на диске с помощью конструктора фабрики XDTO. Это удобно, когда схема часто меняется и не хочется обновлять конфигурацию. Для простой сериализации объектов 1С достаточно СериализатораXDTO вообще без схем.

Почему возникает ошибка «Ошибка проверки данных XDTO»?

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

Подходит ли XDTO для обмена большими файлами?

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

Как связаны XDTO и планы обмена?

Планы обмена определяют, какие данные и куда отправляются (регистрация изменений, узлы), а XDTO отвечает за формат сообщений. В типовых синхронизациях через EnterpriseData план обмена формирует сообщение, а его тело — XML-документ, построенный по пакетам XDTO формата.

Что выбрать для новой интеграции: XDTO или JSON?

Если формат не задан внешними требованиями и обе системы современные, JSON обычно проще и компактнее. XDTO остаётся обязательным для веб-сервисов SOAP в 1С и предпочтительным там, где существует формальная XSD-схема и нужна строгая валидация на уровне платформы.