Как эффективно импортировать данные из XML-файла в справочник 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Задача массовой загрузки данных из XML-файлов в справочники является классической для разработчика 1С. Часто возникает желание реализовать это «одной командой», однако для обеспечения надежности, типизации данных и возможности гибкой настройки структуры лучше всего использовать технологию XDTO. Рассмотрим, как правильно организовать процесс загрузки, не прибегая к сложному ручному разбору каждого узла XML.

Основы использования XDTO-пакетов для импорта

Технология XDTO позволяет сопоставить структуру вашего XML-файла с объектами метаданных 1С. Это избавляет от необходимости писать сложный код для перебора каждого тега вручную. Основной принцип работы заключается в создании XDTO-пакета, который описывает структуру ваших данных.

  1. Создание схемы: В конфигураторе добавьте XDTO-пакет. Определите в нем типы объектов, соответствующие вашим контейнерам в XML. Например, если у вас есть данные о файлах, создайте тип DownloadFile с набором свойств, соответствующих реквизитам вашего справочника.
  2. Экспорт и использование: Выгрузите созданную схему в файл. Этот файл можно загрузить в макет внешней обработки как ДвоичныеДанные. При инициализации обработки вы сможете обращаться к пакету программно.
  3. Программный доступ: В коде обработки можно работать с фабрикой XDTO, которая на основе вашей схемы прочитает XML-файл и превратит его в коллекцию типизированных объектов 1С.

Реализация загрузки в коде

После того как данные прочитаны с помощью ФабрикаXDTO.ПрочитатьXML(Чтение), вы получаете коллекцию элементов. Давайте разберем, как эффективно перенести эти данные в справочник.

Рассмотрим пример кода, который позволяет обойти полученную коллекцию и заполнить свойства элементов справочника:


// Предположим, Результат - это прочитанный XDTO-объект
Для Каждого Элемент Из Результат.DownloadFile Цикл
    // Создаем новый элемент справочника
    НовыйЭлемент = Справочники.ВашСправочник.СоздатьЭлемент();
    
    // Заполняем реквизиты объекта
    ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элемент);
    
    // Сохраняем элемент
    НовыйЭлемент.Записать();
КонецЦикла;

Этот метод значительно быстрее и надежнее ручного перебора узлов через ЧтениеXML, так как ЗаполнитьЗначенияСвойств автоматически сопоставляет имена свойств XDTO с реквизитами объекта 1С, если они совпадают.

Как обеспечить обновление записей по ключу

Если вам нужно не просто добавлять записи, а обновлять существующие, используя, например, URL в качестве уникального ключа, не обязательно сразу искать элемент в базе для каждой итерации. Это может существенно замедлить процесс.

Мы рекомендуем применить следующую стратегию для повышения производительности:

  1. Загрузите все данные из XML во временную таблицу или ТаблицуЗначений.
  2. Сформируйте запрос, который соединит вашу таблицу с таблицей справочника по полю URL.
  3. Выполните групповую операцию записи или обновления только для тех элементов, которые были найдены или отсутствуют в базе.

Важные советы по работе с XDTO

Использование XDTO требует небольших первоначальных затрат времени на создание схемы, но в дальнейшем это превращает поддержку импорта в простую задачу. Если структура XML очень сложная, рассмотрите возможность предварительного преобразования данных через XSLT или сериализацию в JSON, что также отлично поддерживается платформой 1С.

← На главную