Как сделать файл xml в 1с

Обновлено: 08.07.2024

Предположим, что нам надо записать xml файл с описанием нескольких сайтов. Для этих сайтов нам надо записать оценку сайта и его краткое содержание. И соответственно потом нам надо будет этот файл прочитать.
Напомню, что xml файл может состоять из элементов и атрибутов. Соответственно элемент может содержать какой-то текст, атрибуту также можно присвоить строковое значение. Также напоминаю, что у xml файла может быть только один корневой элемент в который вложены все остальные.

ЗаписьXML

Итак начнем шаг за шагом создавать наш файл. Для начала создадим объект ЗаписьXML, создадим заголовок xml файла, и запишем файл.

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

Собственно кроме объявления xml здесь ничего и нет.

Теперь добавим корневой элемент внутрь которого потом сложим все остальные элементы. Назовем этот элемент Сайты

Здесь стоит отметить, что атрибуты должны записываться после начала записи элемента и перед записью текста элемента.

И как можно заметить атрибут можно записать двумя способами. Вот итоговый вариант сформированного xml файла:

С записью разобрались. Теперь будем читать, созданный нами файл.

ЧтениеXML

С помощью объекта ЧтениеXML выполняется последовательное чтение узлов xml файла. Каждый прочитанный узел приходиться анализировать, т.к. не все узлы нам нужны (в частности корневой элемент). Также необходимо анализировать тип узла. Это может быть НачалоЭлемента, КонецЭлемента, Атрибут и т.д. Плюс еще атрибутов в отличие от нашего примера может быть несколько. В общем чтение xml процесс немного более запутанный чем его запись. Итак вернемся к нашему примеру. Не буду разбирать его построчно. Привожу сразу весь код целиком:

Перенос информации между базами данных является одной из задач их поддержки и администрирования. Для его эффективного выполнения в автоматизированных комплексах 1С создаются обработки. Они значительно облегчают рутинную работу, ускоряют процессы выгрузки-загрузки информации и одновременно реализуют контроль ее корректности. Выгрузка из 1с в xml позволяет создавать файл с содержимым любого объекта настроенной конфигурации, и использовать его, когда необходима выгрузка данных в идентичную конфигурацию.

Инструменты для создания выгрузки

Для экспорта информации, содержащейся в базах данных, главным образом используется формат xml. Для 1С разработано множество обработок (например, ВыгрузкаЗагрузкаДанныхxml82 epf), при помощи которых возможно выводить в файл и загружать данные. При этом пользователь должен получать файл определенной структуры, который позволяет загружать хранящуюся в нем информацию в родную базу данных или переносить ее в другое место. При создании выгрузки следует соблюдать следующие правила:

  • Сохранить созданные файлы до момента полного восстановления и окончания процедур проверки корректности перенесенной информации;
  • В случае использования обработки как инструмента резервного копирования создавать для копий данных отдельные подпапки и вести журнал их учета для быстрого поиска.
  • Выгрузка. Создает файл, содержащий выгружаемые объекты, определяемые пользователем;
  • Загрузка. Производит чтение экспортируемого ранее файла и записывает находящиеся в нем сведения в информационную базу.

Обработка позволяет произвести контроль объектов на недопустимые символы, а также включает в себя функцию экспорта информации с ограничениями.

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

Процесс выгрузки данных в xml

Рассмотрим, как выгрузить из 1с в xml в обычном режиме. После закачки обработки ВыгрузкаЗагрузкаДанныхxml.epf и ее открытия необходимо выполнить следующие шаги:

  • Отобрать объекты для экспорта;
  • Настроить необходимые фильтры, например, по периоду;
  • Определить месторасположение файла с информацией на дисковой подсистеме;
  • Запустить выгрузку объектов.


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

Загрузка данных в формате xml

При необходимости активируются флажки для загрузки данных в режиме обмена в распределенной информационной базе и игнорирования возникающих ошибок при загрузке объектов.


После этого необходимо проверить базы и убедиться, что все элементы загружены корректно, чтобы не получить их потери, например, если произошла ошибка в обработчике события после загрузки объекта.

