Загрузка XML-файла в базу 1С 8.3: синхронизация, универсальная обработка, КД 2.0 и 3.0, свой код

· 10 мин

Содержание

Чтобы добавить 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-сообщения. Руками файл обычно подкладывают, когда автоматическая доставка сломалась.

Как загрузить сообщение обмена

  1. Откройте Администрирование → Синхронизация данных и убедитесь, что флажок «Синхронизация данных» включён и задан префикс базы.
  2. Перейдите в «Настройки синхронизации данных» и выберите нужную настройку обмена.
  3. Посмотрите в её параметрах подключения, какой каталог указан для обмена.
  4. Положите полученный файл Message_… в этот каталог, не меняя имя.
  5. Нажмите «Синхронизировать» (или «Получить данные», если в вашем релизе команды разделены).
  6. Откройте журнал синхронизации и проверьте, что сообщение принято без предупреждений.

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

Сообщения обмена нумеруются. Если загрузить старое сообщение после нового, база его отклонит как уже полученное. Это защита, а не ошибка: нужное сообщение просто выгрузите ещё раз.

Если настройки обмена ещё нет

Создайте её в «Настройки синхронизации данных» → «Новая синхронизация данных». Мастер предложит выбрать программу на другой стороне и способ подключения. Для ручной передачи файлов выберите обмен через локальный или сетевой каталог.

Настройку делают на обеих сторонах. Первая сторона сохраняет файл настроек, вторая загружает его в своём мастере. Без парной настройки сообщение от чужой базы не будет принято.

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

Это внешняя обработка УниверсальныйОбменДаннымиXML.epf. Она входит в поставку «Конвертации данных 2.0» и подходит для разовых переносов между разными конфигурациями: из БП 2.0 в БП 3.0, из УТ в БП, из самописной базы в типовую.

Как открыть обработку

  • 📂 Разово — через Файл → Открыть в пользовательском режиме.
  • 🧩 Постоянно — подключить в Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.

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

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

  1. Откройте обработку и перейдите на вкладку «Загрузка данных».
  2. В поле имени файла выберите XML, полученный при выгрузке.
  3. Проверьте параметры на вкладке параметров: транзакции, режим обмена, отладку.
  4. Нажмите «Загрузить данные».
  5. Дождитесь сообщения о завершении и прочитайте протокол обмена.

💡 Главный приём, о котором часто не знают: отдельно загружать правила не нужно. При выгрузке обработка записывает правила обмена прямо внутрь файла данных, в блок <ПравилаОбмена>. Принимающая база берёт их оттуда. Файл правил нужен только на стороне выгрузки.

Ключевые флажки

ФлажокЧто делаетКогда включать
Использовать транзакцииПишет объекты пачками в транзакцииПочти всегда; размер пачки задаётся рядом
Загрузка в режиме обмена (ОбменДанными.Загрузка = Истина)Пропускает проверки и обработчики при записиДля переноса справочников и остатков, когда проверки мешают
Режим отладкиПозволяет пошагово отлаживать обработчики правилКогда загрузка падает на конкретном объекте
Записывать протокол в файлСохраняет ошибки в текстовый файлПри больших объёмах, чтобы протокол не потерялся

В режиме обмена документы записываются без проверок программы. Пустые обязательные реквизиты и неверные счета пройдут молча. После такой загрузки обязательно перепроведите документы и посмотрите на ошибки проведения.

Правила обмена КД 2.0 и КД 3.0: чем отличаются при загрузке

Правила — это описание, какой объект источника во что превращается в приёмнике. Готовые правила для типовых переходов идут в поставке обновлений и в каталогах переходов. Для нетиповых баз их пишут в конфигурации «Конвертация данных ».

КД 2.0

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

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

  • 🔑 поиск по уникальному идентификатору — надёжен между базами, где объекты когда-то переносились друг в друга;
  • 🔢 поиск по коду или наименованию — для независимых баз;
  • 🧾 поиск по ИНН и КПП — для контрагентов.

КД 3.0

Здесь XML передаётся в формате EnterpriseData. Это общий формат, а правила конвертации живут внутри самой конфигурации, в модуле менеджера обмена. Отдельного файла правил, который можно «скормить» обработке, нет.

Поэтому XML формата EnterpriseData загружают двумя путями:

  1. Через синхронизацию данных, если на обеих сторонах есть поддержка этого формата.
  2. Через встроенную обработку для 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 и функция ПрочитатьJSON. Типовые обмены 1С используют XML, поэтому файлы обмена между базами почти всегда в нём.
Как загрузить УПД в формате XML от поставщика?
Это электронный документ по формату ФНС. В БП 3.0 его загружают в списке входящих документов поступления командой загрузки из файла. Программа создаст документ поступления и предложит сопоставить номенклатуру.
Загрузится ли XML из 1С 7.7 в 1С 8.3?
Да, если он выгружен по правилам переноса для этой пары конфигураций. Произвольная выгрузка из 7.7 без правил в типовую 8.3 не загрузится.
Можно ли открыть XML-файл обмена в Excel, чтобы проверить данные?
Открыть можно, но файл обмена вложенный, и Excel покажет его неудобно. Для проверки лучше браузер или Notepad++ с плагином для XML.