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

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

Что такое XML и зачем он нужен в 1С

XML (eXtensible Markup Language) — это текстовый формат, предназначенный для хранения и передачи структурированных данных. В контексте 1С:Предприятие он используется для:

  • 📤 Выгрузки данных в внешние системы (например, для отправки отчётности в ФНС или обмена с интернет-магазинами).
  • 📥 Загрузки данных из файлов или веб-сервисов (импорт прайс-листов, заказов клиентов).
  • 🔄 Интеграции с другими программами (CRM, ERP, бухгалтерскими сервисами).
  • 📑 Сохранения настроек или конфигураций (например, экспорт правил обмена).

Основное преимущество XML перед другими форматами (например, CSV или JSON) — это иерархическая структура и поддержка атрибутов, что позволяет описывать сложные данные с вложенными элементами. Например, в одном файле можно передать не только список товаров, но и их категории, свойства, цены и даже историю изменений.

В работа с XML реализована через несколько механизмов:

  • 📝 ЗаписьXML/ЧтениеXML — низкоуровневые инструменты для ручного формирования и parsing.
  • 🛠️ XDTO (XML Data Transfer Objects) — объектная модель для типобезопасной работы с XML.
  • 🔄 Универсальные форматы обмена (например, EnterpriseData для обмена между базами 1С).
  • 🌐 Веб-сервисы (SOAP, REST) с XML в качестве формата запросов/ответов.
⚠️ Внимание: Если вы работаете с государственными информационными системами (например, Честный ЗНАК или ЕГАИС), структура XML часто жёстко регламентирована. Отклонения от схемы (XSD) приведут к отказу в обработке файла. Всегда сверяйтесь с актуальной документацией по формату!

Способы создания XML-файлов в 1С

В зависимости от задачи, в 1С:Предприятие можно сформировать XML-файл несколькими способами. Выбор метода зависит от сложности данных, требований к производительности и необходимости валидации.

1. Ручное формирование через ЗаписьXML

Самый простой, но и самый трудоёмкий способ — это использование объекта ЗаписьXML. Он подходит для небольших файлов с простой структурой. Пример кода для создания XML с данными о товарах:


Процедура СформироватьXMLТовары()

ЗаписьXML = Новый ЗаписьXML;

ЗаписьXML.ОткрытьФайл("C:\temp\товары.xml");

// Начало документа

ЗаписьXML.ЗаписатьОбъявлениеXML();

ЗаписьXML.ЗаписатьНачалоЭлемента("Товары");

// Данные о товарах

Выборка = Справочники.Номенклатура.Выбрать();

Пока Выборка.Следующий() Цикл

ЗаписьXML.ЗаписатьНачалоЭлемента("Товар");

ЗаписьXML.ЗаписатьАтрибут("Код", Выборка.Код);

ЗаписьXML.ЗаписатьЭлемент("Наименование", Выборка.Наименование);

ЗаписьXML.ЗаписатьЭлемент("Цена", Формат(Выборка.Цена, "ЧЦ=2; ЧРД='.'"));

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

КонецЦикла;

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

ЗаписьXML.Закрыть();

КонецПроцедуры

Этот метод удобен для разовых задач или тестирования, но имеет недостатки:

  • 🐢 Низкая производительность при большом объёме данных.
  • 🔍 Отсутствие автоматической валидации по схеме XSD.
  • 📝 Ручное управление отступами и форматированием.

2. Использование XDTO для типобезопасной работы

XDTO (XML Data Transfer Objects) — это механизм, который позволяет работать с XML через объекты, привязанные к схеме (XSD). Это упрощает формирование сложных структур и уменьшает количество ошибок.

Пример создания XML через XDTO:


Процедура СформироватьXMLЧерезXDTO()

// Загружаем схему (например, для обмена с ФНС)

ФабрикаXDTO = Новый ФабрикаXDTO("file://C:\schemas\fnsschema.xsd");

// Создаём корневой объект

Товары = ФабрикаXDTO.Sоздать("ТоварыТип");

// Заполняем данные

Выборка = Справочники.Номенклатура.Выбрать();

Пока Выборка.Следующий() Цикл

Товар = ФабрикаXDTO.Sоздать("ТоварТип");

Товар.Код = Выборка.Код;

Товар.Наименование = Выборка.Наименование;

Товары.Товар.Добавить(Товар);

КонецЦикла;

// Сохраняем в файл

ЗаписьXML = Новый ЗаписьXML;

ЗаписьXML.ОткрытьФайл("C:\temp\товары_xdto.xml");

ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, Товары);

ЗаписьXML.Закрыть();

