К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как загрузить данные XML в 1С

Практическая инструкция по загрузке XML-данных в 1С: типовые обработки, загрузка через XDTO, чтение XML кодом, проверка результата и типичные ошибки.

Задача загрузить данные из XML-файла возникает при обмене с другими системами, импорте прайсов поставщиков, переносе справочников и загрузке выгрузок из банков или государственных сервисов. В 1С есть несколько рабочих способов: типовые обработки обмена, универсальные загрузчики и программное чтение через объект ЧтениеXML. Выбор зависит от структуры файла, конфигурации и того, разовая это операция или регулярный обмен.

Перед загрузкой обязательно определите, что именно содержит XML: это может быть файл в формате CommerceML (типовой обмен с сайтом), выгрузка по правилам «Конвертации данных», произвольный XML от сторонней системы или файл формата ЭДО (УПД, счета-фактуры). От этого зависит инструмент: попытка загрузить произвольный XML типовой обработкой обмена с сайтом закончится ошибкой формата.

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

Шаг 1. Определите формат XML и целевые объекты

Откройте файл в текстовом редакторе и посмотрите на корневой элемент и пространства имён. Файл с корнем <КоммерческаяИнформация> — это CommerceML, его загружают типовые механизмы обмена с сайтом. Файл с корнем <Файл> и атрибутом ИдФайл обычно относится к электронному документообороту. Если структура произвольная — потребуется собственная обработка.

Зафиксируйте, какие объекты 1С должны быть созданы: элементы справочников «Номенклатура» и «Контрагенты», документы поступления, цены. Составьте соответствие полей XML и реквизитов 1С — это сэкономит время при настройке и поможет обнаружить недостающие данные до начала загрузки.

Шаг 2. Используйте типовые средства конфигурации

В большинстве типовых конфигураций (УТ, ERP, «Управление нашей фирмой», Бухгалтерия) уже есть встроенные загрузчики. Для CommerceML используйте узел обмена с сайтом: раздел «Администрирование» — «Обмен с сайтами», где при получении файла import.xml система автоматически создаёт или обновляет номенклатуру, цены и остатки.

Для файлов, выгруженных из другой базы 1С по правилам конвертации, подходит обработка «Универсальный обмен данными в формате XML». Она входит в поставку «Конвертации данных» и часто встроена в типовые конфигурации: в ней указывается файл, правила и режим загрузки. Обработка умеет выводить отчёт об ошибках и работать в режиме отладки.

Документы ЭДО (УПД, накладные) загружаются через встроенный сервис «Электронные документы» или через обработку загрузки из файла в разделе ЭДО. Не пытайтесь загружать их произвольными обработками: формат регламентирован, и ручной разбор почти наверняка приведёт к ошибкам в учёте.

Какой способ загрузки выбрать

Типовой обмен (CommerceML, ЭДО)

Подходит для файлов стандартных форматов. Ограничение: не принимает произвольную структуру XML.

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

Для выгрузок из других баз 1С по правилам конвертации. Требует файл правил, совместимый с выгрузкой.

Собственная обработка на ЧтениеXML

Для любого произвольного XML. Требует навыков программирования на встроенном языке и тестирования.

Шаг 3. Загрузка произвольного XML программным способом

Когда структура файла нестандартная, пишется внешняя обработка с использованием объекта ЧтениеXML. Минимальный каркас кода выглядит так: открывается файл, в цикле читаются узлы, при обнаружении нужного элемента извлекаются атрибуты и текст, затем создаются объекты базы.

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

Для больших файлов (сотни мегабайт) не используйте ПрочитатьXML или DOM-модель целиком — файл полностью загрузится в память и сервер может завершить сеанс с ошибкой. Потоковое чтение через ЧтениеXML обрабатывает файл последовательно и подходит для любого объёма.

Альтернатива: XDTO-пакеты

Если у вас есть XSD-схема файла, создайте в конфигураторе XDTO-пакет и читайте данные через ФабрикаXDTO.ПрочитатьXML(). Это даёт типизацию и контроль структуры, но требует добавления объекта метаданных, что не всегда допустимо в типовой конфигурации на поддержке.

Шаг 4. Поиск существующих объектов и защита от дублей

Главная проблема массовой загрузки — дубли. Перед созданием элемента справочника ищите существующий по ключевым полям: для контрагентов это ИНН и КПП, для номенклатуры — артикул или код производителя, для документов — номер, дата и контрагент. Поиск по наименованию ненадёжен: расхождения в пробелах и регистре создадут дубли.

Если в XML есть уникальный идентификатор объекта (GUID или внешний код), сохраняйте его в дополнительном реквизите или регистре соответствий. Тогда повторная загрузка будет обновлять существующие объекты, а не создавать новые. Для документов решите заранее: перезаписывать ли ранее загруженные, пропускать или создавать новые версии.

