Загрузка XML в 1С 8.3: обработки обмена, ЭДО, своя обработка

· 10 мин

Содержание

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

Все варианты работают на платформе 8.3 в интерфейсе «Такси». Пошаговая инструкция ниже идёт в порядке работы: сначала смотрим файл, потом выбираем способ, грузим, сопоставляем и разбираем ошибки.

Что за файлЧем загружатьНужны правила
Выгрузка из другой конфигурации (например, УТ → БП)Универсальный обмен данными в формате XMLДа, файл правил из «Конвертации данных»
Выгрузка из базы той же конфигурации и версииВыгрузка и загрузка данных XMLНет
УПД, акт, накладная в формате ФНСЗагрузка из файла в списке документовНет
Файл в формате EnterpriseDataСинхронизация данных через каталогНет, правила встроены
Произвольная структура (сайт, WMS, партнёр)Своя внешняя обработка или расширениеПишутся в коде

Подготовка: что внутри XML файла и откуда он

Прежде чем что-то грузить, откройте файл в браузере или в Блокноте++. Браузер сразу покажет, корректен ли XML: если структура битая, он выведет ошибку с номером строки.

Посмотрите три вещи:

  • 🔎 Первая строка. Там объявлена кодировка: <?xml version="1.0" encoding="UTF-8"?> или windows-1251. Если файл реально сохранён в другой кодировке, при загрузке вместо текста будут «кракозябры» или ошибка разбора.
  • 🔎 Корневой тег. По нему понятно, кто делал файл. <ФайлОбмена ...> с атрибутами ВерсияФормата, ИмяКонфигурацииИсточника — это выгрузка универсального обмена. <Message> с пространством имён EnterpriseData — формат синхронизации. <Файл ИдФайл=... ВерсФорм=...> — электронный документ по формату ФНС. <КоммерческаяИнформация> — CommerceML, обмен с интернет-магазином.
  • 🔎 Размер. Файл на сотни мегабайт грузится долго и съедает память клиента. Такие выгрузки лучше делить на периоды ещё на стороне источника.

Если корневой тег вам ничего не говорит, спросите у того, кто прислал файл, какой программой и по каким правилам он выгружен. Это сэкономит больше времени, чем любые эксперименты с обработками.

Перед первой загрузкой в рабочую базу сделайте копию: выгрузите базу в .dt через Конфигуратор или скопируйте каталог файловой базы. Загрузка XML создаёт и перезаписывает объекты, и штатной кнопки «отменить загрузку» нет. Первый прогон делайте на копии.

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

Это главный инструмент для переноса данных между разными конфигурациями. Файл выгружается в базе-источнике по правилам обмена, а в базе-приёмнике загружается той же обработкой. Сами правила при этом лежат внутри файла выгрузки, отдельно их подключать при загрузке не нужно.

Где взять обработку

В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) обработка уже встроена. Открыть её можно так:

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

Если обработки в списке нет, используйте внешний файл V8Exchan83.epf из комплекта «Конвертации данных». Открывается он через Главное меню → Файл → Открыть.

Порядок загрузки

  1. Перейдите на вкладку загрузки данных.
  2. В поле имени файла выберите ваш XML. Если источник прислал архив .zip, сначала распакуйте его.
  3. Проверьте флажки режима. Загрузка в режиме обмена отключает часть проверок при записи объектов: так грузится быстрее и без ложных отказов, но и контроль заполнения слабее.
  4. Включите ведение протокола обмена и укажите для него файл. Без протокола разобрать ошибки потом будет нечем.
  5. Нажмите кнопку загрузки и дождитесь окончания.

Правила обмена привязаны к версиям конфигураций. Файл, выгруженный по правилам «УТ 11.4 → БП 3.0» двухлетней давности, может не загрузиться в свежую Бухгалтерию: у справочников и документов меняются реквизиты. Просите у источника выгрузку по правилам под ваш текущий релиз.

Когда базы одинаковые: «Выгрузка и загрузка данных XML»

Вторая обработка часто путается с первой, хотя у них разная задача. «Выгрузка и загрузка данных XML» переносит объекты между базами одной и той же конфигурации одной версии без всяких правил. Типичный случай: выгрузить из копии базы справочник номенклатуры или документы за месяц и загрузить в рабочую.

Обработка распространяется отдельным файлом .epf на дисках ИТС и в комплекте для разработчиков. Работает она так:

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

Объекты сопоставляются по уникальному идентификатору ссылки. Значит, если в приёмнике уже есть объект с тем же GUID, он будет перезаписан данными из файла. Дубли по наименованию обработка не ищет.

Универсальный обменВыгрузка и загрузка данных XML
Разные конфигурацииДаНет
Нужен файл правилДа, при выгрузкеНет
Поиск существующих объектовПо полям из правил (ИНН, код, наименование)По GUID ссылки
Риск дублейЕсть при плохих правилахЕсть, если объект создан вручную в обеих базах

Загрузка XML прямо в документы и справочники

Не каждый XML требует обработки обмена. Часть файлов программа понимает сама, прямо из списков документов.

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

УПД, акты, накладные и счета-фактуры в формате ФНС приходят как XML с именем вида ON_NSCHFDOPPR_...xml. В Бухгалтерии 3.0 их загружают так:

  1. Откройте Покупки → Поступление (акты, накладные, УПД).
  2. В командной панели списка найдите группу команд ЭДО и в ней загрузку документа из файла.
  3. Выберите XML. Программа покажет содержимое документа и предложит сопоставить контрагента и номенклатуру.
  4. Сопоставьте позиции и создайте документ поступления.

Тот же механизм работает и в УТ 11, и в Рознице — через библиотеку электронных документов. Подписи у такого файла не будет: юридически значимым он становится только при получении через оператора ЭДО.

Обмен по EnterpriseData

Если источник выгружает данные в формате EnterpriseData (это умеют все современные типовые), правила писать не нужно. В приёмнике настройте синхронизацию: Администрирование → Синхронизация данных, создайте обмен с нужной программой и выберите транспорт через локальный или сетевой каталог. Файл из каталога загрузится при очередной синхронизации.

Конфигурация в виде XML

Отдельный случай — XML-файлы конфигурации, а не данных. Их загружают в Конфигураторе: Конфигурация → Загрузить конфигурацию из файлов. Это задача разработчика, данные базы она не меняет, но конфигурация будет заменена полностью.

Сопоставление объектов и полей при загрузке XML файла

Главная проблема любой загрузки — не «загрузилось или нет», а «не наплодились ли дубли». Программа должна понять, что контрагент «ООО Ромашка» из файла — это тот же, что уже есть в базе.

Как это решается в разных механизмах:

  • 🧩 Универсальный обмен. Поля поиска задаются в правилах конвертации объектов. Для контрагентов обычно ищут по ИНН и КПП, для номенклатуры — по артикулу или коду, для документов — по номеру и дате. Если правило ищет по наименованию, любая лишняя точка в названии даёт дубль.
  • 🧩 Синхронизация данных. При первом обмене открывается помощник сопоставления. Там можно сопоставить объекты автоматически по реквизитам и вручную поправить то, что не совпало.
  • 🧩 ЭДО. Номенклатура поставщика сопоставляется с вашей один раз, дальше программа помнит связку и подставляет её сама.
  • 🧩 Своя обработка. Логику поиска вы пишете в коде, и её нужно продумать до первой загрузки.

Для своей обработки удобно сначала составить таблицу соответствий: какой тег или атрибут XML в какое поле 1С идёт и как ищется существующий объект.

Сопоставление полей
Товар/@Артикул→Номенклатура.Артикул (поле поиска)
Товар/@Наименование→Номенклатура.Наименование
Товар/@Ед→Единица измерения (поиск по коду ОКЕИ)
Товар/@Цена→Цена в документе установки цен
Контрагент/@ИНН→Контрагенты.ИНН (поле поиска)

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

Ошибки при загрузке XML в 1С и протокол обмена

Когда загрузка падает или проходит частично, первым делом откройте протокол обмена — тот файл, который вы указали перед запуском. В нём для каждой ошибки видно правило, объект и текст исключения. Второй источник — журнал регистрации: Администрирование → Обслуживание → Журнал регистрации, отбор по времени загрузки.

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

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

Своя обработка или расширение для регулярной загрузки XML

Если XML приходит каждый день от одного партнёра в одном формате, гонять универсальный обмен вручную неудобно. Здесь пишут внешнюю обработку или расширение конфигурации .

Что выбрать:

ВариантКогда подходитОграничения
Внешняя обработка .epfРазовая или ручная загрузка, запуск бухгалтером по кнопкеОткрывается через «Файл → Открыть» или подключается в дополнительные обработки
Расширение .cfeРегулярная загрузка, регламентное задание, кнопка в форме спискаНужна платформа не ниже 8.3.6, после установки обновить конфигурацию базы
Конвертация данных + универсальный обменСложный перенос между конфигурациями с десятками объектовНужен специалист по КД

Для чтения XML во встроенном языке есть объект ЧтениеXML. Вот рабочий пример: обработка читает файл вида <Товары><Товар Артикул="A-001" Наименование="Кабель ВВГ 3х2,5"/></Товары> и создаёт или обновляет номенклатуру по артикулу.

&НаСервере
Процедура ЗагрузитьТоварыНаСервере(ИмяФайла)

    Чтение = Новый ЧтениеXML;
    Чтение.ОткрытьФайл(ИмяФайла);

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

        Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента
            Или Чтение.Имя <> "Товар" Тогда
            Продолжить;
        КонецЕсли;

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

        Если Не ЗначениеЗаполнено(Артикул) Тогда
            Продолжить;
        КонецЕсли;

        Ссылка = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Артикул);

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

        Объект.Наименование = Наименование;
        Объект.Записать();

    КонецЦикла;

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

КонецПроцедуры

Пара практических деталей:

  • 📂 Код выполняется на сервере, поэтому ИмяФайла — путь, доступный серверу. В клиент-серверной базе файл с компьютера пользователя сначала помещают во временное хранилище (НачатьПомещениеФайлаНаСервер или ПоместитьФайл), а на сервере сохраняют во временный каталог через ПолучитьИмяВременногоФайла.
  • 📂 ПолучитьАтрибут возвращает Неопределено, если атрибута нет, поэтому проверка ЗначениеЗаполнено обязательна.
  • 📂 Для файлов со схемой XSD удобнее не разбирать теги вручную, а читать через фабрику XDTO: импортировать схему как пакет XDTO в конфигурацию и вызвать ФабрикаXDTO.ПрочитатьXML(Чтение). Получится объект с полями, как в схеме.
  • 📂 Реальные справочники имеют обязательные реквизиты (единица измерения, вид номенклатуры, ставка НДС). Метод Записать() проверку заполнения не вызывает, поэтому заполните их в коде сами, иначе элементы будут неполными.

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

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

Можно ли загрузить XML в 1С без прав администратора?
Электронные документы из списка поступлений — да, хватает прав на создание документов. Универсальный обмен и выгрузка-загрузка XML обычно требуют полных прав.
Чем XML отличается от выписки банка для загрузки в 1С?
Выписку из клиент-банка 1С ждёт в текстовом формате 1CClientBankExchange (файл kl_to_1c.txt), а не в XML. Если банк отдаёт только XML, нужна обработка конвертации или прямой обмен через DirectBank.
Как загрузить XML из 1С 7.7 в 8.3?
Через правила конвертации: в 7.7 выгружают обработкой с правилами под вашу конфигурацию 8.3, в 8.3 загружают универсальным обменом. Для типовых переходов правила поставляются вместе с конфигурацией 8.3.
Можно ли открыть XML в Excel и загрузить через табличный документ?
Можно, если структура плоская: одна строка — один товар. Тогда сохраните таблицу и загрузите её стандартной загрузкой из файла в список или табличную часть. Вложенные XML так не превратить в таблицу без потерь.
Что делать, если файл XML очень большой и загрузка зависает?
Разделите выгрузку на периоды в источнике, загружайте в нерабочее время и включите транзакции порциями. В своей обработке читайте файл потоково через ЧтениеXML, а не целиком через DOM.