КонецПроцедуры

Преимущества XDTO:

  • Автоматическая валидация по схеме XSD.
  • 🔄 Удобная работа со сложными типами (массивы, вложенные объекты).
  • 🛡️ Меньше ошибок благодаря типобезопасности.
⚠️ Внимание: Для работы с XDTO необходимо предварительно загрузить схему XSD в конфигурацию или указать путь к файлу схемы. Если схема изменится (например, обновится формат отчётности), код может перестать работать!
📊 Какой способ формирования XML вы используете чаще?
Ручной через ЗаписьXML
Через XDTO
Универсальные форматы обмена
Веб-сервисы

3. Универсальные форматы обмена данными

Платформа 1С:Предприятие предоставляет готовые форматы для обмена данными между базами, например:

  • 📦 EnterpriseData — для обмена между конфигурациями на базе 1С:Предприятие 8.
  • 📄 DataExchange — универсальный формат для интеграции с внешними системами.

Пример выгрузки данных в формате EnterpriseData:


Процедура ВыгрузитьВEnterpriseData()

ОбменДанными = Новый ОбменДаннымиXML;

ОбменДанными.ИмяФайлаОбмена = "C:\temp\обмен.xml";

// Настраиваем параметры выгрузки

ПараметрыВыгрузки = ОбменДанными.СоздатьПараметрыВыгрузкиДанных();

ПараметрыВыгрузки.ВыгружатьДанные = Истина;

ПараметрыВыгрузки.ТипыОбъектов.Добавить(Тип("СправочникСсылка.Номенклатура"));

// Выгружаем

ОбменДанными.ВыгрузитьДанные(ПараметрыВыгрузки);

КонецПроцедуры

Эти форматы удобны тем, что:

  • 🔧 Не требуют ручного описания структуры XML.
  • 🔄 Поддерживают инкрементальный обмен (только изменённые данные).
  • 📂 Можно использовать для репликации баз.

Типичные ошибки при работе с XML в 1С и как их избежать

Даже опытные разработчики сталкиваются с проблемами при формировании XML-файлов. Рассмотрим самые распространённые ошибки и способы их решения.

1. Неправильное кодирование символов

XML чувствителен к кодировке. Если в данных есть русские буквы или специальные символы (например, &, <, >), их нужно правильно экранировать.

Пример ошибки:


ЗаписьXML.ЗаписатьЭлемент("Описание", "Цена < 1000 руб."); // Ошибка: символ '<' не экранирован

Правильный вариант:


Текст = СтрЗаменить(СтрЗаменить("Цена < 1000 руб.", "&", "&"), "<", "<");

ЗаписьXML.ЗаписатьЭлемент("Описание", Текст);

2. Несоблюдение структуры (отсутствие закрывающих тегов)

Каждый открытый тег <Элемент> должен быть закрыт </Элемент>. Если забыть закрыть элемент, XML станет невалидным.

Пример ошибки:


ЗаписьXML.ЗаписатьНачалоЭлемента("Товар");

ЗаписьXML.ЗаписатьЭлемент("Наименование", "Молоко");

// Забыли закрыть тег "Товар"

Исправление:


ЗаписьXML.ЗаписатьНачалоЭлемента("Товар");

ЗаписьXML.ЗаписатьЭлемент("Наименование", "Молоко");

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

3. Несоответствие схеме XSD

Если XML должен соответствовать схеме (например, для отчётности в ФНС), любое отклонение приведёт к ошибке. Типичные проблемы:

  • 🔢 Неправильный тип данных (например, строка вместо числа).
  • 📌 Отсутствие обязательных атрибутов или элементов.
  • 📏 Неверная вложенность тегов.

Решение: всегда проверяйте XML через валидаторы (например, XML Validator или встроенные средства ).

☑️ Проверка XML перед отправкой

Выполнено: 0 / 4

4. Проблемы с кодировкой файла

По умолчанию сохраняет XML в кодировке Windows-1251, но многие внешние системы требуют UTF-8. Чтобы избежать проблем с отображением кириллицы, явно указывайте кодировку:


ЗаписьXML.ОткрытьФайл("C:\temp\товары.xml", "UTF-8");

Примеры реальных XML-файлов для 1С

Разберём несколько практических примеров XML-файлов, которые часто требуются в работе с .

1. XML для выгрузки номенклатуры

Простой файл с данными о товарах:


<?xml version="1.0" encoding="UTF-8"?>

<Товары>

<Товар Код="00001">

<Наименование>Молоко "Весёлый молочник" 1л</Наименование>

<Цена>65.50</Цена>

