Загрузка XML в 1С 8.3: обработки обмена, ЭДО, своя обработка
Содержание
Загрузить 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) обработка уже встроена. Открыть её можно так:
- Включите показ команды для техспециалиста:
Главное меню (☰) → Сервис → Параметры, включите флажок, который показывает функции для технического специалиста (команду «Все функции»). - Откройте
Главное меню → Функции для технического специалиста. - В ветке «Обработки» найдите «Универсальный обмен данными в формате XML».
Если обработки в списке нет, используйте внешний файл V8Exchan83.epf из комплекта «Конвертации данных». Открывается он через Главное меню → Файл → Открыть.
Порядок загрузки
- Перейдите на вкладку загрузки данных.
- В поле имени файла выберите ваш XML. Если источник прислал архив
.zip, сначала распакуйте его. - Проверьте флажки режима. Загрузка в режиме обмена отключает часть проверок при записи объектов: так грузится быстрее и без ложных отказов, но и контроль заполнения слабее.
- Включите ведение протокола обмена и укажите для него файл. Без протокола разобрать ошибки потом будет нечем.
- Нажмите кнопку загрузки и дождитесь окончания.
Правила обмена привязаны к версиям конфигураций. Файл, выгруженный по правилам «УТ 11.4 → БП 3.0» двухлетней давности, может не загрузиться в свежую Бухгалтерию: у справочников и документов меняются реквизиты. Просите у источника выгрузку по правилам под ваш текущий релиз.
Когда базы одинаковые: «Выгрузка и загрузка данных XML»
Вторая обработка часто путается с первой, хотя у них разная задача. «Выгрузка и загрузка данных XML» переносит объекты между базами одной и той же конфигурации одной версии без всяких правил. Типичный случай: выгрузить из копии базы справочник номенклатуры или документы за месяц и загрузить в рабочую.
Обработка распространяется отдельным файлом .epf на дисках ИТС и в комплекте для разработчиков. Работает она так:
- В базе-источнике на вкладке выгрузки отметьте нужные объекты метаданных и период.
- Включите выгрузку со связанными объектами, если нужны и подчинённые справочники.
- Сохраните файл.
- В базе-приёмнике той же обработкой на вкладке загрузки выберите файл и запустите.
Объекты сопоставляются по уникальному идентификатору ссылки. Значит, если в приёмнике уже есть объект с тем же GUID, он будет перезаписан данными из файла. Дубли по наименованию обработка не ищет.
| Универсальный обмен | Выгрузка и загрузка данных XML | |
|---|---|---|
| Разные конфигурации | Да | Нет |
| Нужен файл правил | Да, при выгрузке | Нет |
| Поиск существующих объектов | По полям из правил (ИНН, код, наименование) | По GUID ссылки |
| Риск дублей | Есть при плохих правилах | Есть, если объект создан вручную в обеих базах |
Загрузка XML прямо в документы и справочники
Не каждый XML требует обработки обмена. Часть файлов программа понимает сама, прямо из списков документов.
Электронные документы от поставщика
УПД, акты, накладные и счета-фактуры в формате ФНС приходят как XML с именем вида ON_NSCHFDOPPR_...xml. В Бухгалтерии 3.0 их загружают так:
- Откройте
Покупки → Поступление (акты, накладные, УПД). - В командной панели списка найдите группу команд ЭДО и в ней загрузку документа из файла.
- Выберите XML. Программа покажет содержимое документа и предложит сопоставить контрагента и номенклатуру.
- Сопоставьте позиции и создайте документ поступления.
Тот же механизм работает и в УТ 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 отличается от выписки банка для загрузки в 1С?
1CClientBankExchange (файл kl_to_1c.txt), а не в XML. Если банк отдаёт только XML, нужна обработка конвертации или прямой обмен через DirectBank.Как загрузить XML из 1С 7.7 в 8.3?
Можно ли открыть XML в Excel и загрузить через табличный документ?
Что делать, если файл XML очень большой и загрузка зависает?
ЧтениеXML, а не целиком через DOM.