Работа с XML-файлами в 1С 8.3: от просмотра до разбора встроенным языком

· 10 мин

Содержание

Чтобы просто посмотреть 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С?

Загрузка XML в 1С:Предприятие штатными механизмами

В типовых конфигурациях на БСП (Бухгалтерия 3.0, УТ 11, ЗУП 3.1, КА, ERP) XML загружают не «открытием файла», а через конкретный механизм, который знает формат.

Электронные документы поставщика

Счёт-фактуру, УПД или акт в формате ФНС поставщик может прислать файлом по почте, а не через оператора ЭДО. В Бухгалтерии 3.0 такой файл грузят из списка Покупки → Поступление (акты, накладные, УПД):

  1. Откройте список поступлений.
  2. В командной панели найдите группу команд ЭДО и в ней загрузку электронного документа из файла.
  3. Выберите XML-файл. Если поставщик прислал архив, сначала распакуйте его.
  4. Программа покажет документ в форме просмотра. Проверьте контрагента и сопоставление номенклатуры.
  5. Создайте документ поступления и проведите его после проверки сумм.

💡 Сопоставление номенклатуры запоминается. Второй файл от того же поставщика загрузится почти без ручной работы.

Обмен между базами

Для регулярного обмена между базами (например, УТ → Бухгалтерия) используют Администрирование → Синхронизация данных. Там настраивают обмен через каталог, FTP или интернет. Файлы сообщений обмена — тоже XML, но вручную их открывать не нужно: программа читает их сама при каждом сеансе синхронизации.

Обмен с сайтом

Файлы CommerceML загружает обмен с сайтом, если он настроен в синхронизации данных. Вручную такой файл загружают редко: обычно сайт сам забирает и отдаёт данные по расписанию.

Универсальные обработки для чтения и загрузки XML

Когда штатного механизма нет, на помощь приходят внешние обработки. Их открывают в режиме 1С:Предприятие через меню Файл → Открыть (в интерфейсе «Такси» — значок главного меню в левом верхнем углу) или регистрируют в Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.

«Выгрузка и загрузка данных XML»

Самая известная обработка, файл обычно называется ВыгрузкаЗагрузкаДанныхXML83.epf. Она распространяется на диске ИТС и в поставке инструментов разработчика.

Что умеет:

  • ✅ выгружает выбранные справочники, документы, регистры в один XML-файл;
  • ✅ загружает такой файл в другую базу;
  • ✅ сохраняет ссылки (GUID), поэтому повторная загрузка не плодит дубли, а перезаписывает объекты.

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

Обработка записывает объекты в режиме загрузки: без проверок заполнения и без бизнес-логики. Документы не перепроводятся, проводки переносятся как есть. Перед загрузкой в рабочую базу сделайте её резервную копию.

«Универсальный обмен данными в формате XML»

Эта обработка переносит данные между разными конфигурациями. Ей нужен файл правил обмена, подготовленный в конфигурации «Конвертация данных» 2.x. Готовые правила для типовых переходов (например, со старых редакций) поставляет фирма-разработчик вместе с конфигурацией.

Порядок работы:

  1. В базе-источнике откройте обработку, на вкладке выгрузки укажите файл правил и период.
  2. Выгрузите данные в XML-файл.
  3. В базе-приёмнике откройте ту же обработку, на вкладке загрузки выберите полученный файл.
  4. После загрузки проверьте остатки и обороты по ключевым счетам.

Если базы защищены безопасным режимом

В свежих релизах при открытии внешней обработки 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;
Документ = Построитель.Прочитать(Чтение);
Чтение.Закрыть();

Для Каждого Узел Из Документ.ПолучитьЭлементыПоИмени("Товар") Цикл
    Артикул = Узел.ПолучитьАтрибут("Артикул");
    Для Каждого Поле Из Узел.ДочерниеУзлы Цикл
        Если Поле.ИмяУзла = "Наименование" Тогда
            Наименование = Поле.ТекстовоеСодержимое;
        КонецЕсли;
    КонецЦикла;
КонецЦикла;

Файл лежит на компьютере пользователя

Метод ОткрытьФайл на сервере видит только файловую систему сервера. В клиент-серверной базе файл с рабочего стола бухгалтера сервер не найдёт. Правильный порядок:

  1. На клиенте передайте файл в базу методом НачатьПомещениеФайлов (или ПоместитьФайл в старом коде). Получите адрес во временном хранилище.
  2. На сервере возьмите данные: ПолучитьИзВременногоХранилища(Адрес) вернёт двоичные данные.
  3. Запишите их во временный файл (ПолучитьИмяВременногоФайла("xml")) и прочитайте его через ЧтениеXML.
  4. После чтения удалите временный файл через УдалитьФайлы.

💡 Небольшой XML можно не сохранять на диск: прочитайте двоичные данные как строку через ПолучитьСтрокуИзДвоичныхДанных и передайте её в Чтение.УстановитьСтроку(...).

Ошибки при открытии и загрузке XML

Большинство ошибок разбора XML сводится к тому, что файл нарушает синтаксис или его кодировка не совпадает с заявленной. Платформа в таких случаях пишет «Ошибка разбора XML» и номер строки и позиции, где споткнулась.

Диагностика: выберите симптом

Как не создать проблему самому

  • ✏️ Правьте копию файла, а оригинал храните. Если загрузка не пройдёт, будет с чем сравнить.
  • 💾 Сохраняйте в той же кодировке, что указана в первой строке файла. Блокнот Windows по умолчанию сохраняет в UTF-8, а форматы ФНС ожидают windows-1251.
  • 🔏 Не меняйте файл, который подписан электронной подписью: после любой правки подпись станет недействительной.

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

Можно ли открыть XML в 1С двойным щелчком?
Нет. 1С не регистрирует себя как программу для XML-файлов. Двойной щелчок откроет файл в браузере или редакторе, а загрузка в базу идёт только через обработку или штатный механизм.
Можно ли править XML-файл перед загрузкой в 1С?
Можно, если файл не подписан. Делайте это в редакторе с проверкой синтаксиса, сохраняйте в исходной кодировке и всегда работайте с копией.
Чем XML отличается от выгрузки базы в файл .dt?
XML переносит выбранные данные и читается человеком. Файл .dt — полная копия информационной базы с конфигурацией в закрытом формате, его загружают только целиком через Конфигуратор.
Подходит ли «Выгрузка и загрузка данных XML» для перехода с Бухгалтерии 2.0 на 3.0?
Нет, у редакций разные конфигурации. Для перехода используют штатный механизм переноса данных или универсальный обмен с правилами конвертации.
Как открыть очень большой XML-файл, если браузер зависает?
Возьмите редактор, который читает файл частями, или посмотрите только начало файла. Для загрузки в 1С такой файл разбирайте потоково через ЧтениеXML, а не через DOM.