<ЕдиницаИзмерения>шт</ЕдиницаИзмерения>

</Товар>

<Товар Код="00002">

<Наименование>Хлеб "Бородинский"</Наименование>

<Цена>42.00</Цена>

<ЕдиницаИзмерения>шт</ЕдиницаИзмерения>

</Товар>

</Товары>

2. XML для обмена с Честный ЗНАК

Фрагмент файла для маркировки товаров:


<?xml version="1.0" encoding="UTF-8"?>

<Document

xmlns="urn:cbr-ru:ed:v2.0"

xmlns:ns2="urn:cbr-ru:ed:DocFlow:v2.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="urn:cbr-ru:ed:v2.0 ED101.xsd">

<Product>

<gtin>4607009234567</gtin>

<serial>ABCD1234567890</serial>

</Product>

</Document>

Обратите внимание на пространства имён (xmlns) — они обязательны для корректной обработки файла системой маркировки.

3. XML для импорта заказов из интернет-магазина

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


<?xml version="1.0" encoding="UTF-8"?>

<Заказы>

<Заказ Номер="1001" Дата="2026-05-20">

<Клиент>

<Имя>Иванов Иван</Имя>

<Телефон>+79123456789</Телефон>

</Клиент>

<Товары>

<Товар Артикул="MLK001" Количество="2"/>

<Товар Артикул="BRD001" Количество="1"/>

</Товары>

</Заказ>

</Заказы>

Как проверить XML на ошибки без валидатора?

Откройте файл в браузере (например, Chrome). Если есть ошибки в структуре, браузер покажет сообщение об этом.

Автоматизация обмена данными через XML

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

1. Настройка регламентного задания

Чтобы XML-файлы формировались и отправлялись автоматически, создайте регламентное задание:

  1. Откройте Администрирование → Поддержка и обслуживание → Регламентные задания.
  2. Создайте новое задание с типом Выполнение кода.
  3. Укажите расписание (например, ежедневно в 23:00).
  4. В коде задания вызовите процедуру формирования и отправки XML.

Пример кода для регламентного задания:


Процедура ВыполнитьОбмен() Экспорт

Попытка

СформироватьXMLТовары();

ОтправитьФайлНаСервер("C:\temp\товары.xml");

ЗаписатьЛог("Обмен выполнен успешно");

Исключение

ЗаписатьЛог("Ошибка обмена: " + ОписаниеОшибки());

КонецПопытки;

КонецПроцедуры

2. Интеграция с внешними системами

Для отправки XML на сервер можно использовать:

  • 📧 Электронную почту (через ПотокMail).
  • 🌐 HTTP-запросы (для REST API).
  • 📁 FTP/SFTP (для выгрузки в облачные хранилища).

Пример отправки XML через HTTP:


Процедура ОтправитьXMLНаСервер(ПутьКФайлу)

HTTPСоединение = Новый HTTPСоединение("api.example.com", 80);

Запрос = Новый HTTPЗапрос("/upload");

Запрос.УстановитьТелоИзФайла(ПутьКФайлу);

Запрос.УстановитьЗаголовок("Content-Type", "application/xml");

Ответ = HTTPСоединение.ВыполнитьЗапрос(Запрос);

Если Ответ.КодСостояния <> 200 Тогда

ВызватьИсключение "Ошибка отправки: " + Ответ.КодСостояния;

КонецЕсли;

КонецПроцедуры

3. Обработка ответа от сервера

Если внешняя система возвращает ответ в формате XML, его нужно корректно обработать. Пример parsing ответа:


Процедура ОбработатьОтветXML(ТекстОтвета)

ЧтениеXML = Новый ЧтениеXML;

ЧтениеXML.УстановитьСтроку(ТекстОтвета);

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

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

Если ЧтениеXML.Имя = "Статус" Тогда

Статус = ЧтениеXML.ПрочитатьЭлемент();

Сообщить("Статус обработки: " + Статус);

КонецЕсли;

КонецЕсли;

КонецЦикла;

КонецПроцедуры

💡

Для отладки HTTP-запросов используйте инструменты вроде Postman или Fiddler — они помогут увидеть, какой именно XML отправляется на сервер и что возвращается в ответ.

Сравнение методов работы с XML в 1С

Чтобы выбрать оптимальный способ работы с XML, сравним основные методы по ключевым критериям:

