Разработка и Конфигурация · 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». Она входит в поставку «Конвертации данных» и часто встроена в типовые конфигурации: в ней указывается файл, правила и режим загрузки. Обработка умеет выводить отчёт об ошибках и работать в режиме отладки.
Документы ЭДО (УПД, накладные) загружаются через встроенный сервис «Электронные документы» или через обработку загрузки из файла в разделе ЭДО. Не пытайтесь загружать их произвольными обработками: формат регламентирован, и ручной разбор почти наверняка приведёт к ошибкам в учёте.
Какой способ загрузки выбрать
Подходит для файлов стандартных форматов. Ограничение: не принимает произвольную структуру XML.
Для выгрузок из других баз 1С по правилам конвертации. Требует файл правил, совместимый с выгрузкой.
Для любого произвольного XML. Требует навыков программирования на встроенном языке и тестирования.
Шаг 3. Загрузка произвольного XML программным способом
Когда структура файла нестандартная, пишется внешняя обработка с использованием объекта ЧтениеXML. Минимальный каркас кода выглядит так: открывается файл, в цикле читаются узлы, при обнаружении нужного элемента извлекаются атрибуты и текст, затем создаются объекты базы.
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ПутьКФайлу);
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента
И Чтение.Имя = "Товар" Тогда
Наименование = Чтение.ПолучитьАтрибут("Наименование");
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Наименование = Наименование;
НовыйЭлемент.Записать();
КонецЕсли;
КонецЦикла;
Чтение.Закрыть();Для больших файлов (сотни мегабайт) не используйте ПрочитатьXML или DOM-модель целиком — файл полностью загрузится в память и сервер может завершить сеанс с ошибкой. Потоковое чтение через ЧтениеXML обрабатывает файл последовательно и подходит для любого объёма.
Альтернатива: XDTO-пакеты
Если у вас есть XSD-схема файла, создайте в конфигураторе XDTO-пакет и читайте данные через ФабрикаXDTO.ПрочитатьXML(). Это даёт типизацию и контроль структуры, но требует добавления объекта метаданных, что не всегда допустимо в типовой конфигурации на поддержке.
Шаг 4. Поиск существующих объектов и защита от дублей
Главная проблема массовой загрузки — дубли. Перед созданием элемента справочника ищите существующий по ключевым полям: для контрагентов это ИНН и КПП, для номенклатуры — артикул или код производителя, для документов — номер, дата и контрагент. Поиск по наименованию ненадёжен: расхождения в пробелах и регистре создадут дубли.
Если в XML есть уникальный идентификатор объекта (GUID или внешний код), сохраняйте его в дополнительном реквизите или регистре соответствий. Тогда повторная загрузка будет обновлять существующие объекты, а не создавать новые. Для документов решите заранее: перезаписывать ли ранее загруженные, пропускать или создавать новые версии.
Шаг 5. Выполнение загрузки и контроль результата
Запускайте загрузку порциями, если файл большой: обрабатывайте по несколько тысяч объектов в транзакции и фиксируйте прогресс. В типовом «Универсальном обмене данными» включите режим вывода протокола и после завершения изучите отчёт об ошибках — там будут указаны конкретные строки файла и причины отказа.
После загрузки сверьте контрольные суммы: количество созданных элементов справочника, итоговые суммы документов, число строк. Сравните с исходными данными из системы-источника. Откройте несколько созданных объектов вручную и проверьте корректность заполнения ключевых реквизитов — ставки НДС, единицы измерения, валюты.
Как проверить результат загрузки
Совпадает с числом записей в XML или отличается на объяснимое число отклонённых
Существенно меньше без записей в протоколе ошибок
Групповой поиск по ИНН/артикулу не выявляет повторов
Найдены элементы с одинаковыми ключевыми полями
Итоги по загруженным документам сходятся с источником
Расхождения в суммах, копеечные разницы из-за округления
Обязательные поля заполнены, проведение проходит
Документы не проводятся из-за пустых обязательных полей
Шаг 6. Регулярная загрузка и автоматизация
Если XML приходит регулярно, оформите загрузку как регламентное задание: файл забирается из сетевой папки, FTP или почты, обрабатывается, результат пишется в журнал. Обязательно добавьте архивирование обработанных файлов и уведомление об ошибках — иначе сбой обмена обнаружится только когда кто-то заметит устаревшие данные.
Для файлов от внешних контрагентов предусмотрите проверку структуры перед загрузкой: наличие обязательных узлов, допустимые значения полей. Файл с изменённой структурой должен отклоняться с понятным сообщением, а не создавать частично заполненные объекты.
Частые вопросы о загрузке XML в 1С
Можно ли загрузить XML в 1С без программирования?
Да, если файл соответствует типовому формату: CommerceML загружается обменом с сайтом, документы ЭДО — через сервис электронных документов, выгрузки из других баз 1С — обработкой «Универсальный обмен данными XML». Для произвольной структуры без кода не обойтись, но иногда помогает преобразование XML в табличный вид (например, через Excel) с последующей загрузкой обработкой «Загрузка данных из табличного документа».
Что делать, если обработка выдаёт ошибку формата файла?
Проверьте, что файл действительно XML, а не переименованный другой формат, что он не повреждён при передаче и что кодировка соответствует заявленной в заголовке. Откройте файл в браузере: он покажет первую синтаксическую ошибку с номером строки. Также убедитесь, что формат соответствует выбранной обработке — CommerceML не загрузится через универсальный обмен и наоборот.
Как загрузить очень большой XML-файл?
Используйте потоковое чтение через ЧтениеXML, обрабатывайте данные порциями с фиксацией транзакций каждые несколько тысяч объектов и по возможности выполняйте загрузку на сервере, а не на клиенте. Если файл не читается даже потоково, разбейте его на части на стороне источника.
Как отменить ошибочную загрузку?
Штатной кнопки «откатить» нет. Варианты: восстановление базы из резервной копии, сделанной перед загрузкой, или пометка на удаление созданных объектов по отбору (например, по дате создания и автору) с последующим удалением помеченных. Именно поэтому тестовая загрузка на копии и резервная копия перед импортом — обязательные шаги.
Почему после загрузки появились дубли контрагентов?
Чаще всего поиск выполнялся по наименованию, а в файле оно записано иначе, чем в базе. Настройте поиск по ИНН и КПП, а для повторных загрузок храните соответствие внешних идентификаторов объектам базы.
Можно ли загружать XML автоматически по расписанию?
Да, через регламентное задание, которое забирает файл из папки или по сети и вызывает процедуру загрузки. Добавьте протоколирование и уведомление об ошибках, чтобы сбои не оставались незамеченными.
Что важно запомнить
Определите формат XML и выберите подходящий инструмент: типовой обмен для стандартных форматов, собственную обработку для произвольных. Ищите существующие объекты по надёжным ключам, тестируйте на копии базы, проверяйте результат по количеству объектов и контрольным суммам. Перед массовой загрузкой всегда делайте резервную копию.