1С 8.3 XDTO - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 XDTO

XML Data Transfer Objects (XDTO) в 1С 8.3 - это механизм обмена данными (с определенной структурой) с различными конфигурациями, сторонними приложениями, веб-сервисами. Создан компанией 1С специально для удобного взаимодействия с файлами XML. Позволяет импортировать XML-файл по установленным заранее правилам (XDTO-пакет) в объект 1С и обращаться к нему через точку (без тегов, атрибутов и скобок). Для трансформации важно наличие в файле атрибута "targetNamespace" с указанием пространства имен в XSD-файле.

XDTO-пакет можно использовать в конфигурации тремя способами:
  1. Создать самостоятельно в блокноте или онлайн сервисе (Общие - XDTO-пакеты - добавить).
  2. Импортировать в конфигурацию XSD (Общие - XDTO-пакеты - импорт XML-схемы).
  3. Использовать из отдельного файла XSD (без импорта в БД).

Схема XML пространства имен: www.w3.org/2001/XMLSchema
Пример структуры файла D:/Example_XDTO/Test.xml:
<?xml version="1.0" encoding="UTF-8"?>
-<Рестораны>
  -<Ресторан Кухня="Азиатская" Счет="3500" Категория="Высшая" Название="Китайская грамота">
     -<Меню>
            <Блюдо Название="Суши из форели"/>
            <Блюдо Название="Лапша фирменная"/>
            <Блюдо Название="Суп из малюсков"/>
     </Меню>
     <Описание>Ресторан азиатской кухни Высшей наценочной категории</Описание>
  </Ресторан>
  -<Ресторан Кухня="Европейская" Счет="5000" Категория="Люкс" Название="Итальянский Экспресс">
     -<Меню>
            <Блюдо Название="Мясная нарезка из мраморной говядины"/>
            <Блюдо Название="Салат де-люкс Комплимент"/>
            <Блюдо Название="Пицца от шеф повара"/>
     </Меню>
     <Описание>Ресторан европейской кухни категории Люкс</Описание>
  </Ресторан>
</Рестораны>
Создание фабрики XDTO в 1С 8.3:
Процедура Создание_фабрики_XDTO() Экспорт

   
// Процедура создает фабрику XDTO (из файла XML) на основе схемы XML

    // Создание объект чтения XML (по умолчанию)
   
XML = Новый ЧтениеXML;
   
// Запуск файла XML
   
XML.ОткрытьФайл("D:\Example_XDTO\SсhemaXML.xsd");

   
// Создание построителя документа DOM (по умолчанию)
   
Построитель_DOM = Новый ПостроительDOM;
   
// Чтение файла XML (в документ DOM)
   
Док_DOM = Построитель_DOM.Прочитать(XML);
   
// Создание построитель схемы XML (по умолчанию)
   
ПостроительСхемыXML = Новый ПостроительСхемXML;
   
// Получение схемы XML (из документа DOM)
   
Схема_XML = ПостроительСхемыXML.СоздатьСхемуXML(Док_DOM);

   
// Создание набора схем XML (по умолчанию)
   
Набор_Схем_XML = Новый НаборСхемXML;
   
// Добавление схемы XML в набор схем
   
Набор_Схем_XML.Добавить(Схема_XML);
   
// Создание фабрики XDTO на основе набора схем XML
   
ФабрикаXDTO = Новый ФабрикаXDTO(Набор_Схем_XML);

КонецПроцедуры
Получение фабрики XDTO из нескольких XSD в 1С 8.3:
Процедура Получение_фабрики_XDTO_из_нескольких_XSD() Экспорт

   
// Процедура получает фабрики XDTO из нескольких XSD

   
Схемы_XSD = Новый Массив;
   
Схемы_XSD.Добавить("D:\Example_XDTO\SсhemaXML_1.xsd");
   
Схемы_XSD.Добавить("D:\Example_XDTO\SсhemaXML_2.xsd");
   
Схемы_XSD.Добавить("D:\Example_XDTO\SсhemaXML_3.xsd");

   
Пакеты_XSD = Новый Массив;
   
Пакеты_XSD.Добавить(ФабрикаXDTO.Пакеты.Получить("URI пакета 1")); //может быть произвольной
   
Пакеты_XSD.Добавить(ФабрикаXDTO.Пакеты.Получить("URI пакета 2")); //может быть произвольной
   
Пакеты_XSD.Добавить(ФабрикаXDTO.Пакеты.Получить("URI пакета 3")); //может быть произвольной

   
Фабрика_XSD = СоздатьФабрикуXDTO(Схемы_XSD, Пакеты_XSD);