Типичные ошибки при загрузке
01
Загрузка без поиска дублей — справочники разрастаются копиями, отчёты искажаются
02
Поиск контрагентов по наименованию — один контрагент заводится несколько раз из-за разного написания
03
Запись объектов по одному без транзакции на большом файле — загрузка занимает часы и обрывается на середине
04
Игнорирование журнала ошибок обработки — часть данных молча не загружается
05
Загрузка сразу в рабочую базу без теста на копии — откатить тысячи созданных документов сложно

Шаг 5. Выполнение загрузки и контроль результата

Запускайте загрузку порциями, если файл большой: обрабатывайте по несколько тысяч объектов в транзакции и фиксируйте прогресс. В типовом «Универсальном обмене данными» включите режим вывода протокола и после завершения изучите отчёт об ошибках — там будут указаны конкретные строки файла и причины отказа.

После загрузки сверьте контрольные суммы: количество созданных элементов справочника, итоговые суммы документов, число строк. Сравните с исходными данными из системы-источника. Откройте несколько созданных объектов вручную и проверьте корректность заполнения ключевых реквизитов — ставки НДС, единицы измерения, валюты.

Контрольные точки

Как проверить результат загрузки

Количество объектов
Норма

Совпадает с числом записей в XML или отличается на объяснимое число отклонённых

Тревожный признак

Существенно меньше без записей в протоколе ошибок

Дубли справочников
Норма

Групповой поиск по ИНН/артикулу не выявляет повторов

Тревожный признак

Найдены элементы с одинаковыми ключевыми полями

Суммы документов
Норма

Итоги по загруженным документам сходятся с источником

Тревожный признак

Расхождения в суммах, копеечные разницы из-за округления

Заполненность реквизитов
Норма

Обязательные поля заполнены, проведение проходит

Тревожный признак

Документы не проводятся из-за пустых обязательных полей

Шаг 6. Регулярная загрузка и автоматизация

Если XML приходит регулярно, оформите загрузку как регламентное задание: файл забирается из сетевой папки, FTP или почты, обрабатывается, результат пишется в журнал. Обязательно добавьте архивирование обработанных файлов и уведомление об ошибках — иначе сбой обмена обнаружится только когда кто-то заметит устаревшие данные.

Для файлов от внешних контрагентов предусмотрите проверку структуры перед загрузкой: наличие обязательных узлов, допустимые значения полей. Файл с изменённой структурой должен отклоняться с понятным сообщением, а не создавать частично заполненные объекты.

Частые вопросы о загрузке XML в 1С

Можно ли загрузить XML в 1С без программирования?

Да, если файл соответствует типовому формату: CommerceML загружается обменом с сайтом, документы ЭДО — через сервис электронных документов, выгрузки из других баз 1С — обработкой «Универсальный обмен данными XML». Для произвольной структуры без кода не обойтись, но иногда помогает преобразование XML в табличный вид (например, через Excel) с последующей загрузкой обработкой «Загрузка данных из табличного документа».

Что делать, если обработка выдаёт ошибку формата файла?

Проверьте, что файл действительно XML, а не переименованный другой формат, что он не повреждён при передаче и что кодировка соответствует заявленной в заголовке. Откройте файл в браузере: он покажет первую синтаксическую ошибку с номером строки. Также убедитесь, что формат соответствует выбранной обработке — CommerceML не загрузится через универсальный обмен и наоборот.

Как загрузить очень большой XML-файл?

Используйте потоковое чтение через ЧтениеXML, обрабатывайте данные порциями с фиксацией транзакций каждые несколько тысяч объектов и по возможности выполняйте загрузку на сервере, а не на клиенте. Если файл не читается даже потоково, разбейте его на части на стороне источника.

Как отменить ошибочную загрузку?

Штатной кнопки «откатить» нет. Варианты: восстановление базы из резервной копии, сделанной перед загрузкой, или пометка на удаление созданных объектов по отбору (например, по дате создания и автору) с последующим удалением помеченных. Именно поэтому тестовая загрузка на копии и резервная копия перед импортом — обязательные шаги.

Почему после загрузки появились дубли контрагентов?

Чаще всего поиск выполнялся по наименованию, а в файле оно записано иначе, чем в базе. Настройте поиск по ИНН и КПП, а для повторных загрузок храните соответствие внешних идентификаторов объектам базы.

Можно ли загружать XML автоматически по расписанию?

Да, через регламентное задание, которое забирает файл из папки или по сети и вызывает процедуру загрузки. Добавьте протоколирование и уведомление об ошибках, чтобы сбои не оставались незамеченными.

Итог

Что важно запомнить

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