Загрузка XML-файла в Управление торговлей 11: выбираем способ по содержимому файла
Содержание
Универсальной кнопки «Загрузить 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 по почте, а не через оператора ЭДО.
- Откройте
Закупки → Документы закупки (все). - В командной панели списка откройте подменю ЭДО и выберите загрузку документа из файла.
- Укажите XML-файл. Программа покажет входящий электронный документ.
- Сопоставьте номенклатуру поставщика со своей. Сопоставление сохранится, в следующий раз строки подтянутся сами.
- Создайте на основании документ приобретения, проверьте склад, цены и ставку НДС, проведите.
Такой документ не считается полученным через ЭДО юридически. Для учёта его достаточно, но оригинал с подписью всё равно нужен.
Файл из Бухгалтерии предприятия (EnterpriseData)
Стандартный обмен УТ 11 и БП 3.0 идёт в формате EnterpriseData. Файл из БП загружается не обработкой, а через настроенный обмен.
- Откройте
НСИ и администрирование → Администрирование → Синхронизация данных. - Включите флажок синхронизации и создайте настройку обмена с нужной программой.
- В качестве транспорта выберите локальный или сетевой каталог.
- Положите файл сообщения в этот каталог и нажмите Синхронизировать.
Файл без настройки обмена «просто так» не загрузить: в сообщении есть служебный заголовок с кодами узлов. Если настройки нет, её придётся создать с обеих сторон.
CommerceML с сайта
Файлы import.xml и offers.xml загружаются через обмен с сайтом. Его включают в разделе НСИ и администрирование → Администрирование → Синхронизация данных. Затем в узле обмена указывают режим загрузки из файла или каталога. Подходит для каталогов поставщиков, которые отдают прайс в CommerceML.
Универсальный обмен данными в формате XML
Внешняя обработка UniversalXMLDataExchange.epf поставляется с конфигурацией в каталоге шаблонов. Она загружает файлы, выгруженные по правилам «Конвертации данных 2».
- Откройте обработку через
Файл → Открыть. - Перейдите на вкладку Загрузка данных.
- Укажите файл обмена и нажмите Загрузить данные.
Перенос между двумя базами УТ
Обработка «Выгрузка и загрузка данных XML» переносит объекты между базами одной и той же конфигурации и версии. Другая конфигурация или сильно другой релиз — и загрузка упадёт на метаданных.
Монопольный режим и блокировка пользователей при загрузке XML
Загрузка XML сама по себе монопольного доступа не требует. Монополия нужна для обновления структуры базы, загрузки .dt, тестирования и исправления. Но крупную загрузку лучше делать, когда в базе никто не работает:
- 🔄 загрузка меняет остатки, цены и документы, которые в это время редактируют другие;
- ⏳ при больших объёмах возникают конфликты блокировок и ошибки «не удалось записать»;
- ↩️ откатить частично загруженный файл при живой работе пользователей сложнее.
Как освободить базу:
- Откройте
НСИ и администрирование → Администрирование → Поддержка и обслуживание → Блокировка работы пользователей. - Задайте время начала, сообщение для пользователей и код разрешения.
- Установите блокировку. Работающие пользователи получат предупреждение, затем сеансы завершатся.
- Сами войдите с параметром запуска
/UC<код>и выполните загрузку. - Снимите блокировку.
Блокировка обрывает сеансы. Несохранённые документы пользователей пропадут. Ставьте её вне рабочего времени и предупреждайте заранее.
Перед первой загрузкой нового файла или новых правил сделайте резервную копию базы. Откат загрузки из копии — единственный надёжный «отмена» в этой ситуации.
Как загрузить большой 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
Обработка должна сама загрузить файлы при открытии и завершить работу системы. Задание ставят в «Планировщик заданий» на ночное время.
Три правила для автоматики:
- Заведите отдельного пользователя «Обмен» с минимально нужными правами.
- Загруженный файл переносите в папку архива, ошибочный — в папку ошибок.
- Пишите итог в журнал регистрации или шлите письмо ответственному. Тихий сбой хуже громкого.
Безопасность при загрузке XML в УТ
Загрузка XML пишет данные прямо в справочники и документы. Ошибка в файле — это ошибка в учёте.
- 🧪 Сначала копия. Новые правила конвертации и новый формат файла проверяйте на копии базы.
- 🛡️ Защита от опасных действий. При открытии внешней обработки платформа предупреждает об опасных действиях. Не отключайте эту защиту для всех. Обработку от подрядчика открывайте, только если понимаете, откуда она.
- 👤 Права. Пользователю, который грузит файлы, нужны права на открытие внешних обработок и запись нужных объектов, а не полные права.
- 📥 Источник файла. Файл с сайта или от неизвестного отправителя проверяйте до загрузки: ИНН, суммы, количество строк.
- 📋 Журнал. После загрузки откройте
Журнал регистрациии отфильтруйте записи по пользователю и времени. Так видно, что именно изменилось.
Когда XML не подходит: другие форматы обмена
XML удобен для структурированного обмена между системами. Но не всегда он лучший выбор.
| Задача | Чем удобнее | Почему |
|---|---|---|
| Загрузить прайс или список товаров | Excel и команда загрузки из файла в табличную часть | Не нужна обработка, есть сопоставление колонок |
| Онлайн-обмен с сайтом или сервисом | HTTP-сервисы или OData | Данные идут сразу, без файлов-посредников |
| Перенос всей базы | Выгрузка .dt в Конфигураторе | Копия целиком, без правил |
| Интеграция с системой на JSON | ЧтениеJSON | Нет лишнего преобразования формата |
Табличные части многих документов УТ 11 умеют загружать данные из файла таблицы. Для разовой загрузки из Excel это быстрее любой XML-обработки.
Ошибки при загрузке XML в 1С УТ и как их исправить
Если ошибка повторяется, найдите её точный текст в Журнале регистрации. Там видно объект, на котором загрузка остановилась.