XDTO пакет
XDTO-пакеты — это общие объекты конфигурации. Они являются частью механизма XDTO. XDTO-пакеты позволяют описать в конфигурации систему типов и значений для взаимодействия с различными внешними источниками данных, например с Web-сервисами.
В конфигурацию может быть добавлено произвольное количество XDTO-пакетов.
- создание XDTO пакета с помощью импорта схемы XML;
- добавление нового XDTO пакета в дерево конфигурации и последующее его редактирование;
- экспорт существующего XDTO пакета в схему XML.
Также система 1С:Предприятие 8 поддерживает возможность экспорта набора XML схем данных конфигурации.
Редактирование XDTO пакета осуществляется в специальном окне, отображающем иерархическую структуру XDTO-пакета:
XDTO — выгрузка загрузка данных
XDTO-пакет — это объект метаданных, который хранит схему данных. Аббревиатура расшифровывается как XML Data Transfer Objects. Схему данных можно описать в xml файле, а затем подгрузить в созданный XDTO-пакет. Для программной работы с пакетами-xdto предназначен объект глобального контекста ФабрикаXDTO.
Текст схемы
<xs:schema xmlns:tns="Выгрузка" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="Выгрузка" attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:complexType name="Список">
<xs:sequence>
<xs:element name="Номенклатура" type="tns:Номенклатура" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Номенклатура">
<xs:sequence>
<xs:element name="ГУИД" type="xs:string" minOccurs="0"/>
<xs:element name="Наименование" type="xs:string" minOccurs="0"/>
<xs:element name="Код" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
ФабрикаXDTO с использованием XDTO-пакетов
ФабрикаXDTO содержит xml-схемы всех XDTO-пакетов, которые есть в конфигурации, и обладает набором методов для работы с данными. Для того чтобы схема стала доступна в объекте ФабрикаXDTO, её необходимо добавить в дереве метаданных в ветку с названием "XDTO-пакеты". Добавить можно двумя способами, либо загрузить из файла с расширением (*.xsd), либо добавить вручную узлы пакета.
Выгрузка данных в XML файл
Если схема хранится в метаданных Общие->XDTO-пакеты, то обращение к ней возможно только на сервере.
Загрузка данных из XML файла
ФабрикаXDTO с использованием схемы из файла
Создать объект ФабрикаXDTO на основании файла схемы. Для этого существует глобальный метод СоздатьФабрикуXDTO(<Путь>, <Пакеты>). Если работа с ФабрикойXDTO происходит во внешней обработке, то схему можно хранить в макете с типом "Текстовый документ". Но для создания объекта ФабрикиXDTO все равно необходимо чтобы схема лежала во внешнем файле. Для этого можно создать временный файл и поместить в него содержимое макета.
Выгрузка данных в XML файл
Загрузка данных из XML файла
Комментарии (0)
Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться
Механизм XDTO
Аббревиатура XDTO расшифровывается как XML Data Transfer Objects. XDTO является механизмом объектного моделирования данных, описываемых с помощью схемы XML.
Основные возможности использования XDTO
- описание типов параметров и возвращаемых значений Web-сервисов;
- обмен данными между конфигурациями 1С:Предприятия 8 с существенно разными структурами данных;
- обмен данными на основе схем XML, не привязанных к той или иной конфигурации (например, обмен с информационными системами, построенными не на основе 1С:Предприятия 8);
- создание собственной системы типов и значений для обработки произвольных данных.
XDTO пакет
Механизм XDTO реализован с помощью набора объектов встроенного языка и объекта конфигурации XDTO пакет.
Возможно выполнение следующих действий:
- создание XDTO пакета с помощью импорта схемы XML;
- добавление нового XDTO пакета в дерево конфигурации и последующее его редактирование;
- экспорт существующего XDTO пакета в схему XML.
Также система 1С:Предприятие 8 поддерживает возможность экспорта набора XML схем данных конфигурации.
Редактирование XDTO пакета осуществляется в специальном окне, отображающем иерархическую структуру XDTO пакета:
XDTO- сериализация
В системе 1С:Предприятие 8 реализована сериализация данных на основе механизма XDTO, которая позволяет сериализовать в/из XML:
- все типы данных хранящиеся в базе данных
- некоторые другие типы
XDTO-сериализация предназначена для сохранения данных объекта в файл XML и создания объекта на основе данных, хранящихся в файле XML:
wiki-1c
XDTO — это аббревиатура, обозначающая обмен данными посредством XML (XML Data Transfer Objects). Аббревиатура придумана разработчиками 1с и вряд ли встретится где-то ещё. Но реализует она вполне стандартизированный механизм обмена информацией с помощью файлов XML, известный как XML Schema.
Суть этого механизма заключается в том, что создаётся специальный файл, называемый схемой. Этот файл описывает структуру XML-файла. Если XML-файл соответствует этой структуре, то он считается корректным. Отдающей стороне достаточно сформировать корректный XML-файл для успешного обмена. Принимающая сторона должна гарантировать, что любой корректный XML-файл будет загружен без ошибок. В результате достаточно легко можно обеспечить обмен между двумя и более закрытыми информационными системами. Каждая схема характеризуется пространством имён, которое должно быть уникальным. Оно связывает XML-файл со своей схемой.
Самым ярким примером использования такого механизма обмена являются различного рода декларации (налоговые и прочее). На сайтах соответствующих ведомств всегда можно найти файл со схемой. Другой распространённый пример — обмен данными с сайтом.
С точки зрения программиста 1с, объект XDTO очень похож на Фиксированную структуру, созданную на основе файла со схемой. Эта псевдоструктура может быть загружена из XML-файла и использована для загрузки сторонних данных. А может быть заполнена данными и записана в корректный XML-файл. Который впоследствии будет использован для загрузки в другую информационную систему. В любом случае работа с объектом состоит из 3 основных этапов: получение типа объекта, создание объекта XDTO требуемого типа, использование объекта XDTO для выгрузки или загрузки данных.
Получение типа объекта
Это наиболее трудный для понимания этап т.к. он не соответствует обычной работе с переменными 1с. Но для работы с объектами XDTO он обязателен. Прежде чем создать объект XDTO, необходимо получить его тип. Для этого используются специальные объекты — фабрики типов XDTO.
Платформа позволяет использовать 2 вида схем — встроенные в конфигурацию XDTO-пакеты или внешние файлы с расширением .xsd и оформленные в соответствии со стандартами w3c. Соответственно, существует 2 способа получения объекта-фабрики типов.
Использование XDTO-пакетов
XDTO-пакет — это отдельный объект конфигурации, расположенный в ветке Общие дерева конфигурации. Платформа позволяет создавать неограниченное количество XDTO-пакетов как с помощью конструктора, так и путём импорта существующих файлов .xsd. Эти пакеты могут служить основой для получения типов объектов XDTO. Выглядит это так:
Здесь ФабрикаXDTO — это особый глобальный объект, который знает всё обо всех объектах XDTO, описанных в имеющихся в конфигурации XDTO-пакетах. Метод Тип() возвращает искомый тип объекта XDTO (ТипОбъектаXDTO). Он принимает 2 параметра — пространство имён и имя типа (оба — строки). Результат полезно запомнить в переменной, в дальнейшем её можно использовать для создания объектов XDTO произвольное количество раз.
Заметим, что в параметре передаётся не имя пакета, а его пространство имён. Имя пакета вообще нигде не используется и задаётся только для удобства поиска в дереве конфигурации.
Использование файлов с описанием схемы XML
Такие файлы традиционно имеют расширение .xsd. Преимущество данного метода в том, что он работает независимо от конфигурации. И если первому методу обязательно требуется отдельный объект конфигурации, этот требует только наличия файла со схемой. Вот код создания соответствующего объекта-фабрики и получение типа объекта XDTO:
Здесь мы использовали глобальную функцию СоздатьФабрикуXDTO, которая считывает файл со схемой (параметр функции) и создаёт объект-фабрику. Этот объект в будущем может произвольное число раз использоваться для создания любых доступных в схеме типов объектов. Если требуется загрузить несколько файлов со схемами, можно передать массив строк с именами файлов. Дальнейшая работа с фабрикой объектов не отличается от описанного в 1 способе.
Создание объекта XDTO
Сами объекты XDTO также создаются фабрикой объектов. Причём той же самой, которая использовалась при получении типа. Но используется уже другой метод — Создать():
В результате в переменной Номенклатура окажется объект XDTO, описанный в файле-схеме. К его реквизитам можно обращаться наподобие реквизитов фиксированной структуры. Естественно, нельзя добавлять или удалять реквизиты. В отличие от фиксированной структуры, каждый реквизит имеет определённый тип, поэтому произвольное присваивание не получится. Объект имеет тип ОбъектXDTO.
Запись объектов XDTO в файл
Прежде чем записать объект, его нужно заполнить. Принципы заполнения схожи с заполнением фиксированной структуры для реквизитов базовых типов, и с созданием объекта XDTO для прочих реквизитов.
Заполнение объекта XDTO
Использование фабрики объектов на этом не закончится. Ведь у переменной Номенклатура есть несколько реквизитов, и каждый из реквизитов относится к какому-то типу. К счастью, простые типы можно использовать без подобных преобразований простым присваиванием:
Более сложные типы требуют обращения к фабрике объектов:
Стандарт позволяет создавать реквизиты-списки и реквизиты-структуры без создания отдельных типов. Заполнять такие реквизиты можно следующим образом:
Здесь мы получаем объект-список методом ПолучитьСписок() объекта XDTO. Объект-список имеет тип СписокXDTO.
Получение типа элементов-структур немного напоминает работу с метаданными конфигурации. Используем метод Свойства() для получения списка реквизитов (КоллекцияСвойствXDTO). Далее получаем параметры реквизита методом списка Получить() (СвойствоXDTO). В его реквизите Тип и находится искомый тип значения.
Сейчас объект заполнен и его можно записать.
Запись объекта XDTO
Для записи воспользуемся объектом типа ЗаписьXML. В него умеет писать фабрика объектов с помощью метода ЗаписатьXML().
В результате в переменной Результат будет следующее содержимое:
Первая строка была добавлена методом ЗаписатьОбъявлениеXML() объекта ЗаписьXML. Остальное сделала фабрика. Из интересных моментов можно отметить наличие пары дополнительных пространств имён помимо используемого нами. В них описываются базовые типы реквизитов, таких как строка.
Если требуется результат записать сразу в файл, можно воспользоваться соответствующими методами объекта ЗаписьXML.
Чтение объектов XDTO из файла
Процесс чтения проще чем процесс записи. Сначала выполняем непосредственно чтение с помощью объекта ЧтениеXML и метода ПрочитатьXML() фабрики:
Как видим, ПрочитатьXML() требует в качестве параметра указания типа принимаемого XDTO-объекта. Параметр не обязательный, при его отсутствии метод попытается сам определить тип объекта. В результате в переменную НоменклатураСчитанная поместится объект, аналогичный записанному ранее.
В последней строке кода мы воспользовались методом Проверить() объекта XDTO. Этот метод вызовет исключение, если считанный объект не соответствует схеме XML. Рекомендуется этот метод вызывать и непосредственно перед записью объекта, чтобы гарантировать что сохранённый файл будет корректным.
Обращение к реквизитам аналогично обращению к реквизитам фиксированных структур. Для реквизитов-списков можно воспользоваться итератором:
Разумеется, содержимое считанного объекта можно менять. Впоследствии он может быть сохранён.