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

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

Фабрика XDTO в 1С: что это такое и как с ней работать

Что такое фабрика XDTO в 1С, как работает механизм сериализации объектов в XML, настройка пакетов XDTO, примеры кода и типичные ошибки разработчиков.

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

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

Механизм лежит в основе многих типовых решений: планов обмена, веб-сервисов 1С, обмена с банками, ЭДО и государственными информационными системами. Понимание устройства фабрики XDTO необходимо любому разработчику, который сталкивается с интеграциями.

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

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

Каждый пакет XDTO имеет пространство имён — уникальный идентификатор в формате URI, например http://mycompany.ru/exchange/orders. Именно пространство имён позволяет фабрике однозначно определить, к какой схеме относится конкретный XML-документ. Внутри пакета описываются типы объектов (аналоги составных структур) и типы значений (простые типы с ограничениями).

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

Как устроена работа с объектами XDTO в коде

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

Типичный фрагмент кода выглядит так:

ТипЗаказ = ФабрикаXDTO.Тип("http://mycompany.ru/exchange", "Заказ");

Заказ = ФабрикаXDTO.Создать(ТипЗаказ);

Заказ.Номер = "000001";

Заказ.Дата = ТекущаяДатаСеанса();

ЗаписьXML = Новый ЗаписьXML;

ЗаписьXML.УстановитьСтроку();

ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, Заказ);

СтрокаXML = ЗаписьXML.Закрыть();

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

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

Создание и настройка пакета XDTO в конфигураторе

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

Структуру пакета можно описать вручную в редакторе или импортировать из готового XSD-файла (XML Schema Definition). Импорт из XSD — стандартный путь при интеграции с внешними системами: контрагент предоставляет схему, разработчик импортирует её в конфигурацию и получает готовые типы. Платформа также умеет экспортировать пакет обратно в XSD для согласования формата с внешней стороной.

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

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

Наиболее массовый сценарий — веб-сервисы 1С. При публикации веб-сервиса платформа автоматически использует XDTO для описания типов параметров и возвращаемых значений операций, а WSDL-описание сервиса формируется на основе пакетов XDTO. Разработчик работает с типизированными объектами, а платформа берёт на себя преобразование в SOAP-сообщения.

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

Сериализация собственных данных

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

Способы работы с XML в 1С

Фабрика XDTO

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

ЗаписьXML / ЧтениеXML

Ручное формирование и разбор документа без схемы. Гибко и просто для нерегулярных задач, но вся проверка структуры ложится на разработчика

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

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

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

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

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

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

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

Проверка результата и отладка

После настройки пакета и кода обмена результат проверяется на тестовом документе: сформированный XML сравнивается с эталонным образцом от внешней системы или валидируется по исходной XSD-схеме сторонним инструментом. Несоответствие на этом этапе обычно указывает на ошибки в описании свойств пакета.

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

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

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

Формирование XML
Норма

Документ формируется без исключений и проходит валидацию по XSD-схеме

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

Ошибка при ЗаписатьXML или невалидный документ при внешней проверке

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

Объект читается, все обязательные свойства заполнены ожидаемыми значениями

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

Исключение при ПрочитатьXML с указанием типа или свойства

Пространства имён
Норма

Каждый пакет имеет уникальное пространство имён, типы определяются однозначно

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

Ошибка неоднозначного определения типа

Производительность обмена
Норма

Время обработки пакета документов укладывается в регламент обмена

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

Резкий рост времени и памяти на больших объёмах

FAQ: частые вопросы о фабрике XDTO

Чем фабрика XDTO отличается от сериализатора XDTO?

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

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

Для собственных схем пакет необходим. Однако глобальная фабрика уже содержит системные пакеты платформы, а для сериализации объектов конфигурации можно использовать СериализаторXDTO, которому пакеты не нужны. Импорт готовой XSD-схемы от внешней системы также создаёт пакет автоматически.

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

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

Как обработать входящий XML, который не соответствует схеме?

Вызов ПрочитатьXML следует помещать в конструкцию Попытка/Исключение, сохранять исходный текст документа в журнал и по тексту ошибки определять проблемный элемент. Если формат внешней системы нестабилен, иногда надёжнее разбирать документ через ЧтениеXML с ручной проверкой элементов.

Подходит ли фабрика XDTO для выгрузки очень больших данных?

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

Итог

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

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