Как правильно создавать структуру XML-файла в 1С: отличия элементов от атрибутов

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Разбираем ошибку: Атрибуты vs Элементы

В объектной модели ЗаписьXML платформы 1С существуют принципиально разные методы для создания структуры файла. Если ваша задача — получить структуру, где данные находятся внутри тегов (например, <DocNumber>Значение</DocNumber>), использование ЗаписатьАтрибут() будет неверным.

Атрибут — это свойство тега, которое записывается внутри его открывающей части, например <Order DocNumber="123">. Если же вам нужно записать значение как самостоятельный узел, необходимо использовать логику создания элементов.

Как правильно записать элемент с текстовым значением

Для создания полноценного XML-тега, содержащего данные, мы должны выполнить три последовательных действия: открыть элемент, записать в него текст и закрыть элемент. Рассмотрим это на конкретном примере.

Допустим, вам нужно создать структуру вида <DocNumber>12345</DocNumber>. Ваш код должен выглядеть следующим образом:


Запись.ЗаписатьНачалоЭлемента("DocNumber");
Запись.ЗаписатьТекст("12345");
Запись.ЗаписатьКонецЭлемента();

Если же вы используете метод ЗаписатьАтрибут(), вы получите <DocNumber DocNumber="12345" /> или подобную конструкцию, которая не будет соответствовать вашей задаче. Помните, что каждый вызов ЗаписатьНачалоЭлемента() должен быть сбалансирован вызовом ЗаписатьКонецЭлемента().

Альтернативный способ записи через метод ЗаписатьXML

Существует более лаконичный способ записи элементов, который позволяет выполнить задачу в одну строку, если структура данных простая. Метод ЗаписатьXML(Запись, Значение, ИмяЭлемента) берет на себя рутину по открытию и закрытию тега. Посмотрим на этот пример:

ЗаписатьXML(Запись, "ЗначениеТега", "DocNumber");

Этот подход делает код значительно чище, если вам нужно записать большое количество простых полей данных в цикле.

Структурированный подход к формированию документа

Давайте систематизируем процесс создания сложного XML-файла. При формировании документа следуйте этому алгоритму:

  1. Инициализируйте объект ЗаписьXML и откройте файл.
  2. Используйте ЗаписатьОбъявлениеXML() для корректного начала документа.
  3. Для контейнеров (например, <Order-Header>) используйте ЗаписатьНачалоЭлемента().
  4. Внутри контейнеров для каждого поля данных используйте пару ЗаписатьНачалоЭлемента() и ЗаписатьТекст(), либо используйте универсальный метод ЗаписатьXML().
  5. Обязательно закрывайте каждый открытый элемент методом ЗаписатьКонецЭлемента() в обратном порядке.

Важно помнить, что если ваш XML-файл требует сложной структуры с вложенностью, ручная запись через ЗаписьXML может стать громоздкой. В таких случаях мы рекомендуем рассмотреть технологию XDTO. Использование XDTO-пакетов позволяет описывать схему XML как объектную модель 1С, что избавляет вас от необходимости вручную управлять тегами и закрывать их, так как сериализация происходит автоматически на основе структуры объектов.

Подводя итог, при ручной записи всегда анализируйте, является ли информация, которую вы добавляете, свойством объекта (атрибутом) или содержательной частью документа (элементом). Это простое правило поможет вам избежать ошибок при первом знакомстве с XML в 1С.

← На главную