XML файлы 1С: запись и чтение
Меню

XML файлы 1С: запись и чтение

Содержание статьи
  1. Представление файла XML и его чтение
  2. Механизм XDTO в 1С

Формат XML пользуется большой популярностью при обмене различными текстовыми документами между информационными системами. Возможность создания уникальной структуры у документов позволяет ее использовать во многих областях – электронные библиотеки, WEB, импорт/экспорт, а также многих других. Без возможности удобной работы с этим форматом системы 1С не смогли бы получить такую популярность. Поскольку 1С активно использует WEB-технологии, каждый разработчик должен уметь читать XML и записывать в них информацию.

Представление файла XML и его чтение

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

Структура XML файла
Структура XML файла

Для рассмотрения примера импорта данных в 1С достаточно будет представленного выше файла. Чтобы написанная процедура смогла прочитать XML файл, достаточно в нее передать путь к самому файлу. Это можно сделать через интерфейс, позволив пользователям самостоятельно указывать файл, либо жестко прописав в тексте обработки.

Одним из популярных способов работы с XML размером до 100 МБ в 1С считается использование объектной модели документа (DOM). Его смысл заключается в поочередной обработке всех узлов документа, представленных в XML. На встроенном языке 1С этот алгоритм выглядит так:

  1. Объявление механизмов, с помощью которых происходит чтение XML файла; Цикл для обхода узлов;
  2. Считывания данных и атрибутов в узле;
  3. Вывод информации. Если есть необходимость, на этом этапе может происходить запись в переменные или сразу в нужные таблицы;
  4. Завершение работы механизма.


&НаСервере
Процедура ЧитатьНаСервере(ПутьКФайлу)
       
        //объявление механизмов 
        МеханизмЧтения = Новый ЧтениеXML;
        МеханизмЧтения.ОткрытьФайл(ПутьКФайлу);
        Построитель = Новый ПостроительDOM;
        Документ = Построитель.Прочитать(МеханизмЧтения);

        //цикл для обхода узлов
        Для каждого элемента Из Документ.ЭлементДокумента.ДочерниеУзлы Цикл

               //считывание данных
               Если элемента.ИмяУзла = "Товар" Тогда
                       товар = элемента;
                       Для каждого значения Из товар.ДочерниеУзлы Цикл 
                               Если значения.ИмяУзла = "Наименование" тогда 
                                        Наименование = значения;
                                        Цвет = Наименование.Атрибуты.ПолучитьИменованныйЭлемент("Цвет");
                               ИначеЕсли значения.ИмяУзла = "Цена" тогда 
                                         Стоимость = значения;
                                         Валюта = Стоимость.Атрибуты.ПолучитьИменованныйЭлемент("Валюта");
                               КонецЕсли;
                       КонецЦикла;

                       //вывод сообщений
                      Сообщить("Наименование: " + Наименование.ТекстовоеСодержимое + "; цвет: "+Цвет.Значение
                      +"; Цена: "+Стоимость.ТекстовоеСодержимое + "; Валюта: "+Валюта.Значение);

               КонецЕсли;
         КонецЦикла;

         //закрытие механизма НеханизмЧтения.Закрыть();
КонецПроцедуры

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

Для выгрузки информации нам также пригодится взаимодействие с файлами формата XML. Рассмотрим пример записи с помощью объекта платформы 1С ЗаписьXML и выгрузим данные по номенклатуре. Главными его преимуществами являются простота кода и скорость обработки данных. Серверный алгоритм записи файла XML можно представить в виде нескольких последовательных шагов:

  1. Подключаемся к файлу xml;
  2. Создаем головные элементы и в них записываем данные. Если вы хотите выгрузить в XML файл большой объем информации, то на этом этапе у вас будут использоваться циклы. Будьте аккуратны и не забывайте, что запрос данных нужно делать до цикла, а не в нем;
  3. Закрываем файл.


//открываем файл Nomenclatura.xml и записываем головной элемент
ЗаписьВФайл = Новый ЗаписьХML();
ЗаписьВФайл.ОткрытьФайл("D:\Nomenclatura.xml", "UTF-8");
ЗаписьВФайл.3аписатьНачалоЭлемента("Товары");
//выбираем данные для записи
ВыборкаИзСправочника = Справочники.Номенклатура.Выбрать();
//цикл, в котором происходит запись
Пока ВыборкаИзСправочника.Следующий() цикл

          //запись новых данных
         ЗаписьВФайл.ЗаписатьНачалоЭлемента("Товар");
         ЗаписьВФайл.ЗаписатьАтрибут("Наименование", ВыборкаИзСправочника.Наименование);
         ЗаписьВФайл.ЗаписатьАтрибут("НачальнаяЦена", Строка(ВыборкаИзСправочника.НачальнаяЦена));
         ЗаписьВФайл.ЗаписатьКонецЭлемента();

КонецЦикла;

//Закрываем головной элемент и файл
ЗаписьВФайл.ЗаписатьКонецЭлемента();
ЗаписьВФайл.Закрыть();

Механизм XDTO в 1С

Разработчики компании 1С для обмена информацией через XML создали собственный механизм – XDTO (XML Data Transfer Objects). Начиная с версии 8.1, в платформе появляется возможность обмениваться данными с другими системами, не вникая в вопросы формирования файла XML. Большинство технических вопросов берет на себя 1С, а нам остается только указывать данные, необходимые, чтобы сформировать XML. Правда, для этого разработчику необходимо заранее проделать некоторые манипуляции.

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

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

Механизм XDTO
Механизм XDTO

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


//Открываем файл XML
ЗаписьВФайл = Новый ЗаписьXML;
ЗаписьВФайл.ОткрытьФайл("D:\Nomenclatura.xml", "UTF-8");
//Указываем 1C, какой тип данных следует создать - головной элемент
ВсеТовары = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://wiseadviceXML.org","Товары"));
//выбираем данные для выгрузки
ВыборкаИзСправочника = Справочники.Номенклатура.Выбрать();
//Добавляем отдельные товары в головной элемент 
Пока ВыборкаИзСправочника.Следующий() цикл

         Товар = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://wiseadviceXML.org","Товар")); 
         Товар.Наименование = ВыборкаИзСправочника.Наименование;
         Товар.НачальнаяЦена = Строка(ВыборкаИзСправочника.НачальнаяЦена);
         ВсеТовары.Добавить(Товар);

КонецЦикла;

//записываем данные и закрываем файл
ФабрикаXDTO.ЗаписатьXML(ЗаписьВФайл, ВсеТовары);
ЗаписьВФайл.Закрыть();

Рассмотренные механизмы являются достаточно универсальными и при правильной настройке могут решить большинство задач. Однако во взаимодействии 1С и XML достаточно много нюансов. Изучать их намного эффективнее в реальных условиях, а не на тестовых задачах, в которых обработка XML файла решает достаточно узкие задачи.


Рассказать друзьям
Предыдущая статья статья
Менеджер лицензий 1С 8.3 HASP
Следующая статья статья
Внешняя обработка 1С: запуск, параметры, вызов
Комментарии