Загрузка XML-файла в Управление торговлей 11: выбираем способ по содержимому файла

· 9 мин

Содержание

Универсальной кнопки «Загрузить XML » в 1С УТ нет, и искать её бесполезно. XML — это только оболочка. Способ загрузки зависит от того, что внутри: УПД от поставщика грузится через электронные документы , файл из Бухгалтерии — через Синхронизацию данных, каталог с сайта — через обмен с сайтом, файл по правилам конвертации — внешней обработкой «Универсальный обмен данными в формате XML».

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

Подготовка XML-файла к загрузке в 1С УТ: определяем формат

Откройте файл в браузере или в Notepad++. Первые две строки скажут почти всё.

Что видно в начале файлаЧто это за форматЧем загружать в УТ 11
<Файл ИдФайл="ON_NSCHFDOPPR_..." ВерсФорм="5.01">УПД или счёт-фактура по формату ФНСЗагрузка электронного документа из файла
<Message> и пространство имён с EnterpriseDataСообщение обмена с БП, УНФ, РозницейСинхронизация данных
<КоммерческаяИнформация ВерсияСхемы="...">CommerceML: каталог, цены, заказы сайтаОбмен с сайтом
<ФайлОбмена ВерсияФормата="2.0" ...>Файл по правилам «Конвертации данных 2»Универсальный обмен данными в формате XML
<_1CV8DtUD ...>Выгрузка обработкой «Выгрузка и загрузка данных XML»Та же обработка в базе той же конфигурации
Любой другой корневой тегФайл чужой системы: склад, маркетплейс, ERPСвоя обработка или правила конвертации

Перед загрузкой проверьте три вещи:

  • 📄 Кодировка. В первой строке указано encoding="windows-1251" или encoding="UTF-8". Объявленная кодировка должна совпадать с реальной. Файл, пересохранённый «не в той» кодировке, ломает кириллицу.
  • 🔒 Целостность. Файл должен заканчиваться закрывающим корневым тегом. Обрезанный при скачивании файл не загрузится вовсе.
  • 🧾 Справочники-ключи. Если в файле есть ИНН контрагентов и артикулы, заранее проверьте, что в базе они заполнены. По ним 1С будет искать соответствия.

Большой файл не открывайте в Блокноте: он может зависнуть. Для просмотра начала файла хватит команды PowerShell Get-Content .\file.xml -TotalCount 5.

Способы загрузить XML в 1С УТ: от ручного импорта до автоматизации

УПД и счёт-фактура от поставщика

Это самый частый случай. Поставщик прислал файл ON_NSCHFDOPPR_...xml по почте, а не через оператора ЭДО.

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

Такой документ не считается полученным через ЭДО юридически. Для учёта его достаточно, но оригинал с подписью всё равно нужен.

Файл из Бухгалтерии предприятия (EnterpriseData)

Стандартный обмен УТ 11 и БП 3.0 идёт в формате EnterpriseData. Файл из БП загружается не обработкой, а через настроенный обмен.

  1. Откройте НСИ и администрирование → Администрирование → Синхронизация данных.
  2. Включите флажок синхронизации и создайте настройку обмена с нужной программой.
  3. В качестве транспорта выберите локальный или сетевой каталог.
  4. Положите файл сообщения в этот каталог и нажмите Синхронизировать.

Файл без настройки обмена «просто так» не загрузить: в сообщении есть служебный заголовок с кодами узлов. Если настройки нет, её придётся создать с обеих сторон.

CommerceML с сайта

Файлы import.xml и offers.xml загружаются через обмен с сайтом. Его включают в разделе НСИ и администрирование → Администрирование → Синхронизация данных. Затем в узле обмена указывают режим загрузки из файла или каталога. Подходит для каталогов поставщиков, которые отдают прайс в CommerceML.

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

Внешняя обработка UniversalXMLDataExchange.epf поставляется с конфигурацией в каталоге шаблонов. Она загружает файлы, выгруженные по правилам «Конвертации данных 2».

  1. Откройте обработку через Файл → Открыть.
  2. Перейдите на вкладку Загрузка данных.
  3. Укажите файл обмена и нажмите Загрузить данные.

