Разработка и Конфигурация · 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. Фабрика сама определяет тип документа по пространству имён и корневому элементу, проверяет соответствие схеме и возвращает готовый объект, к свойствам которого можно обращаться как к обычным реквизитам.
- 1Создайте пакет XDTO в конфигураторе и опишите в нём типы объектов и свойств
- 2Получите тип объекта методом ФабрикаXDTO.Тип() с указанием пространства имён
- 3Создайте объект методом ФабрикаXDTO.Создать() и заполните свойства
- 4Сериализуйте объект через ЗаписатьXML или прочитайте входящий документ через ПрочитатьXML
- 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С
Типизированные объекты по схеме, автоматическая валидация. Подходит для интеграций и обменов, но требует описания пакетов
Ручное формирование и разбор документа без схемы. Гибко и просто для нерегулярных задач, но вся проверка структуры ложится на разработчика
Сериализация объектов конфигурации без собственных пакетов. Удобен для переноса данных между базами 1С, но формат не предназначен для внешних систем
Типичные ошибки и ограничения механизма
Самая частая проблема — конфликт пространств имён. Если два пакета используют одно пространство имён с пересекающимися типами, фабрика выдаёт ошибку неоднозначности типа. Решение — привести пространства имён к уникальным значениям и перепроверить импортированные XSD-схемы, которые иногда содержат вложенные импорты с дублирующимися пространствами.
Вторая группа ошибок связана с типами данных: при чтении XML фабрика строго проверяет соответствие схеме. Пустое обязательное поле, нарушение формата даты, лишний элемент, отсутствующий в схеме, — всё это приводит к исключению при ПрочитатьXML. Поэтому чтение входящих документов всегда следует оборачивать в попытку с осмысленной обработкой ошибок и журналированием исходного XML.
Есть и ограничения производительности. Объекты XDTO создают заметную нагрузку при массовой обработке больших документов: фабрика строит полную объектную модель в памяти. Для выгрузки сотен тысяч записей потоковая запись через ЗаписьXML может оказаться существенно быстрее, чем формирование объектов XDTO.
Проверка результата и отладка
После настройки пакета и кода обмена результат проверяется на тестовом документе: сформированный XML сравнивается с эталонным образцом от внешней системы или валидируется по исходной XSD-схеме сторонним инструментом. Несоответствие на этом этапе обычно указывает на ошибки в описании свойств пакета.
При отладке чтения полезно сохранять исходный текст входящего XML до вызова ПрочитатьXML — по нему можно воспроизвести ошибку и точно определить, какой элемент не соответствует схеме. Текст ошибки фабрики обычно содержит имя типа и свойства, вызвавшего проблему.
Как проверить результат
Документ формируется без исключений и проходит валидацию по XSD-схеме
Ошибка при ЗаписатьXML или невалидный документ при внешней проверке
Объект читается, все обязательные свойства заполнены ожидаемыми значениями
Исключение при ПрочитатьXML с указанием типа или свойства
Каждый пакет имеет уникальное пространство имён, типы определяются однозначно
Ошибка неоднозначного определения типа
Время обработки пакета документов укладывается в регламент обмена
Резкий рост времени и памяти на больших объёмах
FAQ: частые вопросы о фабрике XDTO
Чем фабрика XDTO отличается от сериализатора XDTO?
Фабрика XDTO работает с типами, описанными в пакетах XDTO, и предназначена для обмена по заданным схемам. Сериализатор XDTO — отдельный объект, который преобразует в XML объекты самой конфигурации (ссылки, структуры, таблицы значений) без описания схем. Сериализатор удобен для переноса данных между базами 1С, фабрика — для интеграций с внешними системами.
Можно ли использовать фабрику XDTO без создания пакетов?
Для собственных схем пакет необходим. Однако глобальная фабрика уже содержит системные пакеты платформы, а для сериализации объектов конфигурации можно использовать СериализаторXDTO, которому пакеты не нужны. Импорт готовой XSD-схемы от внешней системы также создаёт пакет автоматически.
Почему возникает ошибка «неоднозначное определение типа»?
Ошибка означает, что в фабрике присутствуют несколько типов с одинаковым именем в одном пространстве имён — обычно из-за дублирования пакетов или повторного импорта схемы. Нужно найти пересекающиеся пакеты, удалить дубли или развести типы по разным пространствам имён.
Как обработать входящий XML, который не соответствует схеме?
Вызов ПрочитатьXML следует помещать в конструкцию Попытка/Исключение, сохранять исходный текст документа в журнал и по тексту ошибки определять проблемный элемент. Если формат внешней системы нестабилен, иногда надёжнее разбирать документ через ЧтениеXML с ручной проверкой элементов.
Подходит ли фабрика XDTO для выгрузки очень больших данных?
Фабрика строит полную объектную модель документа в памяти, поэтому при массовой обработке больших объёмов возможны замедление и рост потребления памяти. Для таких задач рассмотрите потоковую запись через ЗаписьXML или разбивку выгрузки на порции небольших документов.
Что важно запомнить
Фабрика XDTO — типизированный механизм сериализации данных 1С в XML по схемам из пакетов XDTO. Она применяется в веб-сервисах, планах обмена и интеграциях, автоматически валидирует данные, но требует уникальных пространств имён, аккуратного версионирования схем и обработки ошибок при чтении внешних документов.