КонецПроцедуры
Создание значения XDTO в 1С 8.3:
Процедура Создание_значения_XDTO() Экспорт

   
// Процедура создает новое значение XDTO (немутабельное) с помощью метода Создать()

   
ГлобФабрикаXDTO = ФабрикаXDTO;

   
// Создание значения XDTO из ссылки
   
СправочникСсылка = Справочники.Материалы.НайтиПоНаименованию("Лапша фирменная");
   
ТипЗначения_XDTO = ГлобФабрикаXDTO.Тип("urn:schemas-v8-1c-ru:config-data", "CatalogRef.БлюдоНазвание");
   
Значение_XDTO = ГлобФабрикаXDTO.Создать(ТипЗначения_XDTO, СправочникСсылка);

   
// Создание значения XDTO из лексического представления
   
ТипЗначения_XDTO = ГлобФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "dateTime");
   
Значение_XDTO = ГлобФабрикаXDTO.Создать(ТипЗначения_XDTO, "2021-05-17T11:51:34");

КонецПроцедуры
Создание значения XDTO через файл XML в 1С 8.3:
Процедура Создание_значения_XDTO_файл_XML() Экспорт

   
// Процедура создает новое значение XDTO (немутабельное) путем чтения файла XML

   
ГлобФабрикаXDTO = ФабрикаXDTO;

   
// Чтение данных значения XDTO (из файла XML)
   
XML = Новый ЧтениеXML;
   
XML.ОткрытьФайл("D:/Example_XDTO/Test.xml");// обратный слэш!
   
Значение_XDTO = ГлобФабрикаXDTO. ПрочитатьXML(XML);

   
XML = Новый ЗаписьXML;
   
XML.ОткрытьФайл("D:/Example_XDTO/Test.xml");// обратный слэш!

    // Запись данных XDTO в файл XML
   
ГлобФабрикаXDTO = ФабрикаXDTO;
   
ГлобФабрикаXDTO.ЗаписатьXML(XML, Значение_XDTO);

КонецПроцедуры
Создание объекта XDTO в 1С 8.3:
Процедура Создание_объекта_XDTO(СправочникСсылка) Экспорт

   
// Процедура создает новый объект XDTO (мутабельное) с помощью метода Создать()

   
ГлобФабрикаXDTO = ФабрикаXDTO;

   
// Создание пустого объекта XDTO
   
ТипОбъекта_XDTO = ГлобФабрикаXDTO.Тип("http://www.koder.by/demo-material", "Материалы");
   
Объект_ХDTO = ГлобФабрикаXDTO.Создать(ТипОбъекта_XDTO);

   
// Заполнение его свойств
   
ОбъектСправочника = СправочникСсылка.ПолучитьОбъект();
   
Объект_ХDTO.Наименование = ОбъектСправочника.Наименование;
   
Объект_ХDTO.ПолноеНаименование = ОбъектСправочника.ПолноеНаименование;
   
Объект_ХDTO.ЕдиницаИзмерения = ОбъектСправочника.ЕдиницаИзмерения;
   
Объект_ХDTO.СтранаПроисхождения = ОбъектСправочника.СтранаПроисхождения;
   
Объект_ХDTO.КодТНВЭД = ОбъектСправочника.КодТНВЭД;

КонецПроцедуры
Создание объекта XDTO через файл XML в 1С 8.3:
Процедура Создание_объекта_XDTO_файл_XML(Объект_ХDTO) Экспорт

   
// Процедура создает новый объект XDTO (мутабельное) путем чтения файла XML

   
ГлобФабрикаXDTO = ФабрикаXDTO;
   
// Чтение данных объекта XDTO (из файла XML)
   
XML = Новый ЧтениеXML;
   
XML.ОткрытьФайл("D:/Example_XDTO/Test.xml");// обратный слэш!
   
Объект_ХDTO = ГлобФабрикаXDTO.ПрочитатьXML(XML);

   
// Запись данных объекта XDTO (в файл XML)
   
XML = Новый ЗаписьXML;
   
XML.ОткрытьФайл("D:/Example_XDTO/Test.xml");// обратный слэш!
   
ГлобФабрикаXDTO.ЗаписатьXML(XML, Объект_ХDTO);

КонецПроцедуры
XML сериализация XDTO в 1С 8.3:
Процедура XML_сериализация_XDTO() Экспорт

   
// Получение ссылки на элемент справочника Материалы
   
СправочникСсылка = Справочники.Материалы.НайтиПоНаименованию("Лапша фирменная");

   
// Создание сериализатора XDTO (для глобальной фабрики XDTO)
   