Перенос между двумя базами УТ

Обработка «Выгрузка и загрузка данных XML» переносит объекты между базами одной и той же конфигурации и версии. Другая конфигурация или сильно другой релиз — и загрузка упадёт на метаданных.

Что у вас за файл?

Монопольный режим и блокировка пользователей при загрузке XML

Загрузка XML сама по себе монопольного доступа не требует. Монополия нужна для обновления структуры базы, загрузки .dt, тестирования и исправления. Но крупную загрузку лучше делать, когда в базе никто не работает:

  • 🔄 загрузка меняет остатки, цены и документы, которые в это время редактируют другие;
  • ⏳ при больших объёмах возникают конфликты блокировок и ошибки «не удалось записать»;
  • ↩️ откатить частично загруженный файл при живой работе пользователей сложнее.

Как освободить базу:

  1. Откройте НСИ и администрирование → Администрирование → Поддержка и обслуживание → Блокировка работы пользователей.
  2. Задайте время начала, сообщение для пользователей и код разрешения.
  3. Установите блокировку. Работающие пользователи получат предупреждение, затем сеансы завершатся.
  4. Сами войдите с параметром запуска /UC<код> и выполните загрузку.
  5. Снимите блокировку.

Блокировка обрывает сеансы. Несохранённые документы пользователей пропадут. Ставьте её вне рабочего времени и предупреждайте заранее.

Перед первой загрузкой нового файла или новых правил сделайте резервную копию базы. Откат загрузки из копии — единственный надёжный «отмена» в этой ситуации.

Как загрузить большой XML-файл в 1С УТ без зависаний

Файл на сотни мегабайт грузится часами или падает с нехваткой памяти. Что помогает:

ПриёмГдеЭффект
Транзакции порциямиФлаг «Использовать транзакции» и число объектов в транзакции в универсальной обработкеСбой не откатывает всё, блокировки короче
Режим загрузки обменаФлаг загрузки в режиме обмена в той же обработкеПропускаются проверки при записи, загрузка быстрее
Отложенное проведениеСначала загрузить документы, затем провести пакетноЗагрузка не стоит на ошибке проведения
Разбивка файлаРезать по объектам внешним скриптомМеньше пик памяти
Серверный запускКлиент-серверная база, обработка на сервереНет передачи данных через сеть клиента

Режим обмена ускоряет загрузку, но отключает часть проверок. Документы загрузятся без контроля заполнения. После загрузки обязательно проведите их в обычном режиме: так всплывут пустые склады и ставки.

Для своих обработок читайте файл потоком через ЧтениеXML, а не целиком через DOM. ЧтениеXML держит в памяти только текущий узел, DOM — весь файл.

Ещё один практический приём: пробный прогон на копии базы. Он покажет и время загрузки, и ошибки, не трогая рабочие данные.

Загрузка XML с нестандартной структурой: своя обработка

Маркетплейс, складская система или поставщик часто отдают XML своего формата. Здесь два пути.

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

Своя внешняя обработка. Быстрее для простых файлов вроде прайса. Пусть файл выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<Прайс>
  <Товар Артикул="A-001" Наименование="Болт М8" Цена="12.50"/>
  <Товар Артикул="A-002" Наименование="Гайка М8" Цена="4.10"/>
</Прайс>

Чтение в таблицу значений с поиском номенклатуры по артикулу:

&НаСервере
Функция ПрочитатьПрайс(ИмяФайла)

    Результат = Новый ТаблицаЗначений;
    Результат.Колонки.Добавить("Артикул");
    Результат.Колонки.Добавить("Наименование");
    Результат.Колонки.Добавить("Цена");
    Результат.Колонки.Добавить("Номенклатура");

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

    Пока Чтение.Прочитать() Цикл
        Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента И Чтение.Имя = "Товар" Тогда
            Строка = Результат.Добавить();
            Строка.Артикул = Чтение.ПолучитьАтрибут("Артикул");
            Строка.Наименование = Чтение.ПолучитьАтрибут("Наименование");
            Строка.Цена = Число(Чтение.ПолучитьАтрибут("Цена"));
            Строка.Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Строка.Артикул);
        КонецЕсли;
    КонецЦикла;

    Чтение.Закрыть();
    Возврат Результат;

