Как использовать XML‑файлы в 1С для обмена данными: импорт и экспорт отчетов
Обновлено:
Узнайте, как в 1С работать с XML‑файлами: чтение, запись, импорт‑экспорт, валидация по XSD и оптимизация обмена данными для быстрой и надёжной интеграции.
Работа с XML в 1С: основы
Чтение XML‑документов
XML‑файлы часто приходят в виде выгрузки из сторонних систем – бухгалтерских, CRM, складских. В 1С их удобно читать через встроенный объект XMLReader или через DOMParser. Первый вариант позволяет последовательно просматривать узлы, что экономит память при обработке больших файлов. Пример чтения списка контрагентов:

Читатель = Новый XMLReader;
Если Читатель.УстановитьПутьКФайлу("Контрагенты.xml") Тогда
Пока Читатель.Прочитать() Цикл
Если Читатель.ИмяТекущегоЭлемента = "Контрагент" И Читатель.ТипУзла = ТипУзла.Элемент Тогда
// получаем атрибуты и вложенные элементы
Идентификатор = Читатель.ПолучитьЗначениеАтрибута("id");
Наименование = Читатель.ПрочитатьТекст();
// сохраняем в справочник
Новый Контрагент(Идентификатор, Наименование);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если требуется произвести более сложный поиск, удобно загрузить весь документ в DOMDocument и пользоваться XPath‑запросами:
Док = Новый XMLDocument;
Док.Загрузить("Контрагенты.xml");
Контрагенты = Док.SelectNodes("//Контрагент[Статус='Активный']");
Для Каждого Кт Из Контрагенты Цикл
// работа с узлом Кт
КонецЦикла;
Запись данных в XML
Для экспорта отчетов, реестров или любых табличных данных 1С предоставляет класс XMLWriter. Он формирует документ «на лету», поэтому не требует предварительной загрузки всей структуры в память. Ниже – типовой шаблон создания XML‑файла со списком товаров:
Запись = Новый XMLWriter;
Запись.УстановитьПутьКФайлу("Товары.xml");
Запись.СтартДокумента();
Запись.СтартЭлемента("Товары");
Для Каждого Товар Из Справочник.Товары Цикл
Запись.СтартЭлемента("Товар");
Запись.ЗаписатьАтрибут("Код", Товар.Код);
Запись.ЗаписатьЭлемент("Наименование", Товар.Наименование);
Запись.ЗаписатьЭлемент("Цена", Формат(Товар.Цена, "ЧГ=2"));
Запись.КонецЭлемента(); // Товар
КонецЦикла;
Запись.КонецЭлемента(); // Товары
Запись.КонецДокумента();
Запись.Закрыть();
При необходимости добавить комментарии или CDATA‑блоки, методы ЗаписатьКомментарий и ЗаписатьCDATA позволяют добавить дополнительные метаданные без нарушения структуры.
Работа с атрибутами и элементами
В XML‑документах часто используется комбинация атрибутов (для идентификации) и вложенных элементов (для детализированных данных). В 1С атрибуты читаются через методы ПолучитьЗначениеАтрибута и ЗаписатьАтрибут, а элементы – через ПрочитатьТекст или ЗаписатьЭлемент. Ниже – таблица сравнения типовых подходов к работе с атрибутами и элементами.
| Сценарий | Атрибут | Элемент |
|---|---|---|
| Идентификатор записи | Кратко, уникально, не содержит пробелов (например, id=“123”) | Не рекомендуется, усложняет парсинг |
| Текстовое описание | Ограничено длиной, не подходит для многострочного текста | Поддерживает любые символы, удобно для длинных описаний |
| Сериализация дат | Часто в формате date=“2025-03-15” | Можно использовать отдельный элемент <Дата>2025-03-15</Дата> |
Выбирайте атрибуты для коротких, неизменяемых свойств, а элементы – для более сложных или объёмных данных. При импорте/экспорте важно поддерживать согласованность формата, чтобы избежать потери информации.
Импорт и экспорт XML в 1С 8.3
Настройка загрузки XML
Для корректного импорта XML‑данных в 1С 8.3 необходимо правильно настроить обработку файлов. Самый надёжный способ – использовать объект XMLDocument, который позволяет парсить документ, проверять его структуру и получать доступ к узлам через XPath.
Пошаговый порядок настройки:
- Создайте обработку или внешнюю обработку, в которой будет реализована загрузка.
- В свойствах обработки укажите путь к схеме XSD, если она доступна. Это обеспечит автоматическую валидацию.
- В коде обработчика откройте файл через
New XMLDocument, загрузите его методомLoadи проверьте свойствоIsValid. - Сопоставьте узлы XML с полями справочников/документов, используя
GetNodeиValue.
Пример кода, иллюстрирующий процесс загрузки:
XMLDoc = New XMLDocument; XMLDoc.Load(“C:\import\data.xml”); Если XMLDoc.IsValid Тогда КорректныеДанные = XMLDoc.SelectNodes("//Документ/Строка"); Для Каждого Строка Из КорректныеДанные Цикл // Пример маппинга полей НовыйДокумент = Документы.Продажа.СоздатьДокумент(); НовыйДокумент.Дата = Строка.GetNode(“Дата”).Value; НовыйДокумент.Сумма = Строка.GetNode(“Сумма”).Value; НовыйДокумент.Записать(); КонецЦикла; КонецЕсли;
Создание выгрузки XML‑отчётов
Выгрузка отчётов в XML обычно происходит в два этапа: формирование набора данных и их сериализация в файл. В 1С 8.3 есть готовый механизм XMLWriter, который позволяет писать корректный XML без ручного формирования строк.
Ключевые рекомендации:
- Определите структуру выходного файла заранее – это облегчает парсинг на принимающей стороне.
- Используйте атрибуты только при необходимости, они упрощают чтение, но могут усложнять валидацию.
- Для больших объёмов данных применяйте потоковую запись, чтобы не перегружать оперативную память.
Ниже пример генерации XML‑отчёта о продажах за выбранный период:
Writer = New XMLWriter; Writer.WriteStartDocument(); Writer.WriteStartElement(“ОтчетПродаж”); Writer.WriteAttributeString(“ДатаНачала”, НачальнаяДата); Writer.WriteAttributeString(“ДатаОкончания”, КонечнаяДата);
Для Каждого Строка Из Выборка Цикл Writer.WriteStartElement(“Продажа”); Writer.WriteElementString(“Номер”, Строка.Номер); Writer.WriteElementString(“Дата”, Формат(Строка.Дата, “ДФ”)); Writer.WriteElementString(“Сумма”, Строка.Сумма); Writer.WriteEndElement(); // Продажа КонецЦикла;
Writer.WriteEndElement(); // ОтчетПродаж Writer.WriteEndDocument(); Writer.Save(“C:\export\sales_report.xml”);
Обработка ошибок импорта
При загрузке XML‑файлов часто возникают ошибки, связанные с несоответствием схемы, неправильными типами данных или дублированием записей. Чтобы система оставалась надёжной, рекомендуется реализовать централизованную обработку исключений и вести журнал ошибок.
Пример типовых ошибок и способы их устранения:
| Код ошибки | Описание | Рекомендация |
|---|---|---|
| XML001 | Файл не соответствует XSD‑схеме | Проверить соответствие полей, исправить структуру XML, обновить схему. |
| XML002 | Неверный формат даты | Использовать функцию StringToDate с указанием формата. |
| XML003 | Дублирование ключевого поля | Перед записью выполнить проверку НайтиПоКоду и решить, обновлять запись или пропустить. |
| XML004 | Отсутствие обязательного узла | Ввести проверку наличия узла перед чтением, добавить в журнал и продолжить импорт. |
Типовой обработчик исключений может выглядеть так:
Попытка // Основной код импорта Исключение Ошибка = СведенияОбОшибке(); ЖурналОшибок.Добавить(Ошибка.Описание, Ошибка.Категория); Сообщить(“Импорт остановлен: " + Ошибка.Описание); КонецПопытки;
Регулярно просматривайте журнал, отбирайте повторяющиеся проблемы и вносите изменения в процесс загрузки. Это уменьшит количество ручных корректировок и повысит стабильность обмена данными.
Валидация XML‑данных в 1С
Подключение XML‑валидатора
Для начала работы с валидацией необходимо добавить в конфигурацию компоненту XMLValidator. Это делается через Конфигуратор → Сервис → Подключаемые компоненты. После установки появляется глобальная процедура ValidateXML(ТекстXML, ПутьКСхеме), к которой можно обращаться из обработок и внешних отчетов.

Пример простого вызова:
ТекстXML = Файлы.ПрочитатьТекст("C:\Temp\report.xml");
ПутьКСхеме = "C:\Schemas\report.xsd";
Результат = ValidateXML(ТекстXML, ПутьКСхеме);
Если Результат = НеОпределено Тогда
Сообщить("XML прошёл проверку");
Иначе
Сообщить("Найдены ошибки: " + Результат);
КонецЕсли;
Важно, чтобы путь к XSD‑файлу был доступен под учетной записью сервера 1С. При работе в облаке рекомендуется размещать схемы в общем каталоге конфигурации.
Проверка по XSD‑схеме
Сама проверка делится на два этапа: загрузка схемы и валидация документа. При первом запуске компонент автоматически кэширует XSD‑файл, что ускоряет последующие запросы.
- Загрузка схемы –
XMLValidator.LoadSchema(ПутьКСхеме). В случае ошибки загрузки система выдаёт детальное сообщение о недоступных типах или несоответствиях пространств имен. - Валидация –
XMLValidator.Validate(ТекстXML). Возвращаемое значение – списокXMLValidationError, где каждый элемент содержит строку, колонку и описание проблемы.
Для массовой обработки отчетов часто используют цикл, где схема подгружается один раз, а проверка вызывается для каждого файла:
Схема = XMLValidator.LoadSchema("C:\Schemas\report.xsd");
Для Каждого Файл Из Файлы.ПолучитьСписок("C:\Exports\*.xml") Цикл
Текст = Файлы.ПрочитатьТекст(Файл);
Ошибки = XMLValidator.Validate(Текст);
Если Ошибки <> НеОпределено Тогда
// дальше обработка ошибок (см. раздел «Логирование нарушений»)
КонецЕсли;
КонецЦикла;
Логирование нарушений
Для контроля качества обмена важно фиксировать каждое отклонение от схемы. В 1С это удобно делать через регистр сведений ВалидацияXML_Журнал, где сохраняются основные детали ошибки и ссылка на исходный файл.
| Поле | Описание |
|---|---|
| Дата | Дата и время обнаружения ошибки |
| Файл | Имя проверяемого XML‑файла |
| Строка | Номер строки, где возникло несоответствие |
| Колонка | Позиция в строке |
| Описание | Текстовое сообщение валидатора |
Запись в журнал выглядит так:
Запись = ВалидацияXML_Журнал.СоздатьЗапись();
Запись.Дата = ТекущаяДата();
Запись.Файл = Файл;
Запись.Строка = Ошибка.Строка;
Запись.Колонка = Ошибка.Колонка;
Запись.Описание = Ошибка.Сообщение;
Запись.Записать();
Регулярный просмотр журнала позволяет быстро реагировать на изменения форматов данных у контрагентов и поддерживать устойчивый процесс интеграции.
Оптимизация обмена XML‑сообщениями
Сокращение размера файлов
Большинство обменов данными в 1С происходит через XML‑файлы, которые могут быстро «разрастаться», особенно при передаче больших табличных частей. Сокращение объёма уменьшает нагрузку на сеть, ускоряет чтение/запись и снижает риск таймаутов.

Основные приёмные:
- Удаление пустых элементов и атрибутов. В 1С легко настроить выгрузку так, чтобы генерировались только заполненные поля.
- Сжатие данных. Применяйте GZIP или ZIP‑архивы непосредственно к XML‑файлу перед отправкой; 1С поддерживает работу с архивами через
Объект.ЗначениеИзАрхива. - Использование коротких имён тегов. Вместо
<НаименованиеТовара>можно применять<NТ>, если обе стороны согласовали схему. - Замена повторяющихся строк таблиц на ссылки. Создайте отдельный словарь (например, список статусов) и в основной таблице храните только идентификатор.
Пример до и после оптимизации:
| Состояние | Размер (байт) | Примечание |
|---|---|---|
| Исходный XML | 124 560 | Полные имена тегов, пустые атрибуты |
| После удаления пустых элементов | 102 340 | -6 % объёма |
| После сжатия GZIP | 28 900 | Сокращение более 75 % |
Кеширование схем
Каждый раз, когда 1С читает входящий XML, она проверяет соответствие схеме (XSD). При больших объёмах запросов постоянный парсинг схемы заметно тормозит. Кеширование решает эту проблему.
Как реализовать:
- Сохраните объект
СхемаXMLв глобальном контексте (например, вОбъект.Значение). - При первом получении сообщения загрузите XSD из файловой системы или из конфигурации и поместите его в кеш.
- Для последующих сообщений используйте уже загруженную схему, передавая её в функцию
ПроверитьСтруктуруXML(ТекстXML, Схема).
Плюсы кеширования:
— снижение времени валидации до 30 %; — уменьшение нагрузки на процессор; — более предсказуемое время отклика, что критично при интеграциях в реальном времени.
Вопросы и ответы
Как прочитать большой XML‑файл в 1С без перегрузки памяти?
Для последовательного чтения используйте объект XMLReader. Он читает узлы один за другим, что позволяет обрабатывать файлы любого размера, не загружая весь документ в память.
Когда следует переключаться с XMLReader на DOMDocument?
Если требуется выполнять сложный поиск, использовать XPath‑запросы или работать с узлами несколькими способами, загрузите документ в XMLDocument (DOM) после предварительной валидации.
Как сформировать XML‑файл «на лету» в 1С?
Для потоковой записи используйте класс XMLWriter. Он открывает файл, пишет элементы и атрибуты по мере обхода данных, не требуя полной загрузки структуры в память.
В каких случаях лучше хранить данные в атрибутах, а в каких — в элементах?
Атрибуты подходят для коротких, неизменяемых значений (идентификаторы, коды). Элементы лучше использовать для длинных текстов, многострочных описаний и дат, когда требуется поддержка любых символов.
Как проверить XML‑файл по XSD‑схеме в 1С?
Подключите компоненту XMLValidator и вызовите ValidateXML(ТекстXML, ПутьКСхеме). Функция вернёт список ошибок XMLValidationError или НеОпределено, если проверка пройдена.
Как организовать журнал ошибок импорта XML?
Создайте регистр сведений (например, ВалидацияXML_Журнал**) и при возникновении исключения заполняйте его полями: дата, файл, строка, колонка, описание. Это обеспечивает постоянный контроль и быстрый поиск повторяющихся проблем.
**
Как уменьшить размер передаваемых XML‑сообщений?
Удаляйте пустые элементы и атрибуты, используйте короткие имена тегов, заменяйте повторяющиеся строки словарём, а затем сжимайте файл с помощью GZIP или ZIP перед отправкой.
Как ускорить валидацию больших объёмов XML‑сообщений?
Кешируйте объект XSD‑схемы в глобальном контексте (например, Объект.Значение) и используйте его повторно для всех сообщений. Это сокращает время загрузки схемы до 30 % и уменьшает нагрузку на процессор.
**










