Работа с XML-файлами в 1С 8.3: от просмотра до разбора встроенным языком
Содержание
Чтобы просто посмотреть XML-файл, 1С не нужна: его открывает любой браузер, Notepad++ или VS Code. Чтобы загрузить XML
в 1С, способ зависит от того, что внутри файла: УПД от поставщика грузят через ЭДО-команды в списке документов поступления, выгрузку из другой базы — обработкой «Выгрузка и загрузка данных XML» или синхронизацией, а нестандартный файл разбирают кодом через ЧтениеXML или ПостроительDOM.
Поэтому первый шаг всегда один: открыть файл любым просмотрщиком и понять, какой это формат. Дальше путь выбирается за минуту.
Чем открыть и посмотреть XML без 1С
XML — обычный текст с тегами. Для просмотра подойдёт любая программа, которая показывает текст, но удобнее те, что умеют сворачивать узлы и подсвечивать ошибки.
| Программа | Что умеет | Когда брать |
|---|---|---|
| Браузер (Chrome, Edge, Firefox) | Показывает дерево узлов, сворачивает ветки, сообщает о битой разметке | Быстро глянуть файл до 50–100 МБ |
| Notepad++ + плагин XML Tools | Форматирование (Pretty print), проверка синтаксиса, смена кодировки | Найти ошибку в файле, исправить вручную |
| VS Code + расширение для XML | Подсветка, сворачивание, проверка по XSD-схеме | Разработчику, сверка со схемой |
| Excel (Данные → Получить данные → Из XML) | Превращает повторяющиеся узлы в таблицу | Посмотреть список товаров или строк как таблицу |
| Блокнот Windows | Только текст | Если ничего другого нет под рукой |
💡 Если браузер пишет, что у файла нет таблицы стилей, это не ошибка. Он просто сообщает, что покажет «сырое» дерево тегов без оформления.
Не сохраняйте XML из Excel обратно, если файл потом пойдёт в 1С. Excel меняет структуру и кодировку, и загрузка почти наверняка сломается.
Как понять, что за файл перед вами
Откройте файл и посмотрите первые 2–3 строки и имя корневого элемента:
- 📄 Имя файла начинается с
ON_NSCHFDOPPR,ON_TOVTORGPR,DP_REZRUISP— электронный документ по формату ФНС: УПД, накладная, акт. Обычно в кодировкеwindows-1251. - 🔄 Корневой элемент
ФайлОбмена— выгрузка обработкой универсального обмена по правилам конвертации. - 📦 Корневой элемент
V8Exch:_1CV8DtUD— выгрузка универсальной обработкой «Выгрузка и загрузка данных XML». - 🛒 Файлы
import.xmlиoffers.xml, кореньКоммерческаяИнформация— формат CommerceML, обмен с интернет-магазином. - 🧩 Файл
Configuration.xmlв папке с подкаталогами — выгрузка конфигурации в файлы из Конфигуратора. - ❓ Свой корневой тег — файл от банка, маркетплейса, сторонней программы. Его загружают специальной обработкой или кодом.
Какой способ загрузки выбрать
Сводка, чтобы не перебирать варианты вслепую:
Загрузка XML в 1С:Предприятие штатными механизмами
В типовых конфигурациях на БСП (Бухгалтерия 3.0, УТ 11, ЗУП 3.1, КА, ERP) XML загружают не «открытием файла», а через конкретный механизм, который знает формат.
Электронные документы поставщика
Счёт-фактуру, УПД или акт в формате ФНС поставщик может прислать файлом по почте, а не через оператора ЭДО. В Бухгалтерии 3.0 такой файл грузят из списка Покупки → Поступление (акты, накладные, УПД):
- Откройте список поступлений.
- В командной панели найдите группу команд ЭДО и в ней загрузку электронного документа из файла.
- Выберите XML-файл. Если поставщик прислал архив, сначала распакуйте его.
- Программа покажет документ в форме просмотра. Проверьте контрагента и сопоставление номенклатуры.
- Создайте документ поступления и проведите его после проверки сумм.
💡 Сопоставление номенклатуры запоминается. Второй файл от того же поставщика загрузится почти без ручной работы.
Обмен между базами
Для регулярного обмена между базами (например, УТ → Бухгалтерия) используют Администрирование → Синхронизация данных. Там настраивают обмен через каталог, FTP или интернет. Файлы сообщений обмена — тоже XML, но вручную их открывать не нужно: программа читает их сама при каждом сеансе синхронизации.
Обмен с сайтом
Файлы CommerceML загружает обмен с сайтом, если он настроен в синхронизации данных. Вручную такой файл загружают редко: обычно сайт сам забирает и отдаёт данные по расписанию.
Универсальные обработки для чтения и загрузки XML
Когда штатного механизма нет, на помощь приходят внешние обработки. Их открывают в режиме 1С:Предприятие через меню Файл → Открыть (в интерфейсе «Такси» — значок главного меню в левом верхнем углу) или регистрируют в Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.
«Выгрузка и загрузка данных XML»
Самая известная обработка, файл обычно называется ВыгрузкаЗагрузкаДанныхXML83.epf. Она распространяется на диске ИТС и в поставке инструментов разработчика.
Что умеет:
- ✅ выгружает выбранные справочники, документы, регистры в один XML-файл;
- ✅ загружает такой файл в другую базу;
- ✅ сохраняет ссылки (GUID), поэтому повторная загрузка не плодит дубли, а перезаписывает объекты.
Ограничение одно, но жёсткое: база-приёмник должна иметь ту же конфигурацию, что и источник. Если структура метаданных отличается, загрузка остановится на первом несовпадающем объекте или запишет данные не туда.
Обработка записывает объекты в режиме загрузки: без проверок заполнения и без бизнес-логики. Документы не перепроводятся, проводки переносятся как есть. Перед загрузкой в рабочую базу сделайте её резервную копию.
«Универсальный обмен данными в формате XML»
Эта обработка переносит данные между разными конфигурациями. Ей нужен файл правил обмена, подготовленный в конфигурации «Конвертация данных» 2.x. Готовые правила для типовых переходов (например, со старых редакций) поставляет фирма-разработчик вместе с конфигурацией.
Порядок работы:
- В базе-источнике откройте обработку, на вкладке выгрузки укажите файл правил и период.
- Выгрузите данные в XML-файл.
- В базе-приёмнике откройте ту же обработку, на вкладке загрузки выберите полученный файл.
- После загрузки проверьте остатки и обороты по ключевым счетам.
Если базы защищены безопасным режимом
В свежих релизах при открытии внешней обработки 1С может предупредить о небезопасном действии и потребовать подтверждения. Открывать внешние обработки может пользователь с правом администратора или с отдельно выданным правом на интерактивное открытие внешних обработок.
XML в Конфигураторе: просмотр файла и выгрузка конфигурации
Конфигуратор пригодится в двух ситуациях.
Посмотреть сам файл. Через Файл → Открыть в Конфигураторе можно открыть XML как текстовый документ: в окне выбора выберите тип «Все файлы». Встроенный редактор подсвечивает текст и умеет искать по нему. Для больших файлов это неудобно, внешний редактор справится лучше.
Посмотреть структуру конфигурации в XML. Команда Конфигурация → Выгрузить конфигурацию в файлы сохраняет все объекты метаданных в набор XML-файлов. Это нужно для:
- 🔍 поиска по всему коду и метаданным внешним редактором;
- 🗂 хранения конфигурации в Git;
- 🛠 массовых правок, которые неудобно делать мышью.
Обратная команда — Конфигурация → Загрузить конфигурацию из файлов. Она заменяет основную конфигурацию, поэтому после неё нужно обновить конфигурацию базы данных.
Загрузка конфигурации из файлов в рабочую базу — операция для разработчика. Делайте её на копии, а в рабочую базу переносите проверенный результат обычным обновлением. Для обновления структуры базы нужен монопольный доступ: пользователей придётся выгнать из программы.
Структуру XDTO-пакетов (схемы форматов обмена) тоже видно в Конфигураторе: ветка Общие → XDTO-пакеты. Там можно открыть пакет и посмотреть типы и свойства, которые ожидает формат.
Чтение XML встроенным языком 1С
Если формат нестандартный, пишут свою обработку. В платформе 8.3 есть три инструмента, и выбор между ними определяется размером файла и удобством.
| Инструмент | Как читает | Память | Когда брать |
|---|---|---|---|
ЧтениеXML | Потоково, узел за узлом | Минимум | Большие файлы, сотни МБ |
ПостроительDOM + ДокументDOM | Загружает всё дерево | Весь файл в памяти | Файлы до десятков МБ, нужен поиск по узлам и XPath |
ФабрикаXDTO | Превращает XML в объекты по схеме | Весь файл | Есть XSD-схема или XDTO-пакет |
Пример: потоковое чтение
Допустим, у нас файл такого вида:
<?xml version="1.0" encoding="UTF-8"?>
<Товары>
<Товар Артикул="A-101">
<Наименование>Бумага А4</Наименование>
<Цена>420.50</Цена>
</Товар>
</Товары>
Код на сервере читает все товары в таблицу значений:
Функция ПрочитатьТовары(ИмяФайла)
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Артикул");
Таблица.Колонки.Добавить("Наименование");
Таблица.Колонки.Добавить("Цена");
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ИмяФайла);
Строка = Неопределено;
ТекущееПоле = "";
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Если Чтение.Имя = "Товар" Тогда
Строка = Таблица.Добавить();
Строка.Артикул = Чтение.ПолучитьАтрибут("Артикул");
Иначе
ТекущееПоле = Чтение.Имя;
КонецЕсли;
ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст И Строка <> Неопределено Тогда
Если ТекущееПоле = "Наименование" Тогда
Строка.Наименование = Чтение.Значение;
ИначеЕсли ТекущееПоле = "Цена" Тогда
Строка.Цена = Число(Чтение.Значение);
КонецЕсли;
ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
ТекущееПоле = "";
КонецЕсли;
КонецЦикла;
Чтение.Закрыть();
Возврат Таблица;
КонецФункции
Число("420.50") работает, потому что 1С понимает точку как разделитель дробной части. Если в файле стоит запятая, замените её перед преобразованием через СтрЗаменить.
Пример: чтение через DOM
Тот же файл, но короче — за счёт того, что всё дерево уже в памяти:
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ИмяФайла);
Построитель = Новый ПостроительDOM;
Документ = Построитель.Прочитать(Чтение);
Чтение.Закрыть();
Для Каждого Узел Из Документ.ПолучитьЭлементыПоИмени("Товар") Цикл
Артикул = Узел.ПолучитьАтрибут("Артикул");
Для Каждого Поле Из Узел.ДочерниеУзлы Цикл
Если Поле.ИмяУзла = "Наименование" Тогда
Наименование = Поле.ТекстовоеСодержимое;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Файл лежит на компьютере пользователя
Метод ОткрытьФайл на сервере видит только файловую систему сервера. В клиент-серверной базе файл с рабочего стола бухгалтера сервер не найдёт. Правильный порядок:
- На клиенте передайте файл в базу методом
НачатьПомещениеФайлов(илиПоместитьФайлв старом коде). Получите адрес во временном хранилище. - На сервере возьмите данные:
ПолучитьИзВременногоХранилища(Адрес)вернёт двоичные данные. - Запишите их во временный файл (
ПолучитьИмяВременногоФайла("xml")) и прочитайте его черезЧтениеXML. - После чтения удалите временный файл через
УдалитьФайлы.
💡 Небольшой XML можно не сохранять на диск: прочитайте двоичные данные как строку через ПолучитьСтрокуИзДвоичныхДанных и передайте её в Чтение.УстановитьСтроку(...).
Ошибки при открытии и загрузке XML
Большинство ошибок разбора XML сводится к тому, что файл нарушает синтаксис или его кодировка не совпадает с заявленной. Платформа в таких случаях пишет «Ошибка разбора XML» и номер строки и позиции, где споткнулась.
<?xml есть лишние символы: пробел, пустая строка или мусор после ручной правки. Откройте файл в Notepad++, удалите всё до <?xml и сохраните без смены кодировки.windows-1251, а файл сохранён в UTF-8. В Notepad++ посмотрите кодировку в строке состояния и приведите её к той, что написана в объявлении.& в тексте (например, в названии «Рога & Копыта») должен быть записан как &. Файл формирует сторонняя программа — сообщите её разработчику, вручную правьте только копию..sig или .p7s, зашифрованное сообщение оператора ЭДО. Распакуйте архив и ищите XML внутри.ПостроительDOM грузит всё дерево целиком. Перепишите разбор на потоковое ЧтениеXML.Как не создать проблему самому
- ✏️ Правьте копию файла, а оригинал храните. Если загрузка не пройдёт, будет с чем сравнить.
- 💾 Сохраняйте в той же кодировке, что указана в первой строке файла. Блокнот Windows по умолчанию сохраняет в UTF-8, а форматы ФНС ожидают
windows-1251. - 🔏 Не меняйте файл, который подписан электронной подписью: после любой правки подпись станет недействительной.
Частые вопросы
Можно ли открыть XML в 1С двойным щелчком?
Можно ли править XML-файл перед загрузкой в 1С?
Чем XML отличается от выгрузки базы в файл .dt?
.dt — полная копия информационной базы с конфигурацией в закрытом формате, его загружают только целиком через Конфигуратор.Подходит ли «Выгрузка и загрузка данных XML» для перехода с Бухгалтерии 2.0 на 3.0?
Как открыть очень большой XML-файл, если браузер зависает?
ЧтениеXML, а не через DOM.