Формирование файла XML. Простая выгрузка для стороннего приложения
В организации учет может вестить не только в решениях на платформе 1С:Предприятие, но и в других программным комплексах (Галактика, Парус, SAP и прочее). При этом появляются задачи интеграции двух приложений.
Напрмер, в некотором приложении (назовем его «X») требуется прочитать список документов конфигурации. О практической пользе решения подобной задачи говорить не будем, отмечу лишь, что наиболее удобным и универсальным способом в такой ситуации будет выгрузка списка документов в формате XML .
Обмен с использованием этого формата является универсальным, поскольку с ним могут работать большинство приложений. Рассмотрим как можно из 1С:Предприятия выгрузить список документов конфигурации в XML-файл.
Выгрузка в XML
И так, перейдем к главному. Нам нужно обойти список метаданных документов и сформировать список в XML-файле. На следующем скриншоте представлен алгоритм формирования XML-файла:
Функция СоздатьXML() Экспорт // Получаем имя временного файла Путь = ПолучитьИмяВременногоФайла(); // Инициализируем класс "ЗаписьXML" Запись = Новый ЗаписьXML; // Открываем временный файл для записи Запись.ОткрытьФайл(Путь, "UTF-8"); // Записываем объявление XML-файла Запись.ЗаписатьОбъявлениеXML(); // Запись.ЗаписатьНачалоЭлемента("ДокументыКонфигурации"); // Первый элемент // Атрибут первого элемента с датой формирования файла Запись.ЗаписатьАтрибут("generated", Формат(ТекущаяДата(), "ДФ=гггг-ММ-ddThh:mm:ss; ДЛФ=DT")); // Записываем элемент для каждого документа конфигурации. В текст помещаем имя документа. Для Каждого Док Из Метаданные.Документы Цикл Запись.ЗаписатьНачалоЭлемента("Документ"); Запись.ЗаписатьТекст(Док.Имя); Запись.ЗаписатьКонецЭлемента(); КонецЦикла; // Завершаем запись первого элемента Запись.ЗаписатьКонецЭлемента(); Запись.Закрыть(); // Закрываем файл // Получаем двоичные данные файла и помещаем их во временное хранилище ДвоичныеДанные = Новый ДвоичныеДанные(Путь); Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные, Новый УникальныйИдентификатор); Возврат Адрес; // Возвращаем адрес файла в хранилище КонецФункции
Каждый созданный элемент должен быть правильно завершен. После выполнения «ЗаписатьНачалоЭлемента()» обязательно должен быть выполнен метод «ЗаписатьКонецЭлемента», иначе структура XML-файла будет некорректной.
Общий шаблон создания XML-файлов предсавляет собой следующую последовательность:
// 1. Инициализируем класс "ЗаписьXML" Запись = Новый ЗаписьXML; // 2. Открываем временный файл для записи Запись.ОткрытьФайл(Путь, "UTF-8"); // 3. Записываем объявление XML-файла Запись.ЗаписатьОбъявлениеXML(); // // 4. ++ Записываем содержимое XML-файла Запись.ЗаписатьНачалоЭлемента("ЭлементXML"); Запись.ЗаписатьКонецЭлемента(); // -- Записываем содержимое XML-файла // 5. Закрываем файл Запись.Закрыть();
С помощью этих пяти шагов создается практически любой XML-файл.
В нашем примере созданный файл переводится в двоичные данные и возвращается в место вызова функции «СоздатьXML». Далее этот файл может быть записан в файловую систему.
Пример выгруженного файла Вы могли видеть на скриншоте выше.
Стороннее приложение
Для примере создал приложение на .NET Framework, чтобы продемонстрировать чтенеие XML-файла в стороннем приложении.
Програма читает созданный файл и выводит документы в виде списка:

Можете попробовать сами, приложение доступно для загрузки по ссылке в конце статьи.
Универсальность
Формат XML используется в большинстве конфигурации обмена данными между прикладными решениями на платформе 1С:Предприятие. Другим часто используемым способом обмена является подключение через COM-соединение. XML-позволяет выполнять обмен практически с любыми приложениями, чем и заслужил называться универсальным.
Файлы для загрузки:
Приложение чтения XML-файла.
Обработка формирования XML-файла.
Формирование XML файла 1С
Добрый день, уважаемые форумчане!
Появилась у меня задача сформировать XML файл из таблицы 1С,которая формируется на форме. Есть вопрос в оформлении XML файла(прикладываю два файла) Мне нужно,чтобы шапочка с кажой номенклатурой разворачивалась и туда записывались атрибуты. что то типо ЗаписьXML.ЗаписатьАтрибут. У меня возникли с этим трудности.
Прикрепленные файлы:
По теме из базы знаний
- Выгрузка xml файлов по контрагенту для загрузки в Декларант-алко для конфигурации Управление торговлей алкогольной продукцией 10.3
- Краткое описание создания XML файла по XSD схеме на примере создания выгрузки Статистической отчетности для ФТС
- Формирование xml файла ЭДО (СБИС, Диадок, Такском и т.п.) для типовых документов (счета-фактуры, накладные)
- Лайфхак по бесплатному формированию xml файла ЭДО (СБИС, Диадок, Такском и т.п.) для типовых документов
- Формирование XML документа (УПД, счет, накладная, СФ и прочее)
- Дата
- Дата
- Рейтинг всех уровней
- Рейтинг 1-го уровня
- Древо развёрнутое
- Древо свернутое
Свернуть все
2. Az18011993 29.03.20 09:12 Сейчас в теме
Просто атрибуты записываются справа, могу ли я их выводить вниз?
Прикрепленные файлы:
3. karamazoff 94 29.03.20 09:19 Сейчас в теме
рабочий пример кода, формируемый файл прикреплен, разбирайтесь, там не сложно
ЗаписьXML = Новый ЗаписьXML;
//ЗаписьXML.УстановитьСтроку(«windows-1251»);
ЗаписьXML.ОткрытьФайл(ИмяФайла);
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента(«DOCLIST»);
Для каждого стр из табл цикл
док = стр.ссылка;
ЗаписьXML.ЗаписатьНачалоЭлемента(«DOC»); //новый документ
ЗаписьXML.ЗаписатьАтрибут(«DOCNUMBER»,СокрЛП(строка(Док.Номер)));
ЗаписьXML.ЗаписатьАтрибут(«DOCDATE», СокрЛП(Формат(Док.Дата,»ДФ=»»гггг-ММ-дд»»»)));
ЗаписьXML.ЗаписатьАтрибут(«DOCTOTAL», Формат(Док.СуммаДокумента, «ЧДЦ=2;ЧРД=.;ЧГ=0»));
ЗаписьXML.ЗаписатьНачалоЭлемента(«KONTRAGENT»); //контрагент с реквизитами
ЗаписьXML.ЗаписатьАтрибут(«NAME», (Док.Контрагент.Наименование));
ЗаписьXML.ЗаписатьАтрибут(«INN», СокрЛП(строка(Док.Контрагент.ИНН)));
ЗаписьXML.ЗаписатьАтрибут(«KPP», СокрЛП(строка(Док.Контрагент.КПП)));
ЗаписьXML.ЗаписатьКонецЭлемента();
Для каждого Док1 из Док.ДокументыОснования цикл
Для каждого товар из Док1.ДокументОснование.Товары цикл
ЗаписьXML.ЗаписатьНачалоЭлемента(«DOCLINE»); //табличная часть
ЗаписьXML.ЗаписатьАтрибут(«QUANTITY», Формат(Товар.Количество, «ЧДЦ=3;ЧРД=.;ЧГ=0»));
ЗаписьXML.ЗаписатьАтрибут(«SUMMA», Формат(Товар.Сумма, «ЧДЦ=2;ЧРД=.;ЧГ=0»));
ЗаписьXML.ЗаписатьАтрибут(«PRICE_NO_NDS», Формат(Товар.Цена, «ЧДЦ=2;ЧРД=.;ЧГ=0»));
ЗаписьXML.ЗаписатьАтрибут(«NDSRATE», ОбрНДС(СокрЛП(строка(Товар.СтавкаНДС))));
ЗаписьXML.ЗаписатьАтрибут(«NDSSUM», Формат(Товар.СуммаНДС, «ЧДЦ=2;ЧРД=.;ЧГ=0»));
Если Док1.ДокументОснование.СуммаВключаетНДС тогда
ЗаписьXML.ЗаписатьАтрибут(«TOTAL»,Формат(Товар.Сумма, «ЧДЦ=2;ЧРД=.;ЧГ=0»));
иначе
ЗаписьXML.ЗаписатьАтрибут(«TOTAL»,Формат(Товар.Сумма+Товар.СуммаНДС, «ЧДЦ=2;ЧРД=.;ЧГ=0»));
КонецЕсли;
ЗаписьXML.ЗаписатьНачалоЭлемента(«TOVAR»); //номенклатура
ЗаписьXML.ЗаписатьАтрибут(«CODE», СокрЛП(строка(Товар.Номенклатура.Код)));
ЗаписьXML.ЗаписатьАтрибут(«NAME», СокрЛП(строка(Товар.Номенклатура.Наименование)));
ЗаписьXML.ЗаписатьАтрибут(«UNITNAME», СокрЛП(строка(Товар.ЕдиницаИзмерения.Наименование)));
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
Для каждого товар из Док1.ДокументОснование.Услуги цикл
ЗаписьXML.ЗаписатьНачалоЭлемента(«DOCLINE»); //табличная часть
ЗаписьXML.ЗаписатьАтрибут(«QUANTITY», Формат(Товар.Количество, «ЧДЦ=3;ЧРД=.;ЧГ=0»));
ЗаписьXML.ЗаписатьАтрибут(«SUMMA», Формат(Товар.Сумма, «ЧДЦ=2;ЧРД=.;ЧГ=0»));
ЗаписьXML.ЗаписатьАтрибут(«PRICE_NO_NDS», Формат(Товар.Цена, «ЧДЦ=2;ЧРД=.;ЧГ=0»));
ЗаписьXML.ЗаписатьАтрибут(«NDSRATE», ОбрНДС(СокрЛП(строка(Товар.СтавкаНДС))));
ЗаписьXML.ЗаписатьАтрибут(«NDSSUM», Формат(Товар.СуммаНДС, «ЧДЦ=2;ЧРД=.;ЧГ=0»));
Если Док1.ДокументОснование.СуммаВключаетНДС тогда
ЗаписьXML.ЗаписатьАтрибут(«TOTAL»,Формат(Товар.Сумма, «ЧДЦ=2;ЧРД=.;ЧГ=0»));
иначе
ЗаписьXML.ЗаписатьАтрибут(«TOTAL»,Формат(Товар.Сумма+Товар.СуммаНДС, «ЧДЦ=2;ЧРД=.;ЧГ=0»));
КонецЕсли;
ЗаписьXML.ЗаписатьНачалоЭлемента(«TOVAR»); //номенклатура
ЗаписьXML.ЗаписатьАтрибут(«CODE», СокрЛП(строка(Товар.Номенклатура.Код)));
//ЗаписьXML.ЗаписатьАтрибут(«NAME», СокрЛП(строка(Товар.Номенклатура.Наименование)));
ЗаписьXML.ЗаписатьАтрибут(«NAME», СокрЛП(строка(Товар.Содержание)));
ЗаписьXML.ЗаписатьАтрибут(«UNITNAME», СокрЛП(строка(Товар.Номенклатура.ЕдиницаИзмерения.Наименование)));
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
Прикрепленные файлы:
4. Az18011993 29.03.20 09:35 Сейчас в теме
(3)Все бы хорошо,но это не то что мне нужно,повторюсь,мне нужно реквизиты таблицы вывести вниз,если я вывожу их с помощью конструкции ЗаписатьАтрибут,они выводятся слева направо. Скрин прикрепляю. Или же это не через атрибуты делать. Вот прошу подсказать.
Прикрепленные файлы:
9. user856012 13 29.03.20 11:29 Сейчас в теме
мне нужно реквизиты таблицы вывести вниз,если я вывожу их с помощью конструкции ЗаписатьАтрибут,они выводятся слева направо
Вопрос: зачем? Формат XML предназначен для обмена информацией между программами , а им глубоко плевать, как там расположены атрибуты -переводы строк, пробелы и отступы игнорируются. «Налогоплательщик ЮЛ» вон вообще формирует весь файл отчета в одну строку — и ничего, никому это не мешает.
Но если уж так приспичило, то как вам подсказать — что надо сделать, если вы не показываете, как вы это делаете (код)?
Поэтому пара общих советов, которые мгновенно находятся поиском:
Сумеете ли вы ими воспользоваться — от меня не зависит.
5. karamazoff 94 29.03.20 10:13 Сейчас в теме
посмотрите внимательно на приложенный файл
там где у вас Страны у меня DOCLIST
где Страна Название — DOC DOCNUMBER
ТрадиционныеБлюда — DOCLINE
Блюдо Название — TOVAR CODE
все как у вас в файле как нужно — лесенкой
лишние не берите
там где нужна ступенька вниз делаете ЗаписатьНачалоЭлемента, где вправо ЗаписатьАтрибут
ЗаписьXML.ЗаписатьНачалоЭлемента(«ТрадиционныеБлюда»);
ЗаписьXML.ЗаписатьНачалоЭлемента(«Блюдо»);
ЗаписьXML.ЗаписатьАтрибут(«Название», «Солянка»);
ЗаписьXML.ЗаписатьАтрибут(«Название», «Щи»);
ЗаписьXML.ЗаписатьАтрибут(«Название», «Кисель»);
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();
Вот я вам уже и код ваш написал.
6. Az18011993 29.03.20 10:23 Сейчас в теме
(5)Спс конечно,но по скриншоту же видно,что я так и делаю. Я просил можно ли как то вывести.
<Товар>
Наименование
Артикул
Группа
Характеристика
Товар>
Или нет? Атрибуты всегда выводятся слева направо?
7. karamazoff 94 29.03.20 11:11 Сейчас в теме
попробуйте так
ЗаписьXML.ЗаписатьНачалоЭлемента(«Товар»);
ЗаписьXML.ЗаписатьНачалоЭлемента(«Наименование»);
ЗаписьXML.ЗаписатьАтрибут(«Значение», «Солянка»);
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента(«Артикул»);
ЗаписьXML.ЗаписатьАтрибут(«Значение», «1111111»);
ЗаписьXML.ЗаписатьКонецЭлемента();
.
ЗаписьXML.ЗаписатьКонецЭлемента();
будет
<Товар>
Наименование Значение = .
Артикул Значение = .
Группа Значение = .
Характеристика Значение = .
Товар>
либо
ЗаписьXML.ЗаписатьНачалоЭлемента(«Товар»);
ЗаписьXML.ЗаписатьНачалоЭлемента(«Наименование»);
ЗаписьXML.ЗаписатьТекст(«Солянка»);
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента(«Артикул»);
ЗаписьXML.ЗаписатьТекст(«1111111»);
ЗаписьXML.ЗаписатьКонецЭлемента();
.
ЗаписьXML.ЗаписатьКонецЭлемента();
Формат документа XML в 1C

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

При помощи этого встроенного языка 1С Предприятие, как раз, можно делать следующее с файлами формата XML 1С: · По порядку, с чёткой структурой, записывать и считывать документы в формате XML 1С; · Задействовать способы по объектному доступу к информации внутри документации с форматом «XML»; · Работать по объектной модели со схемой «XML»; · Внедрять и использовать стандарт XML 1.1.
При помощи внешнего соединения есть возможность делать различные интеграции, которые будут использовать документы в формате XML 1С. Возможность таких интеграций обеспечивает механизм «XSL-преобразование». К примеру, даже сервер «Microsoft» можно использовать в этой схеме таким образом:
Также, платформа системы 1С: Предприятие даёт возможность работать с документацией формата «XML» в виде бинарного формата «Fast Infoset». Данный формат является основным и задействует дополнительные инструменты для отображения синтаксиса данных в формате «XML». При помощи формата «Fast Infoset» объём файлов будет меньшим, а скорость работы с документами и их загрузка более высокие. Если для работы с XML был использован в 1С формат «Fast Infoset», то у результирующего документа будет расширение «.finf» или «.fi».
2. Выгрузка документов в формате «xml» для отправки контрагентам

Одним из продуктов системы 1С является «1С: Электронный документооборот» («1С: ЭДО»), при помощи этой конфигурации можно просто отправлять и получать различную документацию в электронном формате. Для начала, следует открыть необходимый документ и кликнуть на «Ещё», после чего избрать пункт «ЭДО» и нажать на «Выгрузить документ в файл 1С», как демонстрируется на скриншоте с примером ниже:

Появится окно, в нём, нужно выбрать пункт выгрузки «На диск» и нажать на кнопку «Выполнить», как можно увидеть далее:

Следующим шагом нам необходимо избрать в какое место на диске сохранится наш документ, который уже находится в формате «xml». В случае выгрузки документа в «облако» — нужно выбрать папку «Общее», чтобы осталась возможность загружать туда и файловые данные, и папки, это показано на скриншоте ниже:
После этого, наш документ в формате XML 1С будет помещён в архив и сохранён.
3. Формирование файлов в формате XML в программе системы 1С Предприятие

У программы системы 1С Предприятие есть много интеграций с другими программами, пусть требуется для какого-то приложения прочесть перечень документации из программы системы 1С Предприятие. Для такой задачи более удачным решением будет выгрузить перечень документации в формате «XML».
Получаем, что выгрузка должна выглядеть каким-то подобным образом:

Чтобы выгрузить документы в формате «xml» из платформы системы 1С: Предприятие — необходимо избежать перечня с метаданными от данной документации, а также создать отдельный перечень с документацией в файле с форматом «XML». Ниже показан программный код 1С, который поможет сформировать файл формата XML 1С:
Также, можно определить стандартный алгоритм для того, чтобы создавались файлы формата XML 1С, он будет иметь такой вид:

Такие шаги обеспечат «превращение» какого-либо документа в файл формата XML 1С. При помощи программного кода мы превращали документ из платформы системы 1С Предприятие в код двоичного вида, а затем уже в файл с форматом «XML».
Специалист компании «Кодерлайн» Айдар Фархутдинов
XML файлы 1С: запись и чтение

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

Для рассмотрения примера импорта данных в 1С достаточно будет представленного выше файла. Чтобы написанная процедура смогла прочитать XML файл, достаточно в нее передать путь к самому файлу. Это можно сделать через интерфейс, позволив пользователям самостоятельно указывать файл, либо жестко прописав в тексте обработки.
Одним из популярных способов работы с XML размером до 100 МБ в 1С считается использование объектной модели документа (DOM). Его смысл заключается в поочередной обработке всех узлов документа, представленных в XML. На встроенном языке 1С этот алгоритм выглядит так:
- Объявление механизмов, с помощью которых происходит чтение XML файла; Цикл для обхода узлов;
- Считывания данных и атрибутов в узле;
- Вывод информации. Если есть необходимость, на этом этапе может происходить запись в переменные или сразу в нужные таблицы;
- Завершение работы механизма.
&НаСервере Процедура ЧитатьНаСервере(ПутьКФайлу) //объявление механизмов МеханизмЧтения = Новый ЧтениеXML; МеханизмЧтения.ОткрытьФайл(ПутьКФайлу); Построитель = Новый ПостроительDOM; Документ = Построитель.Прочитать(МеханизмЧтения); //цикл для обхода узлов Для каждого элемента Из Документ.ЭлементДокумента.ДочерниеУзлы Цикл //считывание данных Если элемента.ИмяУзла = "Товар" Тогда товар = элемента; Для каждого значения Из товар.ДочерниеУзлы Цикл Если значения.ИмяУзла = "Наименование" тогда Наименование = значения; Цвет = Наименование.Атрибуты.ПолучитьИменованныйЭлемент("Цвет"); ИначеЕсли значения.ИмяУзла = "Цена" тогда Стоимость = значения; Валюта = Стоимость.Атрибуты.ПолучитьИменованныйЭлемент("Валюта"); КонецЕсли; КонецЦикла; //вывод сообщений Сообщить("Наименование: " + Наименование.ТекстовоеСодержимое + "; цвет: "+Цвет.Значение +"; Цена: "+Стоимость.ТекстовоеСодержимое + "; Валюта: "+Валюта.Значение); КонецЕсли; КонецЦикла; //закрытие механизма НеханизмЧтения.Закрыть(); КонецПроцедуры
В качестве результата мы выводим пользователю сообщения с импортированными данными. Также вы можете поместить все данные в нужную структуру и на ее основании запрограммировать создание документа или записей в справочнике. Скорость работы 1С с xml достаточно велика, поэтому все чаще именно этот формат используется при обмене данными с другими источниками.
Для выгрузки информации нам также пригодится взаимодействие с файлами формата XML. Рассмотрим пример записи с помощью объекта платформы 1С ЗаписьXML и выгрузим данные по номенклатуре. Главными его преимуществами являются простота кода и скорость обработки данных. Серверный алгоритм записи файла XML можно представить в виде нескольких последовательных шагов:
- Подключаемся к файлу xml;
- Создаем головные элементы и в них записываем данные. Если вы хотите выгрузить в XML файл большой объем информации, то на этом этапе у вас будут использоваться циклы. Будьте аккуратны и не забывайте, что запрос данных нужно делать до цикла, а не в нем;
- Закрываем файл.
//открываем файл 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.

Сохранить новый 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 файла решает достаточно узкие задачи.
