Открыть сервисСервис

Формат XML в 1С:Предприятие

Формат XML в 1С:Предприятие — встроенный механизм обмена данными, предназначенный для записи и чтения структурированных документов стандарта XML. Реализован в платформе 1С:Предприятие 8 как набор объектов и методов языка встроенного приложения (встроенного языка 1С), позволяющих формировать XML-файлы из данных информационной базы и импортировать сведения из внешних XML-документов. Широко используется при обмене с ГИС, ФНС, ПФР, банками, маркетплейсами и другими внешними системами.

Основные объекты для работы с XML

Платформа 1С:Предприятие 8 предоставляет два основных способа работы с XML:

ОбъектНазначение
ЗаписьXMLПотоковая запись XML-документа в файл, строку или поток
ЧтениеXMLПоследовательное чтение XML-документа из файла, строки или потока
ПостроительDOMПостроение полного дерева объектной модели (DOM) при чтении
ЗаписьDOMЗапись ранее построенного дерева DOM в файл

Для большинства задач обмена используются ЗаписьXML и ЧтениеXML — они работают потоково и не требуют загрузки всего документа в память.

Запись XML

Для создания XML-файла используется объект ЗаписьXML. Базовый сценарий:

  1. Создание объекта и открытие файла.
  2. Запись заголовка документа (ЗаписатьНачалоДокумента).
  3. Запись корневого элемента и вложенных элементов с данными.
  4. Закрытие документа и файла.

Пример кода на встроенном языке 1С:

```1c Запись = Новый ЗаписьXML; Запись.ОткрытьФайл("c:\export\products.xml"); Запись.ЗаписатьНачалоДокумента(); Запись.ЗаписатьОбъявлениеXML();

Запись.ЗаписатьНачалоЭлемента("Каталог"); Запись.ЗаписатьАтрибут("Версия", "1.0");

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

Запись.ЗаписатьКонецЭлемента(); Запись.ЗаписатьКонецДокумента(); Запись.Закрыть(); ```

Основные методы ЗаписьXML:

  • ОткрытьФайл(ИмяФайла) — открывает файл для записи;
  • УстановитьСтроку() — запись в строку вместо файла;
  • ЗаписатьНачалоЭлемента(Имя) / ЗаписатьКонецЭлемента() — открытие и закрытие элемента;
  • ЗаписатьАтрибут(Имя, Значение) — запись атрибута текущего элемента;
  • ЗаписатьТекст(Текст) — текстовое содержимое элемента;
  • ЗаписатьCDATA(Текст) — запись в секции CDATA;
  • ЗаписатьКомментарий(Текст);
  • ЗаписатьОбъявлениеXML() — стандартная строка <?xml version="1.0" encoding="UTF-8"?>;
  • ЗаписатьИнструкциюОбработки(Имя, Текст).

Чтение XML

Для разбора XML-документа используется ЧтениеXML. Объект последовательно перемещается по узлам документа, и по типу текущего узла вызываются соответствующие обработчики.

```1c Чтение = Новый ЧтениеXML; Чтение.ОткрытьФайл("c:\import\orders.xml");

Пока Чтение.Прочитать() Цикл Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда ИмяЭлемента = Чтение.Имя; // обработка начала элемента ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда Значение = Чтение.Значение; КонецЕсли; КонецЦикла;

Чтение.Закрыть(); ```

Ключевые методы ЧтениеXML:

  • ОткрытьФайл(ИмяФайла) / ОткрытьСтроку(Текст);
  • Прочитать() — переход к следующему узлу, возвращает Ложь на конце документа;
  • Имя — имя текущего элемента;
  • Значение — текст текущего узла;
  • ТипУзла — значение перечисления ТипУзлаXML (НачалоЭлемента, КонецЭлемента, Текст, Атрибут и др.);
  • ПолучитьАтрибут(Имя) — значение атрибута по имени.

Сериализация объектов конфигурации

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

``1c Запись.ЗаписатьXML(СсылкаНаОбъект); // записывает тип и ссылку // при чтении: Ссылка = Чтение.ПрочитатьXML(); // восстанавливает ссылку ``

Регистрация пространств имён

При обмене с форматами, требующими XML-пространства имён (XSD-схемы Росстата, ФНС, форматы маркетплейсов), используется метод ЗаписатьНачалоЭлемента с указанием пространства имён либо специальные методы ЗаписатьНачалоЭлемента с параметрами URIПространстваИмен и ЛокальноеИмя. При чтении URI доступен через свойство URIПространстваИмен.

Встроенный язык и XDTO

Альтернативный (и часто более простой) способ обмена — технология XDTO, реализованная в платформе 1С. XDTO позволяет описывать структуру данных пакетом XSD-схем и автоматически преобразовывать объекты конфигурации в XML и обратно. Метод ЗаписатьXML объекта ЗаписьXDTO и ПрочитатьXML объекта ЧтениеXDTO скрывают низкоуровневую работу с узлами. Для сложных форматов обмена (например, формат взаимодействия с ФНС по 1С-Отчётности) использование XDTO предпочтительнее ручной записи через ЗаписьXML.

Типичные задачи

  • Выгрузка номенклатуры, контрагентов, остатков для маркетплейсов (Wildberries, Ozon);
  • Формирование отчётности для контролирующих органов в форматах XML;
  • Обмен с ГИС ЖКХ, ЕГАИС, Честный ЗНАК;
  • Импорт банковских выписок в формате 1CClientBankExchange (1CClientBankExchange — текстовый формат, но для ряда банков используется XML);
  • Интеграция с внешними сайтами и веб-сервисами через SOAP/REST.

Ограничения

Потоковые объекты ЗаписьXML и ЧтениеXML не валидируют документ по XSD-схеме — проверка корректности структуры ложится на разработчика. Для валидации используется отдельный объект ПроверкаXML или внешние инструменты. Кодировка по умолчанию — UTF-8, при необходимости меняется методом ЗаписатьОбъявлениеXML с указанием параметров.

Источники:

  • Техническая документация 1С:Предприятие 8.3 — объектная модель: ЗаписьXML, ЧтениеXML
  • Справка встроенного языка 1С:Предприятие (1c-dn.com)
  • Книга «1С:Предприятие 8.3. Практическое пособие разработчика» Е. Ю. Ходько
  • Методические рекомендации по обмену данными в формате XML (1С:ИТС)
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru