К статье
Практический материал

Разработка и Конфигурация · 12 мин

Как прочитать XML в 1С: пошаговое руководство с примерами

Разбираем, как прочитать XML в 1С: ЧтениеXML, XDTO, DOM-модель, чтение выгрузок конфигуратора. Примеры кода, типичные ошибки, проверка результата и FAQ.

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

Под словом «прочитать» скрываются две разные задачи. Первая — открыть файл и увидеть его структуру и данные глазами. Вторая — программно разобрать XML встроенными средствами платформы и превратить его в объекты информационной базы. В этой статье рассмотрены оба сценария: от простого просмотра до чтения через ЧтениеXML, XDTO и DOM-модель.

Платформа 1С:Предприятие 8 имеет три основных механизма чтения XML: последовательное чтение через объект ЧтениеXML, объектную модель документа (DOM) и фабрику XDTO для работы по схеме. Выбор зависит от размера файла, наличия схемы и того, что нужно сделать с данными дальше.

Как определить, что за XML-файл перед вами

Прежде чем писать код, откройте файл и посмотрите на его структуру. XML из мира 1С бывает нескольких типов, и от этого зависит способ чтения. Файл выгрузки из конфигуратора (выгрузка справочника или документа через «Выгрузить в файл») обычно содержит корневой элемент вроде <_1CV8DtUD> или узлы с описанием объектов конфигурации. Файл обмена по правилам конвертации данных начинается с узла <ФайлОбмена>. Электронные документы (УПД, счета-фактуры) имеют свои утверждённые форматы с русскоязычными тегами.

Обратите внимание на первую строку — декларацию вида <?xml version="1.0" encoding="UTF-8"?>. Из неё видна кодировка файла: если она не UTF-8, а, например, windows-1251, при чтении это нужно учитывать, иначе русские буквы превратятся в нечитаемые символы.

Размер файлаДесятки мегабайт и больше

Используйте последовательное чтение ЧтениеXML, DOM может не влезть в память

Корневой узел ФайлОбменаФайл конвертации данных

Проще загрузить типовой обработкой «Универсальный обмен данными в формате XML»

Есть схема (XSD)Формат описан формально

Оптимально читать через ФабрикуXDTO

Кодировка в декларацииUTF-8 или windows-1251

Укажите кодировку при открытии файла, если она отличается от UTF-8

Как просто посмотреть содержимое XML-файла

Если задача — только увидеть, что внутри, программировать ничего не нужно. Любой современный браузер открывает XML с подсветкой и сворачиваемыми узлами: перетащите файл в окно браузера и разворачивайте элементы. Для больших файлов браузер может подтормаживать, тогда удобнее текстовый редактор с подсветкой синтаксиса, например Notepad++ или VS Code.

Есть и способ внутри 1С без написания кода. В режиме «1С:Предприятие» во многих конфигурациях доступна типовая обработка «Универсальный обмен данными в формате XML» — она загружает файлы, подготовленные по правилам конвертации. Для произвольного XML можно открыть файл через меню «Файл — Открыть» в толстом клиенте: платформа покажет его как текст.

Если XML пришёл внутри другого контейнера (например, вложен в ZIP-архив или закодирован в Base64 внутри другого XML), сначала извлеките его: архив распаковывается стандартными средствами, а Base64 в 1С декодируется через объект Base64Значение.

Чтение XML программно: объект ЧтениеXML

ЧтениеXML — основной инструмент последовательного разбора. Объект читает файл узел за узлом, не загружая документ целиком в память, поэтому подходит для больших выгрузок. Типовой цикл выглядит так: открыть файл, затем в цикле вызывать Прочитать() и анализировать тип текущего узла — начало элемента, текст, конец элемента.

Минимальный пример чтения файла:

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

Чтение.ОткрытьФайл("C:\Обмен\data.xml");

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

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

ИмяУзла = Чтение.Имя;

// обработка начала элемента

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

Значение = Чтение.Значение;

КонецЕсли;

КонецЦикла;

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

Когда структура документа известна, удобнее использовать методы ПрочитатьНачалоЭлемента(), ПрочитатьЗначение() и атрибуты: Чтение.ПолучитьАтрибут("Код") вернёт значение атрибута текущего узла. Для чтения XML из строки вместо файла используется Чтение.УстановитьСтроку(СтрокаXML).

