Как создать пакет XDTO по схеме WSDL или XML в 1С:Предприятие 8

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Работа с внешними веб-сервисами и обмен данными через XML требует наличия строго описанной структуры в информационной базе. В платформе 1С для этих целей используются XDTO-пакеты. Часто разработчики сталкиваются с ситуацией, когда на руках есть только файл .wsdl или пример .xml, а структуру пакета нужно воссоздать максимально быстро и без ошибок. В этой статье мы подробно разберем, как автоматизировать этот процесс, какие инструменты использовать и как обойти ограничения платформы.

Способ 1. Создание WS-ссылки из WSDL-файла

Если ваша задача — интеграция с веб-сервисом, описанным в .wsdl, самым простым и логичным путем будет создание объекта WS-ссылка. Это позволяет платформе автоматически считать все типы данных и методы сервиса. Разберем этот процесс по шагам:

  1. В Конфигураторе перейдем в ветку Общие / WS-ссылки.
  2. Нажмем "Добавить" и выберем вариант загрузки из файла. В строке пути укажем адрес в формате file://C:/МояСхема/service.wsdl.
  3. Если файл корректен и все импорты (зависимые схемы) доступны, 1С создаст дерево объектов.

Важно понимать: при создании WS-ссылки пакеты XDTO создаются "виртуально" внутри этой ссылки. Вы можете обращаться к ним через свойство ссылки, но они не появятся в общем списке пакетов XDTO. Если вам нужны именно отдельные пакеты для локальной обработки файлов, перейдем к следующему методу.

Способ 2. Извлечение XSD-схемы из WSDL для импорта в пакеты

Часто WSDL содержит в себе блок types, внутри которого описаны схемы xsd. Чтобы создать именно XDTO-пакет в дереве метаданных, нам нужно получить чистый файл .xsd. Проанализируем, как это сделать:

Вариант А. Ручное копирование. Откроем .wsdl в текстовом редакторе, найдем тег xs:schema и скопируем все его содержимое (включая сам тег) в новый текстовый файл с расширением .xsd. Не забудьте добавить стандартный заголовок XML в начало файла.

Вариант Б. Использование SoapUI. Рассмотрим более профессиональный подход. Загрузим WSDL в бесплатную утилиту SoapUI. После импорта проекта мы сможем нажать правой кнопкой мыши на интерфейс и выбрать пункт "Export Schema". Утилита сама извлечет все вложенные типы и сохранит их в виде готовых к импорту файлов.

После получения файла .xsd выполним следующие действия в Конфигураторе:

  1. Перейдем в Общие / XDTO-пакеты.
  2. Нажмем правой кнопкой мыши и выберем Импорт XML-схемы.
  3. Укажем наш файл. Платформа создаст пакет со всеми типами, свойствами и перечислениями.

Способ 3. Генерация XSD на основе примера XML-файла

Ситуация, когда есть только пример сообщения (.xml), сложнее, так как XML не содержит информации о типах данных (например, является ли поле строкой или числом, обязательное ли оно). Однако мы можем воспользоваться инструментами инференции схемы. Проанализируем алгоритм действий:

  1. Воспользуемся утилитой xsd.exe, которая входит в состав Microsoft .NET SDK. Выполним команду xsd.exe my_file.xml. Утилита создаст файл my_file.xsd на основе структуры данных.
  2. Также можно использовать онлайн-сервисы (генераторы XSD по XML) или функции современных сред разработки (Visual Studio Code, IntelliJ IDEA).

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

Способ 4. Программное создание динамической фабрики XDTO

Иногда структура данных меняется слишком часто, или нам не хочется загромождать дерево метаданных десятками пакетов. В этом случае мы можем использовать объект WSОпределения для создания динамической фабрики прямо в коде. Рассмотрим пример кода:


МестоположениеWSDL = "C:\Schemas\service.wsdl";
// Создаем объект определений, который прочитает структуру WSDL
WSОпределения = Новый WSОпределения(МестоположениеWSDL);

// Из определений получаем фабрику, которая содержит все типы схемы
МояФабрика = WSОпределения.ФабрикаXDTO;

// Теперь мы можем создавать объекты по типам из этой схемы
ТипОбъекта = МояФабрика.Тип("http://www.example.com/integration", "OrderRequest");
НовыйЗаказ = МояФабрика.Создать(ТипОбъекта);

Если у нас есть только файлы схем .xsd, мы можем собрать фабрику из массива файлов, не создавая WSОпределения:


МассивСхем = Новый Массив;
МассивСхем.Добавить("C:\Schemas\CommonTypes.xsd");
МассивСхем.Добавить("C:\Schemas\Orders.xsd");

// Создаем фабрику на лету
ДинамическаяФабрика = СоздатьФабрикуXDTO(МассивСхем);

Этот метод крайне полезен при разработке универсальных механизмов обмена, так как позволяет обновлять схемы без изменения метаданных конфигурации и перезапуска сеансов пользователей.

Тонкости и ограничения при импорте сложных схем

Проанализируем типичные проблемы, с которыми можно столкнуться при импорте .xsd в 1С. Платформа поддерживает стандарт XML Schema не в полном объеме. Выясним основные причины ошибок:

Использование механизмов БСП для упрощения работы

Если вы работаете в конфигурации на базе Библиотеки стандартных подсистем (БСП), обратите внимание на программные интерфейсы. Хотя в БСП нет функции "создать пакет", там есть отличные инструменты для работы с результатами. Рассмотрим применение функций общего назначения:

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

Для выгрузки схемы из уже существующей WS-ссылки (если вам нужно передать ее коллегам), используйте метод ЭкспортСхемыXML у фабрики:


// Пример экспорта схемы пространства имен в текстовый документ
Схема = ФабрикаXDTO.ЭкспортСхемыXML("http://www.example.com/crm");
Схема.Записать("C:\Temp\ExportedSchema.xsd");

Подведем итог: автоматическое создание пакетов XDTO возможно через импорт .xsd или создание WS-ссылок. Если стандартные средства Конфигуратора не справляются со сложной схемой, используйте динамическое создание фабрики в коде или предварительную очистку схемы в специализированных инструментах, таких как SoapUI или Altova XMLSpy.

← На главную