Критерий ЗаписьXML/ЧтениеXML XDTO Универсальные форматы
Сложность реализации Низкая (подходит для простых задач) Средняя (требует схемы XSD) Высокая (настройка правил обмена)
Производительность Низкая (ручная обработка) Высокая (оптимизированный механизм) Средняя (зависит от объёма данных)
Валидация данных Отсутствует (нужно проверять вручную) Автоматическая (по XSD) Автоматическая (встроенные проверки)
Поддержка сложных структур Ограничена (трудно управлять вложенностью) Полная (объектная модель) Полная (поддерживаются ссылки, коллекции)
Типичные задачи Простые выгрузки, тестирование Интеграция с внешними системами Обмен между базами 1С

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

💡

Для обмена с государственными системами (ФНС, Честный ЗНАК) всегда используйте XDTO или готовые обработки — это снизит риск ошибок при валидации.

Полезные обработки и внешние инструменты

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

1. Обработка «Универсальный обмен данными»

Входит в стандартную поставку 1С:Предприятие и позволяет:

  • 🔄 Настраивать правила обмена между базами.
  • 📂 Экспортировать/импортировать данные в формате XML или JSON.
  • 🔧 Гибко настраивать соответствия объектов.

Где найти: Файл → Открыть → [Папка с шаблонами 1С]\ExtForms\DataExchange.

2. Внешние библиотеки для работы с XML

Для сложных задач можно подключить сторонние библиотеки, например:

  • 📦 1C:XML — расширение для удобного parsing и формирования XML.
  • 🛠️ SimpleXML — упрощённая работа с XML через объектную модель.

Пример подключения внешней библиотеки:


#Использовать XMLTools

Процедура ИспользоватьВнешнююБиблиотеку()

XMLДокумент = Новый XMLTools.ДокументXML;

XMLДокумент.ЗагрузитьИзФайла("C:\temp\data.xml");

Сообщить(XMLДокумент.КорневойЭлемент.Наименование);

КонецПроцедуры

3. Валидаторы XML

Перед отправкой XML-файла в внешнюю систему проверьте его на корректность с помощью:

  • 🌐 Онлайн-валидаторы: XML Validation, W3C Validator.
  • 📁 Локальные инструменты: XML Notepad, Oxygen XML Editor.
  • 🔧 Встроенные средства (например, ПроверкаXMLСхемы()).

4. Конвертеры форматов

Если нужно преобразовать XML в другой формат (например, JSON или CSV), используйте:

  • 🔄 1C:JSON — для конвертации между XML и JSON.
  • 📊 ExcelXML — для импорта XML в Microsoft Excel.
💡

Для отладки сложных XSD-схем используйте инструмент XMLSpy — он визуализирует структуру и помогает находить ошибки.

FAQ: Частые вопросы по работе с XML в 1С

Как исправить ошибку "Недопустимый символ в XML"?

Эта ошибка возникает, когда в данных есть символы, которые не разрешены в XML (например, &, <, >) или проблема с кодировкой. Решения:

  1. Замените специальные символы на их XML-эквиваленты (&, <, >).
  2. Укажите правильную кодировку при сохранении файла (UTF-8).
  3. Используйте функцию СтрЗаменить() для экранирования.

Пример:

Текст = СтрЗаменить(Текст, "&", "&");
Можно ли в 1С сформировать XML без программирования?

Да, для простых задач можно использовать:

  • Универсальные отчёты (например, выгрузить данные в Excel, а затем сохранить как XML).
  • Обработку «Выгрузка данных» (входит в стандартные поставки некоторых конфигураций).
  • Конфигуратор — для экспорта объектов метаданных в XML.

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

Как загрузить данные из XML в 1С?

Для загрузки данных из XML в используйте объект ЧтениеXML. Пример:


Процедура ЗагрузитьXML(ПутьКФайлу)

ЧтениеXML = Новый ЧтениеXML;

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

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

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

Если ЧтениеXML.Имя = "Товар" Тогда

Код = ЧтениеXML.ПолучитьАтрибут("Код");

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

Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда

Если ЧтениеXML.Имя = "Наименование" Тогда

Наименование = ЧтениеXML.Значение;

КонецЕсли;

КонецЕсли;

КонецЦикла;

// Создать или обновить номенклатуру в 1С

Номенклатура = Справочники.Номенклатура.НайтиПоКоду(Код);

Если Номенклатура.Пустая() Тогда

Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();

Номенклатура.Код = Код;

КонецЕсли;

Номенклатура.Наименование = Наименование;

Номенклатура.Записать();

КонецЕсли;

КонецЕсли;

КонецЦикла;

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

КонецПроцедуры

Чем отличается XML от JSON в контексте 1С?

Основные различия:

Критерий XML JSON
Структура Иерархическая (теги, атрибуты) Плоская (ключ-значение)
Поддержка в 1С Полная