Сериализатор_XDTO = Новый СериализаторXDTO(ФабрикаXDTO);

   
// Создание объекта записи XML
   
XML = Новый ЗаписьXML;
   
XML.ОткрытьФайл("D:/Example_XDTO/Test.xml");// обратный слэш!

    // Cериализация ссылки в XML
   
Сериализатор_XDTO.ЗаписатьXML(XML, СправочникСсылка, НазначениеТипаXML.Явное);

КонецПроцедуры
XML сериализация XDTO через файл XML в 1С 8.3:
Процедура XML_сериализация_XDTO_файл_XML() Экспорт

   
// Создание сериализатора XDTO (для глобальной фабрики XDTO)
   
Сериализатор_XDTO = Новый СериализаторXDTO(ФабрикаXDTO);

   
// Чтение данных объекта XDTO из файла XML
   
XML = Новый ЧтениеXML;
   
XML.ОткрытьФайл("D:/Example_XDTO/Test.xml");// обратный слэш!

    // Cериализация ссылки из XML
   
СправочникСсылка = Сериализатор_XDTO.ПрочитатьXML(XML);

КонецПроцедуры
XML сериализация XDTO элементов прикладного объекта в 1С 8.3:
Процедура XML_сериализация_XDTO_элементов_объекта(ТаблицаДокументов)

    // 1. Создаем объект XML;
    XML = Новый ЧтениеXML;

    // 2. Указываем путь к сохраненному файлу;
    XML.ОткрытьФайл(Объект.ПутьКФайлу + "\Test.xml", "UTF-8");

    // 3. Записываем объявление типа: ;
    XML.ЗаписатьОбъявлениеXML();

    // 4. Записываем название корневого элемента;
    XML.ЗаписатьНачалоЭлемента("РеализацияТоваров");

    //Для того чтобы пространства имен не объявлялись сериализатором в кажом элементе, пишем их в корневой элемент
    //они будут работать на все вложеные элементы
    //пространство имен по-умолчанию
    XML.ЗаписатьСоответствиеПространстваИмен("", "http://v8.1c.ru/8.1/data/enterprise/current-config");
    //пространства имен остальные префиксы
    XML.ЗаписатьСоответствиеПространстваИмен("xsd", "http://www.w3.org/2001/XMLSchema");
    XML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");

    // 5. Сериализуем именно объекты (ссылки сериализуются по другому), что "ДОСТУПНО", то и сериализуется;
    Для Каждого ТекСтрока Из ТаблицаДокументов Цикл
        СериализаторXDTO.ЗаписатьXML(XML, ТекСтрока.Ссылка.ПолучитьОбъект());
    КонецЦикла;

    // 6. Конец корневого элемента;
    XML.ЗаписатьКонецЭлемента();

    // 7. Обязательно закрываем запись;
    XML.Закрыть();

КонецПроцедуры
XML Десериализация в 1С 8.3:
Процедура XML_десериализация() Экспорт

   // Получение ссылки на элемент справочника Материалы
   //СправочникСсылка = Справочники.Материалы.НайтиПоНаименованию("Лапша фирменная");
   //Объект = СправочникСсылка.ПолучитьОбъект();

   //ЗаписьJson = Новый ЗаписьJSON();
   //ЗаписьJson.УстановитьСтроку();
   //СериализаторXDTO.ЗаписатьJSON(ЗаписьJson, Объект, НазначениеТипаXML.Явное);

   JSON = ЗаписьJson.Закрыть();

   Чтение_JSON = Новый ЧтениеJSON();
   Чтение_JSON.УстановитьСтроку(JSON);

   ДанныеОбъект = СериализаторXDTO.ПрочитатьJSON(Чтение_JSON);
   ДанныеОбъект.ОбменДанными.Загрузка = Истина;
   ДанныеОбъект.Записать();

КонецПроцедуры
💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом #XDTO:
📰 Актуальные новости с тегом #XDTO:
  • В версии 8.3.26 реализована поддержка XDTO-пакетов в расширениях.
2
комментарии
esqado
27 апр 2022
В разделе xml десериализация описан процесс для json, но нет для xml.
esqado
27 апр 2022
Создание значения XDTO через файл XML в 1С 8.3:
В тексте, в комментарии к строке, что значит обратный слэш?
/ - это прямой
\ - это обратный
В тесте стоит прямой. Его нужно заменить на обратный или это ошибка в понятиях?
____________________
Copyright©, «Программист 1С в г.Минске», 17.05.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому