Формат 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С:
```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С:ИТС)