Для работы с XML в 1С предназначены специальные объекты. Существует несколько методов для того, чтобы создавать, парсить XML в 1С:Предприятии. Один из методов - это использовать объекты встроенного языка ЗаписьXML, ЧтениеXML. Если свойств и методов данных объектов недостаточно, то в 1С:Предприятии для работы с XML предназначен "ДокументDOM". Кроме того, благодаря COM технологии, существует возможность создать "Msxml2.DOMDocument".

Записать XML файл

Прочитать XML файл

Комментарии (0)


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

- Ресторан Кухня fs10lh1-5">Азиатская " Счет fs10lh1-5">3500 " Категория fs10lh1-5">Высшая " Название fs10lh1-5">Китайская грамота ">

- Ресторан Кухня fs10lh1-5">Европейская " Счет fs10lh1-5">5000 " Категория fs10lh1-5">Люкс " Название fs10lh1-5">Итальянский Экспресс ">


✔ Чтение файла в формате XML по порядку (способ №1)

//Подходит для файлов более 100Mb
&НаСервере
Процедура ПрочитатьФайлXMLПоПорядкуСпособ1 ( ПутьКФайлу )

XML = Новый ЧтениеXML ;
XML . ОткрытьФайл ( ПутьКФайлу );

Пока XML . Прочитать () Цикл

Если XML . ТипУзла = ТипУзлаXML . НачалоЭлемента И XML . Имя = "Ресторан" Тогда

Название = XML . ЗначениеАтрибута ( "Название" );
Если Название <> Неопределено Тогда
Сообщить ( "Название ресторана:" + Название );
КонецЕсли;

Категория = XML . ЗначениеАтрибута ( "Категория" );
Если Категория <> Неопределено Тогда
Сообщить ( ". наценочная категория ресторана: " + Категория );
КонецЕсли;

Счет = XML . ЗначениеАтрибута ( "Счет" );
Если Счет <> Неопределено Тогда
Сообщить ( ". средний счет ресторана: " + Счет );
КонецЕсли;

Кухня = XML . ЗначениеАтрибута ( "Кухня" );
Если Кухня <> Неопределено Тогда
Сообщить ( ". кухня ресторана: " + Кухня );
КонецЕсли;

Пока XML . Прочитать () Цикл //

Если XML . ТипУзла = ТипУзлаXML . НачалоЭлемента И XML . Имя = "Меню" Тогда
Сообщить ( "Меню:" );

Пока XML . Прочитать () Цикл //
Если XML . ТипУзла = ТипУзлаXML . НачалоЭлемента И XML . Имя = "Блюдо" Тогда
Название = XML . ЗначениеАтрибута ( "Название" );
Если Название <> Неопределено Тогда
Сообщить ( ". название блюда:" + Название );
КонецЕсли;
ИначеЕсли XML . ТипУзла = ТипУзлаXML . КонецЭлемента И XML . Имя = "Меню" Тогда
Прервать;
КонецЕсли;
КонецЦикла; //

ИначеЕсли XML . ТипУзла = ТипУзлаXML . НачалоЭлемента И XML . Имя = "Описание" Тогда

XML . Прочитать ();
Если XML . ТипУзла = ТипУзлаXML . Текст Тогда
Сообщить ( "Описание:" + XML . Значение );
КонецЕсли;

ИначеЕсли XML . ТипУзла = ТипУзлаXML . КонецЭлемента И XML . Имя = "Ресторан" Тогда

//Подходит для файлов более 100Mb
&НаСервере
Процедура ПрочитатьФайлXMLПоПорядкуСпособ2 ( ПутьКФайлу )

XML = Новый ЧтениеXML ;
XML . ОткрытьФайл ( ПутьКФайлу );

СписокИмен = Новый СписокЗначений ;

Пока XML . Прочитать () Цикл
Если XML . ТипУзла = ТипУзлаXML . НачалоЭлемента Тогда

СписокИмен . Добавить ( XML . Имя );
ПутьXML = СобратьПуть ( СписокИмен );

Если ПутьXML = "/Рестораны/Ресторан" Тогда
Название = XML . ЗначениеАтрибута ( "Название" );
Если Название <> Неопределено Тогда
Сообщить ( "Название ресторана: " + Название ); //"Китайская грамота"
КонецЕсли;

