В задачах интеграции часто возникает ситуация, когда для загрузки данных в 1С из внешней системы требуется XDTO-пакет. XDTO-пакет — это, по сути, описание структуры данных (схема), с которым будет работать 1С. Но что делать, если у нас на руках есть только пример XML-файла с данными, а самой схемы нет? В этой статье мы подробно разберем, как решить эту "обратную" задачу и создать XDTO-пакет на основе имеющегося XML-файла.
Проанализируем основную проблему. Файл XML содержит данные и их структуру (теги), но, как правило, не содержит строгой типизации, ограничений и другой метаинформации, которая необходима для полноценной схемы. Например, из тега <Количество>10</Количество> непонятно, является ли это число всегда целым, может ли оно быть дробным или отрицательным. Именно для описания таких правил и нужна схема. Поэтому прямое создание XDTO-пакета из XML-файла в 1С невозможно. Процесс включает промежуточный, но обязательный этап — создание XML-схемы (файла с расширением .xsd).
Наиболее эффективный способ решения нашей задачи состоит из трех ключевых шагов. Рассмотрим каждый из них подробно.
Генерация XSD-схемы на основе вашего XML-файла.
Первый и самый важный шаг — получить файл схемы (.xsd), который описывает структуру вашего XML. Для этого можно воспользоваться специальными инструментами — генераторами XSD-схем. Существует множество онлайн-сервисов и десктопных приложений, которые могут проанализировать ваш XML-файл и на его основе сгенерировать предполагаемую схему. Поисковый запрос "xsd generator from xml" поможет найти подходящий инструмент.
Важный момент: автоматический генератор — это лишь отправная точка. Он строит схему, основываясь только на тех данных, которые увидел в вашем файле. Качество результата напрямую зависит от полноты данных в предоставленном XML.
Ручная доработка сгенерированной XSD-схемы.
Это критически важный этап, который почти всегда необходим. Автоматически сгенерированная схема часто содержит неточности, которые нужно исправить вручную, открыв .xsd файл в любом текстовом редакторе. Обратим внимание на наиболее частые проблемы:
maxOccurs="unbounded"), чтобы указать, что таких элементов может быть много.xs:string, xs:int, xs:decimal, xs:date) для всех полей.minOccurs="0" для необязательных полей).Тщательная ручная проверка и доработка схемы на этом этапе сэкономит массу времени и избавит от ошибок при загрузке данных в будущем.
Импорт готовой XSD-схемы в 1С.
Когда у вас есть корректный и доработанный .xsd файл, его можно импортировать в конфигурацию 1С для создания XDTO-пакета. Разберем этот процесс по шагам:
.xsd файлу.После этого платформа 1С автоматически проанализирует файл схемы и создаст на его основе новый XDTO-пакет. Внутри этого пакета будут созданы все необходимые типы объектов (ObjectTypes) и типы значений (ValueTypes) со всеми свойствами, которые были описаны в XSD-схеме.
Если структура обмена данными достаточно проста или у вас есть подробное текстовое описание формата, можно создать XDTO-пакет с нуля непосредственно в конфигураторе 1С, не прибегая к генераторам. Этот способ дает полный контроль над всеми элементами схемы, но является более трудоемким.
Для этого в ветке "XDTO-пакеты" нужно создать новый пакет и затем вручную добавлять в него типы объектов, типы значений и их свойства, задавая для каждого имя, тип, множественность и другие параметры.
После того как XDTO-пакет создан, вы можете полноценно использовать его в коде 1С для работы с XML-данными. Основным инструментом для этого является глобальный объект ФабрикаXDTO. С его помощью можно выполнять две ключевые операции:
ФабрикаXDTO.ПрочитатьXML(), вы можете прочитать XML-файл или XML-строку, и 1С вернет вам готовый объект XDTO. Структура этого объекта будет соответствовать типам, описанным в вашем пакете, что позволяет удобно обращаться к данным в объектной модели (например, ОбъектXDTO.ИмяРеквизита).ФабрикаXDTO.Создать(), заполнить его данными и затем выгрузить в XML-файл или строку методом ФабрикаXDTO.ЗаписатьXML().Таким образом, наличие XDTO-пакета делает работу с XML в 1С типизированной, контролируемой и значительно более удобной по сравнению с ручным разбором XML-документа.