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

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

XDTO в 1С: что это и как использовать механизм

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

Под запросом «xtdo в 1с» чаще всего скрывается опечатка: в платформе 1С:Предприятие существует механизм XDTO (XML Data Transfer Objects) — «объекты передачи данных в формате XML». Именно его имеют в виду, когда говорят о выгрузке и загрузке данных через XML, обмене с веб-сервисами и интеграции 1С с внешними системами.

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

Разобраться в XDTO стоит любому разработчику или администратору 1С, потому что на нём построены планы обмена, универсальный формат EnterpriseData, обмен с сайтами, банковские выписки, ЭДО и большинство современных интеграций. Ниже — практическое объяснение устройства механизма, типовых сценариев и ошибок.

Что такое XDTO и зачем он нужен в 1С

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

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

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

Из чего состоит механизм: пакеты, фабрика, объекты

Работа с XDTO строится вокруг трёх ключевых понятий. Пакет XDTO — это описание модели данных: какие типы существуют, какие у них свойства, какие значения допустимы. Фактически это XML-схема (XSD), загруженная в конфигурацию. Пакеты можно увидеть в дереве конфигуратора в ветке «Общие» → «XDTO-пакеты».

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

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

Пакет XDTOСхема данных (XSD)

Ищите в конфигураторе: Общие → XDTO-пакеты

Фабрика XDTOСоздатель и проверяющий объектов

Глобальный объект ФабрикаXDTO доступен в коде без объявления

Объект XDTOЭкземпляр данных в памяти

Создаётся через ФабрикаXDTO.Создать() с указанием типа

URI пространства имёнИдентификатор пакета

Указывается в свойствах пакета и в корневом элементе XML

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

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

  • Планы обмена между базами 1С (например, между УТ и Бухгалтерией) — данные при выгрузке сериализуются через XDTO.
  • Универсальный формат EnterpriseData — официальный формат обмена фирмы «1С», полностью построенный на XDTO-пакетах.
  • Веб-сервисы: при публикации web-сервиса в 1С платформа автоматически формирует WSDL-описание на основе XDTO-пакетов, а входящие и исходящие сообщения обрабатываются фабрикой.
  • Обмен с сайтами (CommerceML), банковские выписки, электронный документооборот — форматы этих обменов описаны схемами и обрабатываются через XDTO.
  • Выгрузка отчётности в контролирующие органы: XML-файлы деклараций формируются по утверждённым XSD-схемам.

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

Как работать с XDTO в коде

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

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

// Проверка соответствия схеме
Заказ.Проверить();

// Запись в XML-файл
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Обмен\order.xml");
ФабрикаXDTO.ЗаписатьXML(Запись, Заказ);
Запись.Закрыть();

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

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

Как добавить и настроить пакет XDTO в конфигурации

Если внешняя система предоставила XSD-схему, её можно импортировать в конфигурацию. Порядок действий стандартный:

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

После импорта типы пакета становятся доступны фабрике. Если схема содержит импортируемые подсхемы (директивы include/import), их нужно подключить все — иначе фабрика не разрешит ссылки на неизвестные типы, и чтение XML завершится ошибкой.

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

Большинство проблем с XDTO связаны не с платформой, а с несоответствием XML и схемы. Характерные симптомы: ошибка «Ошибка проверки данных XDTO», несоответствие типа значения, неизвестное пространство имён при чтении файла.

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

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

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

Чем XDTO отличается от альтернатив

XDTO — не единственный способ передачи данных из 1С. Выбор зависит от задачи, формата внешней системы и требований к строгости проверки.

Сравнение вариантов

XDTO и фабрика

Подходит для обмена по формальной XSD-схеме с валидацией; избыточен для простых произвольных XML

Потоковые ЗаписьXML/ЧтениеXML

Гибко и быстро для произвольных XML без схемы; нет автоматической проверки структуры, всё контролирует разработчик

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

Стандарт для REST API и веб-интеграций; не подходит, если внешняя система требует XML по XSD

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

Удобен для переноса объектов конфигурации между базами 1С; бесполезен для систем, не знающих типы платформы

Правило выбора простое: если есть официальная XSD-схема (государственные форматы, EnterpriseData, CommerceML, схема контрагента) — используйте XDTO. Если формат свободный и контролируется вами, потоковая запись XML или JSON будут проще и быстрее.

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

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

Внешняя система дала XSD-схемуИмпортируйте схему как пакет XDTO и работайте через ФабрикаXDTO
Нужен обмен между двумя базами 1СИспользуйте планы обмена или СериализаторXDTO
Интеграция с веб-API на JSONИспользуйте ЗаписьJSON/ЧтениеJSON, XDTO не нужен
XML произвольной структуры без схемыФормируйте файл потоковой ЗаписьXML

Как проверить, что обмен через XDTO работает корректно

После настройки обмена результат нужно проверить до запуска в рабочем режиме. Контрольные точки:

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

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

Вызов метода Проверить() у объекта XDTO
Норма

Ошибок валидации нет

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

Сообщение о нарушении схемы с указанием свойства

Сформированный XML-файл
Норма

Открывается в браузере, корневой элемент содержит правильное пространство имён

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

Пустой файл, обрезанная структура, неверная кодировка

Обратное чтение файла фабрикой
Норма

ПрочитатьXML() возвращает объект без исключений

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

Ошибка типизации или неизвестное пространство имён

Загрузка в базу-получатель
Норма

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

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

Дубли элементов, битые ссылки, незаполненные реквизиты

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

Итог

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

«Xtdo» — опечатка от XDTO, встроенного механизма 1С для обмена данными через XML. Он состоит из пакетов (схем), фабрики и объектов, лежит в основе планов обмена, веб-сервисов и типовых форматов. Работайте с ним, когда есть формальная XSD-схема, изменения тестируйте на копии базы, а результат проверяйте валидацией и обратным чтением файла.

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

Я нашёл в поиске «xtdo» — это отдельный модуль 1С?

Нет, модуля с таким названием в платформе нет. Это распространённая опечатка от XDTO — механизма XML-сериализации. Файлов, обработок или подсистем с именем «xtdo» в типовых конфигурациях не существует.

Где посмотреть список XDTO-пакетов в моей базе?

Откройте конфигуратор, в дереве конфигурации разверните ветку «Общие» → «XDTO-пакеты». Там перечислены все пакеты конфигурации с их пространствами имён и структурой типов. Системные пакеты платформы в этом списке не отображаются, но доступны фабрике.

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

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

Почему при чтении XML возникает ошибка «неизвестное пространство имён»?

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

Чем XDTO отличается от планов обмена?

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

Подходит ли XDTO для интеграции с REST API?

Обычно нет: REST-сервисы чаще работают с JSON, для которого в платформе есть объекты ЗаписьJSON и ЧтениеJSON. XDTO оправдан, если сервис принимает или возвращает XML по формальной XSD-схеме.