bsl
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ИмяФайла);
Пока Чтение.Прочитать() Цикл
    Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
        Сообщить(Чтение.Имя);
    КонецЕсли;
КонецЦикла;
Чтение.Закрыть();

Чтение через DOM: весь документ в памяти

DOM-подход (объект ЧтениеDOM и построитель ПостроительDOM) загружает документ целиком и даёт доступ к любому узлу по пути, как к дереву. Это удобно, когда нужно многократно обращаться к разным частям документа, искать узлы по условию или структура сложная и вложенная.

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

Чтение.ОткрытьФайл("C:\Обмен\data.xml");

Построитель = Новый ПостроительDOM;

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

Узлы = Документ.ПолучитьЭлементыПоИмени("Номенклатура");

Для Каждого Узел Из Узлы Цикл

Наименование = Узел.ПолучитьАтрибут("Наименование");

КонецЦикла;

Ограничение очевидно: весь документ находится в оперативной памяти. Файл в сотни мегабайт может привести к ошибке нехватки памяти или аварийному завершению сеанса. Для больших выгрузок DOM не подходит — используйте последовательное чтение.

Чтение через XDTO: когда есть схема

Механизм XDTO (XML Data Transfer Objects) работает по схеме: платформа сопоставляет элементы XML с типами, описанными в XSD, и вы получаете объект с типизированными свойствами вместо ручного разбора строк. Это основной способ работы с формализованными форматами — электронными документами, ответами веб-сервисов, EnterpriseData.

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

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

Чтение.ОткрытьФайл("C:\Обмен\upd.xml");

ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(Чтение);

НомерДокумента = ОбъектXDTO.Документ.Номер;

Если у вас есть XSD-схема формата, создайте фабрику из неё: Новый ФабрикаXDTO(Новый ЧтениеСхемыXML...) — тогда платформа проверит документ на соответствие схеме и даст доступ ко всем описанным типам. Без схемы фабрика прочитает документ в «свободную» объектную модель, где типы значений определяются автоматически.

Сравнение способов чтения

ЧтениеXML

Последовательный разбор, минимум памяти. Подходит для больших файлов, но код разбора пишется вручную

DOM (ЧтениеDOM)

Весь документ в памяти, удобная навигация по дереву. Для небольших и средних файлов со сложной структурой

ФабрикаXDTO

Чтение по схеме в типизированные объекты. Лучший выбор для формализованных форматов, требует схемы или известной структуры

Типовая обработка обмена

Без программирования, но только для файлов конвертации данных в формате CD/ED

Чтение типовых выгрузок и обменов 1С

Отдельный частый случай — файл, полученный из другой базы 1С. Если это обмен по правилам конвертации данных (корневой узел ФайлОбмена), не пишите свой парсер: откройте в базе-приёмнике обработку «Универсальный обмен данными в формате XML», укажите файл на закладке «Загрузка данных» и выполните загрузку. Обработка сама разберёт структуру, сопоставит объекты и покажет статистику загруженных данных.

Если это выгрузка в формате EnterpriseData (обмен через БСП, узлы ОбъектXDTO-модели), загрузка обычно выполняется штатной настройкой синхронизации данных в разделе администрирования. Ручной разбор таких файлов оправдан только для диагностики: например, чтобы найти, какой объект не загружается, файл можно открыть в редакторе и поискать по тексту сообщение об ошибке из регистрации обмена.

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

Порядок действий при загрузке XML в базу
  1. 1
    Сделайте резервную копию базы или разверните копию для теста
  2. 2
    Откройте файл в браузере или редакторе, определите тип формата по корневому узлу
  3. 3
    Выберите способ: типовая обработка обмена, ЧтениеXML, DOM или XDTO
  4. 4
    Выполните чтение/загрузку на копии и проверьте количество и корректность объектов
  5. 5
    Только после успешной проверки повторите загрузку в рабочей базе

Типичные ошибки и как их избежать

Самая частая проблема — «Ошибка разбора XML» с указанием позиции. Причины: файл обрезан при передаче, внутри есть недопустимые символы (управляющие символы, неэкранированный амперсанд & в тексте), неверная кодировка. Откройте файл в редакторе и перейдите к указанной в ошибке позиции — обычно проблема видна невооружённым глазом.

Вторая группа ошибок — логические: данные прочитаны, но записаны неправильно. Например, даты в XML идут в формате ISO «2026-01-15T10:30:00», и при присвоении строки реквизиту типа «Дата» нужно использовать XMLЗначение(Тип("Дата"), Строка), а не прямое присваивание. Аналогично ссылки ищутся по GUID через Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(ГУИД)), и перед записью стоит проверять, что ссылка существует.

Типичные ошибки
01
Чтение большого файла через DOM — нехватка памяти и падение сеанса; используйте последовательное ЧтениеXML
02
Игнорирование кодировки файла — русский текст превращается в кракозябры; проверьте декларацию XML и укажите кодировку при открытии
03
Прямое присваивание строк датам и числам — значения записываются пустыми или неверными; используйте XMLЗначение для преобразования
04
Загрузка в рабочую базу без копии — ошибка в файле массово портит данные; всегда тестируйте на копии
05
Разбор файла конвертации данных собственным кодом — дублирование готового механизма; используйте типовую обработку обмена

Как проверить результат чтения

После программного чтения убедитесь, что разобраны все узлы: сравните количество обработанных элементов с ожидаемым (например, число строк в файле можно оценить поиском по имени повторяющегося тега в редакторе). Если счётчик меньше — где-то в цикле узел пропускается, чаще всего из-за неучтённой вложенности.

При загрузке в базу проверяйте не только количество, но и качество: откройте несколько созданных объектов, сверьте ключевые реквизиты с источником, убедитесь, что ссылки разрешились в реальные объекты, а не в «битые» ссылки вида «Объект не найден».

Контрольные точки

Как проверить результат

Количество прочитанных элементов
Норма

Совпадает с количеством в файле

Тревожный признак

Меньше ожидаемого — часть узлов пропущена в цикле

Даты и числа в объектах
Норма

Значения соответствуют источнику

Тревожный признак

Пустые даты или нули — неверное преобразование типов

Ссылочные реквизиты
Норма

Открываются реальные объекты

Тревожный признак

«Объект не найден» — ссылка не сопоставлена

Русский текст
Норма

Читаемые строки

Тревожный признак

Кракозябры — неверная кодировка при чтении

Частые вопросы

Чем открыть XML-файл из 1С без программирования?

Достаточно браузера: перетащите файл в окно Chrome, Edge или Firefox — дерево элементов отобразится с возможностью сворачивания узлов. Для больших файлов удобнее редакторы вроде Notepad++ с подсветкой синтаксиса и поиском по тексту.

Что делать, если при чтении возникает «Ошибка разбора XML»?

Проверьте три вещи: не обрезан ли файл (сравните размер с источником), нет ли в тексте неэкранированных символов &, <, >, и совпадает ли реальная кодировка файла с указанной в декларации. Позиция ошибки в сообщении указывает на проблемное место.

Как прочитать XML, который лежит внутри ZIP-архива?

Программно — через объект ЧтениеZipФайла: откройте архив, извлеките элемент во временный каталог и дальше читайте как обычный XML. Вручную архив распаковывается любым архиватором.

Чем XDTO лучше ручного разбора через ЧтениеXML?

XDTO избавляет от ручного отслеживания вложенности узлов: вы обращаетесь к данным как к свойствам объекта, а платформа сама проверяет соответствие схеме и типы значений. Ручной разбор оправдан, когда схемы нет, а структура файла простая или нестабильная.

Можно ли прочитать XML из строки, а не из файла?

Да. У ЧтениеXML есть метод УстановитьСтроку(СтрокаXML), после которого разбор идёт так же, как из файла. Это стандартный приём при работе с ответами веб-сервисов и HTTP-запросов, где XML приходит телом ответа.

Почему после загрузки в реквизитах «Объект не найден»?

Значит, в XML была ссылка на объект, которого нет в базе-приёмнике, и сопоставление не сработало. Проверьте, загружены ли связанные объекты (например, контрагент до загрузки договоров), и не изменились ли GUID при переносе данных нештатными способами.

Итог

Что важно запомнить

Сначала определите тип XML-файла по корневому узлу и кодировке, затем выберите инструмент: ЧтениеXML для больших файлов, DOM для удобной навигации, XDTO для форматов со схемой, типовую обработку — для файлов обмена. Любую загрузку в базу проверяйте на копии и контролируйте количество и качество записанных объектов.