КонецФункции

Дальше таблицу показывают пользователю и по его подтверждению создают документ установки цен или приобретения. Строки с пустой номенклатурой — сигнал, что товара в базе нет.

Новую номенклатуру из файла не создавайте автоматически. В УТ 11 у номенклатуры обязателен вид номенклатуры, от него зависят единицы, учёт по характеристикам и сериям. Автоматическое создание быстро засоряет справочник.

Для сопоставления полей заранее составьте таблицу «тег файла → реквизит 1С»:

Сопоставление полей
Артикул→Номенклатура.Артикул
Наименование→Номенклатура.Наименование (только для сверки)
Цена→Цена в документе установки цен
ИНН поставщика→Контрагент, поиск по ИНН

Если формат сложный и описан XSD-схемой, удобнее загрузить схему в пакет XDTO и читать файл через ФабрикаXDTO. Ещё вариант — заранее привести чужой XML к своему формату через ПреобразованиеXSL.

Автоматическая загрузка XML по расписанию

Когда файлы приходят каждый день, ручной запуск надоедает быстро.

Штатная синхронизация. У настройки обмена в Синхронизации данных есть расписание. Программа сама заберёт файл из каталога, FTP или почты. Это лучший вариант для обмена с БП и сайтом.

Регламентное задание. Свою загрузку оформляют в расширении конфигурации как регламентное задание. Обработка смотрит в папку, грузит новые файлы и переносит их в архив. В клиент-серверной базе регламентные задания выполняет сервер, в файловой — нужен запущенный сеанс.

Пакетный запуск по планировщику Windows. Внешняя обработка запускается командной строкой:

"C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe" ENTERPRISE /S "srv1c\ut11" /N "Обмен" /P "пароль" /Execute "D:\exchange\load_xml.epf" /DisableStartupMessages

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

Три правила для автоматики:

  1. Заведите отдельного пользователя «Обмен» с минимально нужными правами.
  2. Загруженный файл переносите в папку архива, ошибочный — в папку ошибок.
  3. Пишите итог в журнал регистрации или шлите письмо ответственному. Тихий сбой хуже громкого.

Безопасность при загрузке XML в УТ

Загрузка XML пишет данные прямо в справочники и документы. Ошибка в файле — это ошибка в учёте.

  • 🧪 Сначала копия. Новые правила конвертации и новый формат файла проверяйте на копии базы.
  • 🛡️ Защита от опасных действий. При открытии внешней обработки платформа предупреждает об опасных действиях. Не отключайте эту защиту для всех. Обработку от подрядчика открывайте, только если понимаете, откуда она.
  • 👤 Права. Пользователю, который грузит файлы, нужны права на открытие внешних обработок и запись нужных объектов, а не полные права.
  • 📥 Источник файла. Файл с сайта или от неизвестного отправителя проверяйте до загрузки: ИНН, суммы, количество строк.
  • 📋 Журнал. После загрузки откройте Журнал регистрации и отфильтруйте записи по пользователю и времени. Так видно, что именно изменилось.
Перед загрузкой XML в рабочую базу
Выполнено: 0 / 6

Когда XML не подходит: другие форматы обмена

XML удобен для структурированного обмена между системами. Но не всегда он лучший выбор.

ЗадачаЧем удобнееПочему
Загрузить прайс или список товаровExcel и команда загрузки из файла в табличную частьНе нужна обработка, есть сопоставление колонок
Онлайн-обмен с сайтом или сервисомHTTP-сервисы или ODataДанные идут сразу, без файлов-посредников
Перенос всей базыВыгрузка .dt в КонфигуратореКопия целиком, без правил
Интеграция с системой на JSONЧтениеJSONНет лишнего преобразования формата

Табличные части многих документов УТ 11 умеют загружать данные из файла таблицы. Для разовой загрузки из Excel это быстрее любой XML-обработки.

Ошибки при загрузке XML в 1С УТ и как их исправить

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

Если ошибка повторяется, найдите её точный текст в Журнале регистрации. Там видно объект, на котором загрузка остановилась.