Работа с форматом XML в 1С:Предприятие — одна из самых востребованных задач при интеграции с внешними системами, бухгалтерскими сервисами или государственными порталами. Этот формат позволяет структурировать данные так, чтобы их могли «понимать» разные программы, от веб-сервисов до мобильных приложений. Однако многие пользователи и даже разработчики сталкиваются с трудностями: как правильно сформировать XML-файл, избежать ошибок валидации, автоматизировать выгрузку или загрузку данных?
В этой статье мы разберём все этапы работы с XML в 1С — от ручного создания простейшего файла до автоматизированного обмена с использованием встроенных механизмов платформы. Вы узнаете, какие инструменты есть в арсенале 1С для работы с XML, как избежать типичных ошибок при формировании структуры, и почему иногда проще использовать XDTO вместо прямой работы с ЗаписьXML. Материал будет полезен как начинающим пользователям, так и опытным программистам, которые хотят оптимизировать процессы обмена данными.
Что такое XML и зачем он нужен в 1С
XML (eXtensible Markup Language) — это текстовый формат, предназначенный для хранения и передачи структурированных данных. В контексте 1С:Предприятие он используется для:
- 📤 Выгрузки данных в внешние системы (например, для отправки отчётности в ФНС или обмена с интернет-магазинами).
- 📥 Загрузки данных из файлов или веб-сервисов (импорт прайс-листов, заказов клиентов).
- 🔄 Интеграции с другими программами (CRM, ERP, бухгалтерскими сервисами).
- 📑 Сохранения настроек или конфигураций (например, экспорт правил обмена).
Основное преимущество XML перед другими форматами (например, CSV или JSON) — это иерархическая структура и поддержка атрибутов, что позволяет описывать сложные данные с вложенными элементами. Например, в одном файле можно передать не только список товаров, но и их категории, свойства, цены и даже историю изменений.
В 1С работа с 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 в конфигурацию или указать путь к файлу схемы. Если схема изменится (например, обновится формат отчётности), код может перестать работать!
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 или встроенные средства 1С).
☑️ Проверка XML перед отправкой
4. Проблемы с кодировкой файла
По умолчанию 1С сохраняет XML в кодировке Windows-1251, но многие внешние системы требуют UTF-8. Чтобы избежать проблем с отображением кириллицы, явно указывайте кодировку:
ЗаписьXML.ОткрытьФайл("C:\temp\товары.xml", "UTF-8");
Примеры реальных XML-файлов для 1С
Разберём несколько практических примеров XML-файлов, которые часто требуются в работе с 1С.
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-файлы формировались и отправлялись автоматически, создайте регламентное задание:
- Откройте
Администрирование → Поддержка и обслуживание → Регламентные задания. - Создайте новое задание с типом
Выполнение кода. - Укажите расписание (например, ежедневно в 23:00).
- В коде задания вызовите процедуру формирования и отправки 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. Обработка «Универсальный обмен данными»
Входит в стандартную поставку 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.
- 🔧 Встроенные средства 1С (например,
ПроверкаXMLСхемы()).
4. Конвертеры форматов
Если нужно преобразовать XML в другой формат (например, JSON или CSV), используйте:
- 🔄 1C:JSON — для конвертации между XML и JSON.
- 📊 ExcelXML — для импорта XML в Microsoft Excel.
Для отладки сложных XSD-схем используйте инструмент XMLSpy — он визуализирует структуру и помогает находить ошибки.
FAQ: Частые вопросы по работе с XML в 1С
Как исправить ошибку "Недопустимый символ в XML"?
Эта ошибка возникает, когда в данных есть символы, которые не разрешены в XML (например, &, <, >) или проблема с кодировкой. Решения:
- Замените специальные символы на их XML-эквиваленты (
&,<,>). - Укажите правильную кодировку при сохранении файла (
UTF-8). - Используйте функцию
СтрЗаменить()для экранирования.
Пример:
Текст = СтрЗаменить(Текст, "&", "&");
Можно ли в 1С сформировать XML без программирования?
Да, для простых задач можно использовать:
- Универсальные отчёты (например, выгрузить данные в
Excel, а затем сохранить как XML). - Обработку «Выгрузка данных» (входит в стандартные поставки некоторых конфигураций).
- Конфигуратор — для экспорта объектов метаданных в XML.
Однако для сложных структур или автоматического обмена без программирования не обойтись.
Как загрузить данные из XML в 1С?
Для загрузки данных из XML в 1С используйте объект ЧтениеXML. Пример:
Процедура ЗагрузитьXML(ПутьКФайлу)
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Если ЧтениеXML.Имя = "Товар" Тогда
Код = ЧтениеXML.ПолучитьАтрибут("Код");
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
Если ЧтениеXML.Имя = "Наименование" Тогда
Наименование = ЧтениеXML.Значение;
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Создать или обновить номенклатуру в 1С
Номенклатура = Справочники.Номенклатура.НайтиПоКоду(Код);
Если Номенклатура.Пустая() Тогда
Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
Номенклатура.Код = Код;
КонецЕсли;
Номенклатура.Наименование = Наименование;
Номенклатура.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЧтениеXML.Закрыть();
КонецПроцедуры
Чем отличается XML от JSON в контексте 1С?
Основные различия:
| Критерий | XML | JSON |
|---|---|---|
| Структура | Иерархическая (теги, атрибуты) | Плоская (ключ-значение) |
| Поддержка в 1С | Полная |