Разработка и Конфигурация · 9 мин
Как создать XDTO-пакет в 1С: полное руководство
Пошаговая инструкция по созданию XDTO-пакета в 1С: добавление типов объектов, свойств, схем обмена, сериализация и проверка результата.
XDTO-пакет (XML Data Transfer Objects) — это механизм платформы 1С:Предприятие 8.3, который описывает структуру передаваемых данных в формате XML. Он используется при обмене данными между конфигурациями, интеграции с веб-сервисами, выгрузке документов в ЭДО и любой сериализации объектов в XML.
Без XDTO-пакета платформа не сможет корректно преобразовать объект 1С в XML и обратно: сериализация опирается именно на описание типов, свойств и их соответствия. Поэтому создание собственного пакета — обязательный шаг, если вы разрабатываете собственный формат обмена, а не используете готовые пакеты типа EnterpriseData.
В этой статье разберём весь цикл: от создания пакета в конфигураторе до программной сериализации объекта и проверки результата. Материал ориентирован на разработчиков, работающих в конфигураторе 1С:Предприятие 8.3.
Что такое XDTO-пакет и когда он нужен
XDTO-пакет — это аналог XML-схемы (XSD) внутри конфигурации 1С. Он описывает: пространство имён, типы значений, типы объектов, их свойства, порядок следования и обязательность. Платформа использует это описание для контроля корректности данных при чтении и записи XML.
Собственный пакет нужен в следующих ситуациях:
- обмен данными с внешней системой по согласованному XML-формату;
- выгрузка документов или справочников в файл по нестандартной схеме;
- реализация веб-сервиса с собственной структурой сообщений;
- расширение типового обмена (например, дополнение EnterpriseData своими полями).
Если формат обмена уже описан внешней XSD-схемой, её не нужно переносить вручную — пакет можно импортировать прямо из файла схемы. Об этом ниже.
Создание XDTO-пакета в конфигураторе
Откройте конфигуратор и перейдите в дерево конфигурации. Пакеты находятся в ветке «Общие» → «XDTO-пакеты». Нажмите правой кнопкой мыши на ветке и выберите «Добавить».
В палитре свойств нового пакета задайте:
- Имя — имя объекта метаданных, по которому пакет будет доступен из кода (например, «ОбменСКурьерскойСлужбой»);
- Пространство имен — URI, уникально идентифицирующий пакет (например,
http://mycompany.ru/exchange/delivery). Это ключевое поле: именно по нему платформа сопоставляет XML-документ с пакетом.
- 1Откройте конфигуратор, ветка «Общие» → «XDTO-пакеты»
- 2Добавьте новый пакет, задайте имя и пространство имён
- 3Добавьте типы объектов и типы значений
- 4Опишите свойства объектов с типами и обязательностью
- 5Обновите конфигурацию базы данных
- 6Протестируйте сериализацию и чтение XML
Описание типов объектов и свойств
После создания пакета откройте его двойным щелчком — откроется редактор схемы. В нём два основных вида элементов:
- Тип значения — простой тип (строка, число, дата и их ограничения: длина, границы, шаблон);
- Тип объекта — составной тип, содержащий набор свойств. Аналог структуры или класса.
Добавьте тип объекта, например «Отправление». Затем в его свойствах создайте поля: «НомерНакладной» (строка), «ДатаОтправки» (дата), «Вес» (число), «Получатель» (ссылка на другой тип объекта пакета). Для каждого свойства укажите тип, минимальное и максимальное количество (0/1 — необязательное, 1/1 — обязательное, 0/-1 или 1/-1 — множественное).
Порядок следования свойств имеет значение: по умолчанию используется последовательная модель (sequence), и при чтении XML элементы должны идти в том же порядке, в каком объявлены свойства. Если порядок во внешнем формате не гарантирован, это нужно учитывать при проектировании схемы.
Не делайте все свойства обязательными «на всякий случай». Необязательные поля с минимальным количеством 0 делают формат устойчивым к расширению: старые файлы будут читаться новой схемой без ошибок.
Импорт схемы из XSD-файла
Если контрагент или внешняя система предоставили XSD-схему, описывать типы вручную не требуется. В редакторе пакета есть команда импорта XML-схемы: укажите файл .xsd, и платформа создаст все типы автоматически, включая вложенные объекты и ограничения.
После импорта проверьте результат: сложные конструкции XSD (наследование, группы выбора, подстановки) переносятся не всегда идеально, и отдельные типы может потребоваться скорректировать вручную. Также убедитесь, что пространство имён пакета совпадает с целевым пространством имён схемы.
Сериализация и чтение данных программно
Работа с пакетом из кода встроенного языка выполняется через глобальную фабрику XDTO. Типовой сценарий записи объекта в XML выглядит так:
Фабрика = ФабрикаXDTO;
ТипОтправление = Фабрика.Тип("http://mycompany.ru/exchange/delivery", "Отправление");
Отправление = Фабрика.Создать(ТипОтправление);
Отправление.НомерНакладной = "НК-00125";
Отправление.ДатаОтправки = ТекущаяДатаСеанса();
Отправление.Вес = 2.5;
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Exchange\otpravlenie.xml");
Фабрика.ЗаписатьXML(ЗаписьXML, Отправление);
ЗаписьXML.Закрыть();Чтение выполняется зеркально: открывается ЧтениеXML, вызывается Фабрика.ПрочитатьXML(ЧтениеXML), и возвращённый объект XDTO проверяется по типу. Если XML не соответствует схеме пакета (неизвестное пространство имён, нарушен порядок элементов, нет обязательного свойства), платформа выдаст ошибку ещё на этапе чтения — это и есть основная ценность механизма.
Для сериализации объектов конфигурации (документов, справочников) в XML по пакету используется XDTOСериализатор: он записывает ссылки как уникальные идентификаторы и может восстановить объект при чтении. Обычная ФабрикаXDTO работает только с данными, явно созданными как объекты XDTO.
Сравнение вариантов
Работа с произвольными структурами по схеме пакета. Подходит для обмена файлами и веб-сервисов. Не умеет сериализовать объекты БД напрямую.
Сериализация объектов конфигурации (документы, справочники) в XML через XDTO. Сохраняет ссылки по GUID. Требует пакет, описывающий структуру объектов.
Классический вариант для обмена между базами 1С. Избыточен для разового обмена с внешней системой.
Проверка результата и типичные ошибки
После обновления конфигурации базы данных проверьте пакет тестовой выгрузкой: создайте объект, запишите его в файл, затем прочитайте файл обратно и сравните значения свойств. Совпадение данных при цикле «запись → чтение» — основной признак корректно описанной схемы.
Как проверить результат
Фабрика.ПрочитатьXML возвращает объект без исключения
Ошибка «Ошибка разбора XML» или несоответствие типа
xmlns совпадает с URI пакета
Пустое или отличающееся пространство имён
Все свойства с минимальным количеством 1 заполнены
Ошибка проверки схемы при записи
Ещё одна частая проблема — работа с датами и числами: XML хранит их в каноническом виде, и если внешняя система использует нестандартный формат, придётся передавать значения строками и конвертировать вручную.
Частые вопросы
Чем XDTO-пакет отличается от плана обмена?
Пакет описывает только формат данных (структуру XML). План обмена — механизм регистрации изменений и маршрутизации данных между узлами. Они дополняют друг друга: план обмена может использовать XDTO-пакет для сериализации передаваемых объектов.
Можно ли изменить пакет, если обмен уже работает?
Можно, но только обратно совместимо: добавляйте новые необязательные свойства и новые типы. Удаление свойств, изменение их типов или пространства имён сломает чтение старых файлов и сообщений.
Как выгрузить в XML документ со ссылками на справочники?
Используйте XDTOСериализатор: он записывает ссылку как GUID, а при чтении может восстановить объект по идентификатору. Обычная ФабрикаXDTO ссылочные типы конфигурации напрямую не сериализует.
Что делать, если внешняя система присылает XML с другим пространством имён?
Либо привести файл к пространству имён вашего пакета (например, через XSLT-преобразование), либо создать отдельный пакет под их схему и читать данные через него. Смешивать пространства в одном пакете нельзя.
Нужен ли XDTO-пакет для работы с веб-сервисами?
При публикации собственного веб-сервиса 1С типы параметров описываются через XDTO-пакеты автоматически или вручную. При вызове внешнего веб-сервиса пакеты создаются из WSDL-описания при добавлении WS-ссылки.
Почему при чтении XML возникает ошибка проверки схемы, хотя файл выглядит правильно?
Чаще всего причины: нарушен порядок элементов относительно объявления свойств, отсутствует обязательное свойство, значение не соответствует ограничению типа (длина строки, формат даты) или отличается пространство имён. Текст исключения платформы обычно указывает конкретный элемент.
Что важно запомнить
XDTO-пакет создаётся в ветке «Общие → XDTO-пакеты» с уникальным пространством имён; типы можно описать вручную или импортировать из XSD. Сериализация выполняется через ФабрикаXDTO, объектов БД — через XDTOСериализатор. Изменяйте действующую схему только обратно совместимо и тестируйте цикл «запись — чтение» на копии базы.