Загрузка XML-файла в базу 1С 8.3: синхронизация, универсальная обработка, КД 2.0 и 3.0, свой код
Содержание
Чтобы добавить XML в 1С, сначала определите, кто и чем этот файл выгрузил. Файл сообщения из настроенной синхронизации загружают в Администрирование → Синхронизация данных. Файл из обработки «Универсальный обмен данными в формате XML» — той же обработкой на вкладке «Загрузка данных». Произвольный XML от сторонней программы — внешней обработкой с кодом на ЧтениеXML.
Команды «Открыть XML » в типовых конфигурациях нет. Файл всегда загружает конкретный механизм, и выбрать его можно только по содержимому файла. Поэтому первым делом откройте XML в любом текстовом редакторе и посмотрите на первые строки.
Какой это XML: определяем источник по первым строкам
Корневой элемент и пространство имён почти всегда подсказывают, каким механизмом файл создан. Откройте файл в Блокноте или Notepad++ и найдите первый тег после строки <?xml version="1.0" encoding="..."?>.
| Что видно в начале файла | Чем создан | Чем загружать |
|---|---|---|
<ФайлОбмена ...> и внутри блок <ПравилаОбмена> | Универсальный обмен по правилам КД 2.0 | Обработка «Универсальный обмен данными в формате XML» |
Пространство имён с EnterpriseData | Обмен через универсальный формат (КД 3.0) | Синхронизация данных или обработка для EnterpriseData |
Имя файла вида Message_…xml, часто внутри zip | Синхронизация данных по плану обмена | Администрирование → Синхронизация данных |
<Файл ИдФайл="ON_..."> | Электронный документ по формату ФНС (УПД, акт, накладная) | Загрузка входящего электронного документа из файла |
<V8Exp:Data ...> или <V8Exp ...> | Обработка «Выгрузка и загрузка данных XML» | Та же обработка, в базу той же конфигурации |
| Любая своя структура | Сторонняя программа, сайт, склад | Своя обработка на ЧтениеXML / ПостроительDOM |
📌 Ещё одно значение запроса — XML-файлы конфигурации. Их загружают в Конфигураторе: Конфигурация → Загрузить конфигурацию из файлов. Это работа разработчика с исходниками, к данным базы она не относится.
Перед любой загрузкой сделайте резервную копию базы или загрузите файл сначала в копию. Загрузка создаёт и перезаписывает объекты, а отменить её одной кнопкой нельзя.
Загрузка XML через синхронизацию данных в типовых конфигурациях
В БП 3.0, ЗУП 3.1, УТ 11 и других конфигурациях на БСП обмен настраивается в разделе Администрирование → Синхронизация данных. Если обмен идёт через общую папку или почту, программа сама пишет и читает XML-сообщения. Руками файл обычно подкладывают, когда автоматическая доставка сломалась.
Как загрузить сообщение обмена
- Откройте
Администрирование → Синхронизация данныхи убедитесь, что флажок «Синхронизация данных» включён и задан префикс базы. - Перейдите в «Настройки синхронизации данных» и выберите нужную настройку обмена.
- Посмотрите в её параметрах подключения, какой каталог указан для обмена.
- Положите полученный файл
Message_…в этот каталог, не меняя имя. - Нажмите «Синхронизировать» (или «Получить данные», если в вашем релизе команды разделены).
- Откройте журнал синхронизации и проверьте, что сообщение принято без предупреждений.
💡 Имя файла содержит префиксы баз-отправителя и получателя. Программа ищет сообщение именно с таким именем. Переименованный файл она просто не увидит.
Сообщения обмена нумеруются. Если загрузить старое сообщение после нового, база его отклонит как уже полученное. Это защита, а не ошибка: нужное сообщение просто выгрузите ещё раз.
Если настройки обмена ещё нет
Создайте её в «Настройки синхронизации данных» → «Новая синхронизация данных». Мастер предложит выбрать программу на другой стороне и способ подключения. Для ручной передачи файлов выберите обмен через локальный или сетевой каталог.
Настройку делают на обеих сторонах. Первая сторона сохраняет файл настроек, вторая загружает его в своём мастере. Без парной настройки сообщение от чужой базы не будет принято.
Обработка «Универсальный обмен данными в формате XML»
Это внешняя обработка УниверсальныйОбменДаннымиXML.epf. Она входит в поставку «Конвертации данных 2.0» и подходит для разовых переносов между разными конфигурациями: из БП 2.0 в БП 3.0, из УТ в БП, из самописной базы в типовую.
Как открыть обработку
- 📂 Разово — через
Файл → Открытьв пользовательском режиме. - 🧩 Постоянно — подключить в
Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.
При открытии внешнего файла платформа показывает предупреждение о безопасности. Это «Защита от опасных действий» в свойствах пользователя. Открывать внешние обработки можно, если у пользователя есть права на интерактивное открытие внешних обработок. Обычно это роль администратора.
Порядок загрузки
- Откройте обработку и перейдите на вкладку «Загрузка данных».
- В поле имени файла выберите XML, полученный при выгрузке.
- Проверьте параметры на вкладке параметров: транзакции, режим обмена, отладку.
- Нажмите «Загрузить данные».
- Дождитесь сообщения о завершении и прочитайте протокол обмена.
💡 Главный приём, о котором часто не знают: отдельно загружать правила не нужно. При выгрузке обработка записывает правила обмена прямо внутрь файла данных, в блок <ПравилаОбмена>. Принимающая база берёт их оттуда. Файл правил нужен только на стороне выгрузки.
Ключевые флажки
| Флажок | Что делает | Когда включать |
|---|---|---|
| Использовать транзакции | Пишет объекты пачками в транзакции | Почти всегда; размер пачки задаётся рядом |
Загрузка в режиме обмена (ОбменДанными.Загрузка = Истина) | Пропускает проверки и обработчики при записи | Для переноса справочников и остатков, когда проверки мешают |
| Режим отладки | Позволяет пошагово отлаживать обработчики правил | Когда загрузка падает на конкретном объекте |
| Записывать протокол в файл | Сохраняет ошибки в текстовый файл | При больших объёмах, чтобы протокол не потерялся |
В режиме обмена документы записываются без проверок программы. Пустые обязательные реквизиты и неверные счета пройдут молча. После такой загрузки обязательно перепроведите документы и посмотрите на ошибки проведения.
Правила обмена КД 2.0 и КД 3.0: чем отличаются при загрузке
Правила — это описание, какой объект источника во что превращается в приёмнике. Готовые правила для типовых переходов идут в поставке обновлений и в каталогах переходов. Для нетиповых баз их пишут в конфигурации «Конвертация данных ».
КД 2.0
Правила сохраняются в XML-файл. Его указывают в универсальной обработке на стороне выгрузки, в поле имени файла правил, и нажимают загрузку правил. После этого видно дерево правил: можно снять флажки с ненужных объектов и задать отбор по периоду.
Для каждого объекта в правилах задаются правила поиска. От них зависит, найдёт ли приёмник уже существующий элемент или создаст дубль:
- 🔑 поиск по уникальному идентификатору — надёжен между базами, где объекты когда-то переносились друг в друга;
- 🔢 поиск по коду или наименованию — для независимых баз;
- 🧾 поиск по ИНН и КПП — для контрагентов.
КД 3.0
Здесь XML передаётся в формате EnterpriseData. Это общий формат, а правила конвертации живут внутри самой конфигурации, в модуле менеджера обмена. Отдельного файла правил, который можно «скормить» обработке, нет.
Поэтому XML формата EnterpriseData загружают двумя путями:
- Через синхронизацию данных, если на обеих сторонах есть поддержка этого формата.
- Через встроенную обработку для EnterpriseData. Её удобнее всего искать в
Главное меню → Функции для технического специалиста → Обработкипо слову «EnterpriseData»; точное название зависит от релиза БСП.
Если нужно изменить правила КД 3.0, правят модуль менеджера обмена, обычно в расширении конфигурации. Так изменения переживут обновление типовой.
| КД 2.0 | КД 3.0 | |
|---|---|---|
| Где правила | Отдельный XML-файл | Модуль в конфигурации |
| Формат данных | Свой для каждой пары правил | Единый EnterpriseData |
| Типичное применение | Разовые переносы, старые базы | Регулярная синхронизация типовых |
| Загрузка | Универсальная обработка | Синхронизация или обработка EnterpriseData |
Загрузка XML своим кодом: внешняя обработка
Если XML пришёл от интернет-магазина, складской системы или банка-партнёра, типовые механизмы его не поймут. Нужна своя внешняя обработка. Писать её в рабочей конфигурации не надо: создайте внешнюю обработку
в Конфигураторе (Файл → Новый → Внешняя обработка) и запускайте через Файл → Открыть.
Потоковое чтение через ЧтениеXML
Подходит для любых размеров файла: читает по одному узлу и не держит весь документ в памяти. Пример читает узлы <Товар Код="..." Наименование="...">:
&НаСервере
Процедура ЗагрузитьНаСервере(ИмяФайла)
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ИмяФайла);
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента
И Чтение.Имя = "Товар" Тогда
Код = Чтение.ЗначениеАтрибута("Код");
Наименование = Чтение.ЗначениеАтрибута("Наименование");
Ссылка = Справочники.Номенклатура.НайтиПоКоду(Код);
Если Ссылка.Пустая() Тогда
Объект = Справочники.Номенклатура.СоздатьЭлемент();
Объект.Код = Код;
Иначе
Объект = Ссылка.ПолучитьОбъект();
КонецЕсли;
Объект.Наименование = Наименование;
Объект.Записать();
КонецЕсли;
КонецЦикла;
Чтение.Закрыть();
КонецПроцедуры
Файл должен лежать там, где выполняется код. Процедура с &НаСервере читает путь на сервере 1С. В клиент-серверной базе файл с рабочего стола пользователя сначала передают на сервер через ПоместитьФайл или НачатьПомещениеФайлов, а на сервере сохраняют во временный файл.
Чтение через DOM
ПостроительDOM читает весь документ в память и даёт искать узлы по имени:
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ИмяФайла);
Построитель = Новый ПостроительDOM;
Документ = Построитель.Прочитать(Чтение);
Чтение.Закрыть();
Узлы = Документ.ПолучитьЭлементыПоИмени("Товар");
Для Каждого Узел Из Узлы Цикл
Код = Узел.ПолучитьАтрибут("Код");
// обработка элемента
КонецЦикла;
Так удобнее писать код для файлов со сложной вложенностью. Для файлов на сотни мегабайт DOM не годится: памяти уйдёт в несколько раз больше размера файла.
Перенос между одинаковыми конфигурациями
Для переноса объектов между базами одной конфигурации есть обработка «Выгрузка и загрузка данных XML» (ВыгрузкаЗагрузкаДанныхXML83.epf). Она сериализует объекты как есть, вместе с идентификаторами, без правил. В базу другой конфигурации такой файл не загрузится.
💡 Свой код проверяйте сначала на копии. Ошибка в поиске (например, сравнение кода без ведущих нулей) создаст сотни дублей за один запуск.
Ошибки при загрузке XML и что с ними делать
Сообщения платформы о разборе XML обычно содержат номер строки и позицию. Это первое, что стоит посмотреть: откройте файл в редакторе и перейдите на эту строку.
Частые промахи
- ❌ Загрузка в рабочую базу без копии и без проверки на тесте.
- ❌ Ручная правка XML и сохранение в другой кодировке. Notepad без указания кодировки легко портит файл.
- ❌ Повторная загрузка того же файла «на всякий случай». При поиске по наименованию это дубли, при поиске по идентификатору — перезапись правок.
- ❌ Загрузка правил КД 2.0 от другого релиза. Реквизиты, которых уже нет в конфигурации, вызывают ошибки на каждом объекте.
Большие XML-файлы: как ускорить загрузку
Файл на 200–500 МБ может грузиться часами, а может за 20 минут. Разница почти всегда в настройках и способе чтения.
Что ускоряет
- ⚡ Транзакции пачками. В универсальной обработке включите транзакции и задайте пачку в 500–1000 объектов. Запись по одному объекту без транзакции заметно медленнее.
- ⚡ Режим обмена. Пропуск обработчиков записи и проверок даёт кратный выигрыш на справочниках и регистрах. Цена — обязательное перепроведение документов после загрузки.
- ⚡ Потоковое чтение. В своём коде используйте
ЧтениеXML, а не DOM. - ⚡ Файл ближе к серверу. Положите XML на диск сервера 1С и указывайте локальный путь. Чтение по сети с рабочего места через клиент тормозит больше всего.
- ⚡ Разбиение выгрузки. Выгружайте по периодам (квартал или месяц) и по видам объектов: сначала справочники, потом документы.
Когда запускать
Загрузку большого файла ставьте на вечер или выходной. Пользователи на время загрузки не нужны в базе: их документы могут конфликтовать по блокировкам с записью загружаемых объектов. Предупредите людей заранее, что база будет занята.
Если загрузка длится часами, не прерывайте её завершением процесса или перезагрузкой сервера. Транзакция откатится, но оборвутся сеансы всех пользователей, а уже записанные пачки останутся в базе. Повторную загрузку после обрыва делайте только с правилами поиска, которые находят уже загруженное.
Частые вопросы
Можно ли загрузить XML в 1С без прав администратора?
Чем XML отличается от JSON при загрузке в 1С?
ЧтениеJSON и функция ПрочитатьJSON. Типовые обмены 1С используют XML, поэтому файлы обмена между базами почти всегда в нём.