Задача массовой загрузки данных из XML-файлов в справочники является классической для разработчика 1С. Часто возникает желание реализовать это «одной командой», однако для обеспечения надежности, типизации данных и возможности гибкой настройки структуры лучше всего использовать технологию XDTO. Рассмотрим, как правильно организовать процесс загрузки, не прибегая к сложному ручному разбору каждого узла XML.
Технология XDTO позволяет сопоставить структуру вашего XML-файла с объектами метаданных 1С. Это избавляет от необходимости писать сложный код для перебора каждого тега вручную. Основной принцип работы заключается в создании XDTO-пакета, который описывает структуру ваших данных.
XDTO-пакет. Определите в нем типы объектов, соответствующие вашим контейнерам в XML. Например, если у вас есть данные о файлах, создайте тип DownloadFile с набором свойств, соответствующих реквизитам вашего справочника.ДвоичныеДанные. При инициализации обработки вы сможете обращаться к пакету программно.XDTO, которая на основе вашей схемы прочитает XML-файл и превратит его в коллекцию типизированных объектов 1С.После того как данные прочитаны с помощью ФабрикаXDTO.ПрочитатьXML(Чтение), вы получаете коллекцию элементов. Давайте разберем, как эффективно перенести эти данные в справочник.
Рассмотрим пример кода, который позволяет обойти полученную коллекцию и заполнить свойства элементов справочника:
// Предположим, Результат - это прочитанный XDTO-объект
Для Каждого Элемент Из Результат.DownloadFile Цикл
// Создаем новый элемент справочника
НовыйЭлемент = Справочники.ВашСправочник.СоздатьЭлемент();
// Заполняем реквизиты объекта
ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элемент);
// Сохраняем элемент
НовыйЭлемент.Записать();
КонецЦикла;
Этот метод значительно быстрее и надежнее ручного перебора узлов через ЧтениеXML, так как ЗаполнитьЗначенияСвойств автоматически сопоставляет имена свойств XDTO с реквизитами объекта 1С, если они совпадают.
Если вам нужно не просто добавлять записи, а обновлять существующие, используя, например, URL в качестве уникального ключа, не обязательно сразу искать элемент в базе для каждой итерации. Это может существенно замедлить процесс.
Мы рекомендуем применить следующую стратегию для повышения производительности:
XML во временную таблицу или ТаблицуЗначений.URL.XDTO-пакет все теги из вашего XML. Если некоторые данные (например, DownloadTime) вам не нужны, просто не описывайте их в структуре схемы — XDTO проигнорирует их при чтении.XDTO вы можете явно указывать типы данных для свойств (строка, число, дата). При чтении фабрика XDTO выполнит преобразование типов автоматически, что избавит вас от ручной конвертации через XMLЗначение.ФабрикаXDTO не видит типы, убедитесь, что пространство имен, указанное в вашем XML, в точности совпадает с пространством имен, заданным в XDTO-пакете.Использование XDTO требует небольших первоначальных затрат времени на создание схемы, но в дальнейшем это превращает поддержку импорта в простую задачу. Если структура XML очень сложная, рассмотрите возможность предварительного преобразования данных через XSLT или сериализацию в JSON, что также отлично поддерживается платформой 1С.