Категория = XML . ЗначениеАтрибута ( "Категория" );
Если Категория <> Неопределено Тогда
Сообщить ( ". наценочная категория ресторана: " + Категория ); // Высшая
КонецЕсли;

Счет = XML . ЗначениеАтрибута ( "Счет" );
Если Счет <> Неопределено Тогда
Сообщить ( ". средний счет ресторана: " + Счет ); // 3500
КонецЕсли;

Кухня = XML . ЗначениеАтрибута ( "Кухня" );
Если Кухня <> Неопределено Тогда
Сообщить ( ". кухня ресторана: " + Кухня ); // Азиатская
КонецЕсли;

ИначеЕсли ПутьXML = "/Рестораны/Ресторан/Меню" Тогда

ИначеЕсли ПутьXML = "/Рестораны/Ресторан/Меню/Блюдо" Тогда

Название = XML . ЗначениеАтрибута ( "Название" );
Если Название <> Неопределено Тогда
Сообщить ( ". название блюда: " + Название );
КонецЕсли;

ИначеЕсли ПутьXML = "/Рестораны/Ресторан/Описание" Тогда

XML . Прочитать ();
Если XML . ТипУзла = ТипУзлаXML . Текст Тогда
Сообщить ( "Описание: " + XML . Значение );
КонецЕсли;

ИначеЕсли XML . ТипУзла = ТипУзлаXML . КонецЭлемента Тогда

СписокИмен . Удалить ( СписокИмен . Количество () - 1 );

&НаСервере
Функция СобратьПуть ( СписокИмен )

Для Каждого Имя Из СписокИмен Цикл
НашПуть = НашПуть + "/" + Имя ;
КонецЦикла;

//Подходит для файлов менее 100Mb, для больших Не подходит
&НаСервере
Процедура ПрочитатьФайлXMLЧерезDOMСпособ3 ( ПутьКФайлу )

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

ЧтениеXML = Новый ЧтениеXML ;
ЧтениеXML . ОткрытьФайл ( ПутьКФайлу );

Построитель_DOM = Новый ПостроительDOM ;
ДокументXML = Построитель_DOM . Прочитать ( ЧтениеXML );

Для Каждого ТекУзел Из ДокументXML . ЭлементДокумента . ДочерниеУзлы Цикл

Если ТекУзел . ИмяУзла = "Ресторан" Тогда

Название = Ресторан . Атрибуты . ПолучитьИменованныйЭлемент ( "Название" );
Если Название <> Неопределено Тогда
Сообщить ( "Название ресторана:" + Название . Значение ); //"Китайская грамота"
КонецЕсли;

Категория = Ресторан . Атрибуты . ПолучитьИменованныйЭлемент ( "Категория" );
Если Категория <> Неопределено Тогда
Сообщить ( ". наценочная категория ресторана: " + Категория . Значение ); // Высшая
КонецЕсли;

СрСчет = Ресторан . Атрибуты . ПолучитьИменованныйЭлемент ( "Счет" );
Если СрСчет <> Неопределено Тогда
Сообщить ( ". средний счет ресторана: " + СрСчет . Значение ); // 3500
КонецЕсли;

Кухня = Ресторан . Атрибуты . ПолучитьИменованныйЭлемент ( "Кухня" );
Если Кухня <> Неопределено Тогда
Сообщить ( ". кухня ресторана: " + Кухня . Значение ); // Азиатская
КонецЕсли;

Для Каждого ТекУзел1 Из Ресторан . ДочерниеУзлы Цикл

Если ТекУзел1 . ИмяУзла = "Меню" Тогда

Меню = ТекУзел1 ;
Сообщить ( "Меню:" );

Для Каждого ТекУзел2 Из Меню . ДочерниеУзлы Цикл

Если ТекУзел2 . ИмяУзла = "блюдо" Тогда
Блюдо = ТекУзел2 ;

Название = Блюдо . Атрибуты . ПолучитьИменованныйЭлемент ( "Название" );
Если Название <> Неопределено Тогда
Сообщить ( ". название блюда:" + Название . Значение );
КонецЕсли;

