Разработка и Конфигурация · 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 ссылки, объекты документов и справочников без ручного описания пакета. Это удобно для простых выгрузок, но даёт мало контроля над форматом.
Фабрика = ФабрикаXDTO;
ТипЗаказ = Фабрика.Тип("http://example.com/orders", "Заказ");
Заказ = Фабрика.Создать(ТипЗаказ);
Заказ.Номер = "А-001";
Заказ.Дата = ТекущаяДатаСеанса();
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку("UTF-8");
Фабрика.ЗаписатьXML(Запись, Заказ);
ТекстXML = Запись.Закрыть();Где XDTO применяется на практике
Наиболее частые сценарии использования механизма:
- Веб-сервисы 1С. Операции веб-сервисов принимают и возвращают объекты XDTO — платформа автоматически формирует WSDL-описание на основе пакетов.
- Планы обмена и конвертация данных. Универсальный формат EnterpriseData, используемый в типовых синхронизациях, построен на XDTO-пакетах.
- Обмен с внешними системами. Загрузка и выгрузка XML-файлов по согласованной с контрагентом схеме: каталоги, заказы, статусы доставки.
- Регламентные форматы. Выгрузки для государственных систем и ЭДО, где структура файла строго задана XSD-схемой.
- HTTP-сервисы. Когда REST-интеграция требует XML-тела запросов и ответов с валидацией.
Во всех этих случаях XDTO снимает с разработчика рутинную работу: не нужно вручную склеивать строки XML или писать парсер — достаточно описать схему и работать с типизированными объектами.
Импортируйте схему в пакет XDTO и работайте с типизированными объектами
Операции веб-сервисов 1С работают только через объекты XDTO
Используйте ЧтениеJSON/ЗаписьJSON — XDTO работает только с XML
Рассмотрите СериализаторXDTO или ручную запись XML
Создание пакета XDTO: порядок действий
В конфигураторе откройте ветку «Общие → Пакеты XDTO» и добавьте новый пакет. Главное свойство — пространство имён: уникальный URI, идентифицирующий вашу схему (например, http://mycompany.ru/exchange/orders). Он не обязан вести на реальный сайт — это просто уникальный идентификатор.
Далее опишите типы: простые типы значений (строки с ограничением длины, числа, перечисления) и типы объектов со свойствами. Для каждого свойства задаётся имя, тип, обязательность и кратность (одиночное значение или список). Если у вас уже есть XSD-файл от партнёра или из типовой конфигурации, используйте импорт: правый клик по пакету → «Импорт XML-схемы».
После сохранения конфигурации пакет становится доступен в коде через глобальную фабрику. Проверить корректность схемы можно сразу: создайте тестовый объект, заполните его и запишите в XML — платформа сообщит обо всех нарушениях.
- 1Получите или опишите XSD-схему данных и создайте пакет XDTO с нужным пространством имён
- 2Опишите типы объектов и их свойства, задайте обязательность и кратность полей
- 3Напишите код заполнения объекта XDTO и запись его в XML через ФабрикаXDTO.ЗаписатьXML
- 4Реализуйте чтение входящего XML через ФабрикаXDTO.ПрочитатьXML с обработкой ошибок схемы
- 5Протестируйте обмен на реальных файлах обеих сторон, включая граничные случаи (пустые поля, списки, длинные строки)
Чтение и запись XML: практические детали
При записи обращайте внимание на кодировку: для обмена с внешними системами стандартом является UTF-8, но некоторые старые системы требуют windows-1251 — это задаётся параметром при создании ЗаписьXML. Несовпадение кодировки — частая причина «битых» русских символов у принимающей стороны.
При чтении всегда оборачивайте ПрочитатьXML в попытку/исключение и логируйте текст ошибки вместе с именем файла. Сообщение платформы содержит путь к проблемному элементу — это сильно ускоряет поиск причины, особенно когда файл формирует внешняя система.
Списковые свойства (с кратностью «неограниченно») читаются как СписокXDTO. Перед обходом проверяйте, что свойство заполнено: если в XML не было ни одного элемента списка, обращение может вернуть пустой список или, для одиночных необязательных свойств, значение Неопределено. Используйте метод Установлено() объекта XDTO, чтобы отличить «поле не пришло» от «поле пришло пустым».
XDTO против альтернатив: что выбрать
Сравнение подходов к обмену
Полный контроль схемы, валидация типов, веб-сервисы. Требует описания пакета и аккуратного кода
Быстрая выгрузка объектов конфигурации без описания схемы. Формат фиксирован платформой, внешней системе его сложно читать
Максимальная гибкость для нестандартных форматов, но нет валидации и много ручного кода
Стандарт для REST и веб-интеграций, компактнее XML. Нет строгой схемы из коробки
Готовые правила обмена между типовыми конфигурациями поверх XDTO. Требует освоения отдельного инструмента
Выбор зависит от задачи. Если есть формальная XSD-схема или нужен веб-сервис — берите пакеты XDTO. Если нужно быстро перенести объекты между двумя базами 1С — достаточно сериализатора. Для REST-интеграций с современными системами чаще выбирают JSON, а XDTO остаётся там, где формат жёстко задан внешними требованиями.
Типичные ошибки и ограничения
Ещё одно ограничение: XDTO работает только с XML. Если внешняя система присылает JSON, преобразовывать его в XML ради XDTO не имеет смысла — используйте штатные средства чтения JSON. Также помните, что глобальная фабрика собирается из всех пакетов конфигурации: конфликт одинаковых пространств имён в разных пакетах приведёт к ошибкам на уровне платформы.
Как проверить корректность обмена
Как проверить результат
Файл формируется без исключений, все обязательные поля заполнены
Ошибка вида «Несоответствие типов 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-схема и нужна строгая валидация на уровне платформы.