Разработка и Конфигурация · 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»
Оптимально читать через ФабрикуXDTO
Укажите кодировку при открытии файла, если она отличается от 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).
Чтение = Новый Чтение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...) — тогда платформа проверит документ на соответствие схеме и даст доступ ко всем описанным типам. Без схемы фабрика прочитает документ в «свободную» объектную модель, где типы значений определяются автоматически.
Сравнение способов чтения
Последовательный разбор, минимум памяти. Подходит для больших файлов, но код разбора пишется вручную
Весь документ в памяти, удобная навигация по дереву. Для небольших и средних файлов со сложной структурой
Чтение по схеме в типизированные объекты. Лучший выбор для формализованных форматов, требует схемы или известной структуры
Без программирования, но только для файлов конвертации данных в формате CD/ED
Чтение типовых выгрузок и обменов 1С
Отдельный частый случай — файл, полученный из другой базы 1С. Если это обмен по правилам конвертации данных (корневой узел ФайлОбмена), не пишите свой парсер: откройте в базе-приёмнике обработку «Универсальный обмен данными в формате XML», укажите файл на закладке «Загрузка данных» и выполните загрузку. Обработка сама разберёт структуру, сопоставит объекты и покажет статистику загруженных данных.
Если это выгрузка в формате EnterpriseData (обмен через БСП, узлы ОбъектXDTO-модели), загрузка обычно выполняется штатной настройкой синхронизации данных в разделе администрирования. Ручной разбор таких файлов оправдан только для диагностики: например, чтобы найти, какой объект не загружается, файл можно открыть в редакторе и поискать по тексту сообщение об ошибке из регистрации обмена.
Файлы выгрузки конфигурации (.cf, .dt) — это не XML, их нельзя прочитать описанными способами: они загружаются только через конфигуратор. Не путайте их с XML-выгрузкой данных.
- 1Сделайте резервную копию базы или разверните копию для теста
- 2Откройте файл в браузере или редакторе, определите тип формата по корневому узлу
- 3Выберите способ: типовая обработка обмена, ЧтениеXML, DOM или XDTO
- 4Выполните чтение/загрузку на копии и проверьте количество и корректность объектов
- 5Только после успешной проверки повторите загрузку в рабочей базе
Типичные ошибки и как их избежать
Самая частая проблема — «Ошибка разбора XML» с указанием позиции. Причины: файл обрезан при передаче, внутри есть недопустимые символы (управляющие символы, неэкранированный амперсанд & в тексте), неверная кодировка. Откройте файл в редакторе и перейдите к указанной в ошибке позиции — обычно проблема видна невооружённым глазом.
Вторая группа ошибок — логические: данные прочитаны, но записаны неправильно. Например, даты в XML идут в формате ISO «2026-01-15T10:30:00», и при присвоении строки реквизиту типа «Дата» нужно использовать XMLЗначение(Тип("Дата"), Строка), а не прямое присваивание. Аналогично ссылки ищутся по GUID через Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(ГУИД)), и перед записью стоит проверять, что ссылка существует.
Как проверить результат чтения
После программного чтения убедитесь, что разобраны все узлы: сравните количество обработанных элементов с ожидаемым (например, число строк в файле можно оценить поиском по имени повторяющегося тега в редакторе). Если счётчик меньше — где-то в цикле узел пропускается, чаще всего из-за неучтённой вложенности.
При загрузке в базу проверяйте не только количество, но и качество: откройте несколько созданных объектов, сверьте ключевые реквизиты с источником, убедитесь, что ссылки разрешились в реальные объекты, а не в «битые» ссылки вида «Объект не найден».
Как проверить результат
Совпадает с количеством в файле
Меньше ожидаемого — часть узлов пропущена в цикле
Значения соответствуют источнику
Пустые даты или нули — неверное преобразование типов
Открываются реальные объекты
«Объект не найден» — ссылка не сопоставлена
Читаемые строки
Кракозябры — неверная кодировка при чтении
Частые вопросы
Чем открыть 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 для форматов со схемой, типовую обработку — для файлов обмена. Любую загрузку в базу проверяйте на копии и контролируйте количество и качество записанных объектов.