ИначеЕсли ТекУзел1 . ИмяУзла = "Описание" Тогда

Сообщить ( "Описание :" + ТекУзел1 . ТекстовоеСодержимое );

&НаКлиенте
Процедура ЗаписатьДанныеВФорматеXML ( ПутьКФайлу )

Рестораны = СоздатьДанныеДляЗаписиВXML ();
ПараметрыЗаписи = Новый ПараметрыЗаписиXML ( "UTF-8" , "1.0" , Ложь); //необязательно их прописовать

XML = Новый ЗаписьXML ;
XML . ОткрытьФайл ( ПутьКФайлу , ПараметрыЗаписи );
XML . ЗаписатьОбъявлениеXML ();
XML . ЗаписатьНачалоЭлемента ( "Рестораны" );

Для Каждого Ресторан Из Рестораны Цикл

XML . ЗаписатьНачалоЭлемента ( "Ресторан" );
XML . ЗаписатьАтрибут ( "Название" , Ресторан . Значение . Название );
XML . ЗаписатьАтрибут ( "Категория" , Ресторан . Значение . Категория );
XML . ЗаписатьАтрибут ( "Счет" , Ресторан . Значение . Счет );
XML . ЗаписатьАтрибут ( "Кухня" , Ресторан . Значение . Кухня );

XML . ЗаписатьНачалоЭлемента ( "Меню" );
Для Каждого БлюдоИзМеню Из Ресторан . Значение . Меню Цикл

XML . ЗаписатьНачалоЭлемента ( "Блюдо" );
XML . ЗаписатьАтрибут ( "Название" , БлюдоИзМеню . Значение . Название );
XML . ЗаписатьКонецЭлемента (); // Блюдо

XML . ЗаписатьКонецЭлемента (); // Меню

XML . ЗаписатьНачалоЭлемента ( "Описание" );
XML . ЗаписатьТекст ( Ресторан . Значение . Описание );
XML . ЗаписатьКонецЭлемента (); // Описание

XML . ЗаписатьКонецЭлемента (); // Ресторан

XML . ЗаписатьКонецЭлемента (); // Рестораны


&НаКлиенте
Функция СоздатьДанныеДляЗаписиВXML ()

Рестораны = Новый СписокЗначений ;

Китайский_ресторан = Новый Структура ( "Название, Категория, Счет, Кухня, Меню, Описание" );
Китайский_ресторан . Название = "Китайская грамота" ;
Китайский_ресторан . Категория = "Высшая" ; //наценочная категория
Китайский_ресторан . Счет = "3500" ; //средний счет
Китайский_ресторан . Кухня = "Азиатская" ;
Китайский_ресторан . Меню = Новый СписокЗначений ;
Китайский_ресторан . Меню . Добавить (Новый Структура ( "Название" , "Суши из форели" ));
Китайский_ресторан . Меню . Добавить (Новый Структура ( "Название" , "Лапша фирменная" ));
Китайский_ресторан . Меню . Добавить (Новый Структура ( "Название" , "Суп из малюсков" ));
Китайский_ресторан . Описание = "Ресторан азиатской кухни Высшей наценочной категории" ;
Рестораны . Добавить ( Китайский_ресторан );

Европейский_ресторан = Новый Структура ( "Название, Категория, Счет, Кухня, Меню, Описание" );
Европейский_ресторан . Название = "Итальянский Экспресс" ;
Европейский_ресторан . Категория = "Люкс" ; //наценочная категория
Европейский_ресторан . Счет = "5000" ; //средний счет
Европейский_ресторан . Кухня = "Европейская" ;
Европейский_ресторан . Меню = Новый СписокЗначений ;
Европейский_ресторан . Меню . Добавить (Новый Структура ( "Название" , "Мясная нарезка из мраморной говядины" ));
Европейский_ресторан . Меню . Добавить (Новый Структура ( "Название" , "Салат де-люкс Комплимент" ));
Европейский_ресторан . Меню . Добавить (Новый Структура ( "Название" , "Пицца от шеф повара" ));
Европейский_ресторан . Описание = "Ресторан европейской кухни категории Люкс" ;
Рестораны . Добавить ( Европейский_ресторан );

Читайте также: