Загрузка XML-файла в 1С 8.3: обработки, правила обмена и код
Содержание
Чтобы импортировать XML в 1С, откройте Все функции → Обработки → Универсальный обмен данными в формате XML, перейдите на вкладку «Загрузка», укажите файл и нажмите «Загрузить данные». Это работает, если файл выгружен по правилам Конвертации данных: правила обычно уже лежат внутри самого файла.
Частое заблуждение — что 1С «понимает любой XML». Нет. Программа загружает только файлы известной ей структуры: выгрузку по правилам обмена, сериализацию из такой же конфигурации, формат EnterpriseData или электронные документы по формату ФНС. Для произвольного XML от сайта или внешней системы нужны свои правила или код. Поэтому первый шаг — понять, что за файл у вас в руках.
Подготовка: определяем, какой XML пришёл
Откройте файл в Блокноте, Notepad++ или браузере и посмотрите на первые 10–20 строк. По корневому элементу почти всегда понятно, каким способом его загружать.
| Что видно в начале файла | Откуда файл | Чем загружать |
|---|---|---|
<ФайлОбмена ...> и блок <ПравилаОбмена> | Выгрузка по правилам Конвертации данных 2.x | Универсальный обмен данными в формате XML |
<V8Exch:_1CV8DtUD ...> | Обработка «Выгрузка и загрузка данных XML» | Та же обработка в базе с той же конфигурацией |
Пространство имён EnterpriseData | Синхронизация через универсальный формат | Администрирование → Синхронизация данных |
<Файл ... ВерсФорм=...> | Электронный документ по формату ФНС (УПД, акт, накладная) | Загрузка электронного документа из файла в списке документов |
Произвольные теги (<order>, <item>) | Сайт, маркетплейс, внешняя система | Свои правила обмена или своя обработка |
Ещё три проверки до загрузки:
- 📄 Кодировка. Смотрите атрибут
encodingв первой строке. Если тамwindows-1251, а файл фактически сохранён в UTF-8 (или наоборот), вместо кириллицы придут «кракозябры» либо загрузка упадёт. - 🧩 Целостность. Файл должен заканчиваться закрывающим тегом корневого элемента. Обрезанный при передаче файл не прочитается.
- 🗂 Размер. Файлы на сотни мегабайт лучше загружать в клиент-серверную базу ночью: обработка может идти десятки минут.
Загрузка меняет данные в базе: создаёт и перезаписывает элементы справочников, документы, иногда проводит их. Перед первой загрузкой сделайте резервную копию базы (выгрузку в .dt или копию каталога файловой базы). Откатить загрузку кнопкой нельзя.
Загрузка XML через универсальный обмен данными
Обработка «Универсальный обмен данными в формате XML» входит в типовые конфигурации на БСП: Бухгалтерию 3.0, ЗУП 3.1, УТ 11, КА и ERP. Если её нет в списке обработок, она распространяется в составе Конвертации данных 2.x как внешняя обработка V8Exchan83.epf.
Как открыть обработку
- Включите пункт «Все функции»:
Главное меню (☰) → Сервис → Параметры, флажок «Отображать команду “Все функции”». - Откройте
Главное меню → Все функции → Обработки. - Найдите в списке «Универсальный обмен данными в формате XML».
Нужны права администратора: обработка пишет данные в обход части прикладных проверок.
Порядок загрузки
- Перейдите на вкладку «Загрузка».
- В поле имени файла укажите XML-файл (или ZIP-архив, если выгрузку сжимали при отправке).
- Проверьте настройки на вкладке «Дополнительно» (описаны ниже).
- Нажмите «Загрузить данные» и дождитесь окончания. Ход загрузки и ошибки выводятся в окно сообщений.
- Проверьте результат: откройте 3–5 загруженных документов и сверьте суммы, контрагентов, склады с базой-источником.
Настройки, которые реально влияют на результат
- 🔁 Использовать транзакции и количество элементов в транзакции. При большой порции одна ошибка откатывает всю порцию. Для первой пробной загрузки поставьте 100–500 элементов: найти проблемный объект проще.
- ⚙️ Загрузка в режиме обмена данными. Объекты пишутся с
ОбменДанными.Загрузка = Истина: без части проверок и подписок на события. Быстрее, но документы потом нужно перепровести, если правила их не проводят. - 📝 Протокол обмена. Включите запись протокола в файл и укажите путь. При загрузке на 20 000 объектов окно сообщений не сохранит всё, а файл сохранит.
Если загрузка останавливается на одном объекте, отметьте режим продолжения при ошибке (если он есть в вашей версии обработки) и загрузите остальное. Проблемные объекты потом разберёте по протоколу.
Правила обмена в Конвертации данных: когда и как их готовить
Правила нужны, когда структура источника и приёмника различается: например, данные из УТ 10.3 переносят в Бухгалтерию 3.0 или из самописной базы в ЗУП. Для пар типовых конфигураций готовые правила часто есть в поставке конфигурации или на диске ИТС. Сначала поищите их, а не пишите с нуля.
Порядок работы в Конвертации данных 2.x
- Выгрузите структуру метаданных обеих конфигураций. Для этого в каждой базе запускают обработку
MD83Exp.epfиз комплекта Конвертации данных. Она сохраняет описание объектов в XML. - В базе Конвертации данных загрузите обе структуры и создайте конвертацию «источник → приёмник».
- Настройте правила конвертации объектов (ПКО): какой справочник или документ во что превращается.
- Для каждого ПКО задайте правила конвертации свойств (ПКС): реквизит к реквизиту, табличная часть к табличной части.
- Задайте правила поиска. Обычно контрагента ищут по ИНН и КПП, номенклатуру — по артикулу или коду, документ — по номеру и дате.
- Создайте правила выгрузки данных (ПВД): что и с каким отбором выгружать.
- Сохраните правила в XML-файл.
Дальше в базе-источнике тот же «Универсальный обмен данными» на вкладке «Выгрузка»: указываете файл правил, период, отбор и выгружаете. Правила попадают в файл обмена. В базе-приёмнике загружаете этот файл, как в разделе выше.
Как сопоставить поля
Самая частая причина дублей после импорта — неудачные правила поиска. Если контрагента ищут по наименованию, «ООО Ромашка» и «Ромашка ООО» станут двумя элементами.
Для произвольного XML от сайта или маркетплейса Конвертация данных 2.x подходит хуже: она рассчитана на обмен между базами 1С. Для таких файлов проще написать обработку на встроенном языке (следующий раздел).
Конвертация данных 3.x и EnterpriseData
Современные типовые конфигурации обмениваются через универсальный формат EnterpriseData. Здесь правила — это не XML-файл, а модуль менеджера обмена внутри конфигурации. Пользователю ничего готовить не нужно: обмен настраивается в Администрирование → Синхронизация данных. Если связи по сети нет, выбирают вариант передачи через файл или общий каталог. Файл из базы-источника кладут в каталог, и база-приёмник забирает его при очередной синхронизации.
Перенос между одинаковыми базами: обработка «Выгрузка и загрузка данных XML»
Когда источник и приёмник — одна и та же конфигурация одного релиза, правила не нужны. Обработка «Выгрузка и загрузка данных XML» (ВыгрузкаЗагрузкаДанныхXML83.epf) сериализует объекты вместе с их внутренними ссылками.
Как пользоваться:
- В базе-источнике откройте обработку через
Главное меню → Файл → Открыть. - Отметьте объекты в дереве метаданных, задайте период и выгрузите в файл.
- В базе-приёмнике откройте ту же обработку, на вкладке загрузки укажите файл и запустите.
Особенность: объекты ищутся по уникальному идентификатору ссылки. Если элемент с таким идентификатором уже есть, он будет перезаписан. Если справочник заводили в двух базах вручную, совпадений не будет, и вы получите дубли.
| Способ | Когда подходит | Риски |
|---|---|---|
| Универсальный обмен + правила КД 2.x | Разные конфигурации, разовый перенос | Дубли при слабых правилах поиска |
| «Выгрузка и загрузка данных XML» | Одинаковые конфигурации и релизы | Перезапись объектов, нужна полная совпадающая структура |
| Синхронизация через EnterpriseData | Постоянный обмен типовых конфигураций | Ошибки сопоставления при первой синхронизации |
| Своя обработка на ЧтениеXML | Файлы внешних систем | Нужен программист, поддержка при смене формата |
Программный импорт XML на встроенном языке
Для произвольного файла пишут внешнюю обработку или расширение. Возьмём пример файла с прайсом:
<?xml version="1.0" encoding="UTF-8"?>
<Товары>
<Товар Артикул="A-1001" Наименование="Бумага А4, 500 листов" Цена="350.00"/>
<Товар Артикул="A-1002" Наименование="Ручка шариковая синяя" Цена="25.50"/>
</Товары>
Потоковое чтение через объект ЧтениеXML не загружает весь файл в память, поэтому подходит и для больших выгрузок. Код выполняется на сервере, значит путь к файлу должен быть доступен серверу 1С, а не только компьютеру пользователя.
&НаСервере
Процедура ЗагрузитьТоварыИзXML(ИмяФайла)
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ИмяФайла);
Загружено = 0;
Ошибок = 0;
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента
Или Чтение.Имя <> "Товар" Тогда
Продолжить;
КонецЕсли;
Артикул = Чтение.ЗначениеАтрибута("Артикул");
Наименование = Чтение.ЗначениеАтрибута("Наименование");
ЦенаСтрокой = Чтение.ЗначениеАтрибута("Цена");
Попытка
Ссылка = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Артикул);
Если Ссылка.Пустая() Тогда
Объект = Справочники.Номенклатура.СоздатьЭлемент();
Объект.Артикул = Артикул;
Иначе
Объект = Ссылка.ПолучитьОбъект();
КонецЕсли;
Объект.Наименование = Наименование;
Объект.Записать();
Загружено = Загружено + 1;
Исключение
Ошибок = Ошибок + 1;
ЗаписьЖурналаРегистрации("ЗагрузкаТоваровXML",
УровеньЖурналаРегистрации.Ошибка, , ,
СтрШаблон("Артикул %1: %2", Артикул, ОписаниеОшибки()));
КонецПопытки;
КонецЦикла;
Чтение.Закрыть();
Сообщить(СтрШаблон("Загружено: %1, ошибок: %2",
Формат(Загружено, "ЧН=0; ЧГ=0"), Формат(Ошибок, "ЧН=0; ЧГ=0")));
КонецПроцедуры
Что важно в этом примере:
- 🔎 Поиск идёт по артикулу, поэтому повторная загрузка того же файла обновит элементы, а не создаст дубли.
- 💰 Цена прочитана в
ЦенаСтрокой, но в справочник не пишется: в типовых конфигурациях цены хранятся в регистре сведений и устанавливаются документом. Для цен создавайте и записывайте документ установки цен, а не правьте регистр напрямую. - 🧾 В Бухгалтерии и УТ у номенклатуры есть обязательные реквизиты (вид номенклатуры, единица измерения).
Записать()их не проверяет, но пустые значения потом всплывут в документах. Заполняйте их значениями по умолчанию. - 🧱 Обработку держите внешней или в расширении конфигурации. Правка типовой конфигурации снимает её с поддержки и усложняет обновления.
Когда удобнее XDTO
Если к файлу есть XSD-схема (так бывает с форматами госорганов и крупных площадок), её можно импортировать в конфигуратор как пакет XDTO. Тогда файл читается целиком в объект: ФабрикаXDTO.ПрочитатьXML(Чтение, Тип), и к данным обращаются через точку, как к свойствам. Для больших файлов (сотни мегабайт) потоковое ЧтениеXML надёжнее: XDTO держит всё дерево в памяти.
Ошибки при импорте XML и где искать причину
Сначала смотрите сообщения обработки и протокол, затем журнал регистрации: Администрирование → Обслуживание → Журнал регистрации, отбор по уровню «Ошибка» и по времени загрузки.
& в наименовании должен быть записан как &, а < как <. Откройте файл на указанной строке и исправьте источник выгрузки.В своей обработке пишите в журнал регистрации не только ошибки, но и итог: сколько прочитано, сколько создано и обновлено. Через месяц на вопрос «почему не загрузился заказ» ответит журнал, а не память программиста.
Автоматическая загрузка XML по расписанию
Когда файл приходит каждый день (выгрузка с сайта, остатки поставщика), руками его не грузят. Есть три рабочих варианта.
Синхронизация данных
Для обмена через EnterpriseData расписание задаётся прямо в настройке синхронизации в разделе Администрирование → Синхронизация данных. Включается сценарий синхронизации, указываются дни и интервал. Это самый простой путь, если обе стороны — типовые конфигурации.
Регламентное задание в расширении
Для своего формата код загрузки кладут в расширение конфигурации и создают регламентное задание. В клиент-серверной базе задания выполняет сервер 1С по расписанию. Файловая база выполняет регламентные задания только при открытом сеансе, поэтому там этот вариант ненадёжен.
Каталог с файлами должен быть доступен учётной записи, под которой работает служба сервера 1С. Обработанный файл переносите в подпапку архива, чтобы не загрузить его повторно.
Запуск из планировщика Windows
Для файловой базы подходит запуск 1С с параметром /Execute, который открывает внешнюю обработку сразу после входа:
"C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe" ENTERPRISE /F"D:\Bases\Torg" /N"Обмен" /P"пароль" /Execute"D:\Obmen\ZagruzkaXML.epf" /DisableStartupMessages
Обработка в обработчике ПриОткрытии выполняет загрузку и завершает работу через ЗавершитьРаботуСистемы(Ложь). Задачу создают в планировщике Windows на ночное время.
Для такого запуска заведите отдельного пользователя 1С с минимально нужными правами. Пароль в командной строке виден всем, у кого есть доступ к планировщику. Каждый запуск занимает лицензию на время работы.
Частые вопросы
Можно ли загрузить в 1С XML-выписку из банка?
Почему универсальный обмен не просит файл правил при загрузке?
Можно ли открыть XML-файл в 1С для просмотра?
Файл → Открыть: платформа покажет его как текстовый документ. Для просмотра структуры удобнее браузер или Notepad++ с подсветкой тегов.