Как реализовать выгрузку объектов по списку значений в Конвертации данных 2.1

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

При работе с инструментом «Конвертация данных 2.1» (КД 2.1) программисты часто сталкиваются с задачей, когда необходимо выгрузить не все объекты определенного типа, а только конкретный перечень, подготовленный пользователем или отобранный по сложной логике. В стандартном интерфейсе настройки параметров КД выбор типа данных ограничен базовыми типами, и такие структуры, как СписокЗначений или ТаблицаЗначений, в выпадающем списке отсутствуют. Однако архитектура конверсии позволяет реализовать такую выгрузку несколькими эффективными способами.

В этой статье мы подробно разберем, как передать список объектов для выгрузки, как настроить правила выгрузки данных (ПВД) и какие нюансы работы в разных режимах клиента 1С стоит учитывать.

Способ 1. Использование стандартных отборов в обработке выгрузки

Прежде чем приступать к написанию программного кода, проверим возможности типового функционала. Самый простой способ дать пользователю возможность выбрать список контрагентов (или других объектов) — это использование стандартного построителя отчетов, встроенного в обработку УниверсальныйОбменДаннымиXML.

Проанализируем шаги, которые необходимо выполнить в конфигурации «Конвертация данных»:

  1. Откроем нужное Правило выгрузки данных (ПВД).
  2. Перейдем на закладку «Основные сведения».
  3. Убедимся, что установлен флаг «Использовать стандартную выборку». Без этой галочки вкладка с отборами для данного объекта просто не появится в обработке выгрузки.
  4. Сохраним правила и загрузим их в обработку выгрузки в информационной базе.

Теперь в самой обработке выгрузки на вкладке «Отборы» мы увидим наш объект. Выберем поле «Ссылка», установим вид сравнения «В списке» и подберем нужных контрагентов. Этот метод идеально подходит, если отбор производится вручную бухгалтером непосредственно перед запуском обмена.

Важное замечание: если вы работаете в Тонком клиенте, стандартная обработка может скрывать часть интерфейса отборов. Для полноценной работы с интерактивными отборами рекомендуется запускать базу в режиме Толстого клиента или использовать современные версии обработки выгрузки из состава БСП.

Способ 2. Программная передача списка через внешнюю обработку-обертку

Если задача требует более автоматизированного подхода (например, список формируется сложным запросом во внешней обработке), мы можем управлять процессом выгрузки программно. Рассмотрим ситуацию, когда у нас есть готовый СписокЗначений и мы хотим передать его в параметры конверсии.

Хотя в интерфейсе КД 2.1 нельзя выбрать тип СписокЗначений для параметра, мы можем создать параметр с пустым типом (произвольный тип). Проанализируем пример кода, который создает объект обработки выгрузки и наполняет его параметры:


// Создаем экземпляр обработки обмена
оОбмен = Обработки.УниверсальныйОбменДаннымиXML.Создать();

// Устанавливаем режим выгрузки
оОбмен.РежимОбмена = "Выгрузка";
оОбмен.ИмяФайлаПравилОбмена = "C:\Rules\MyRules.xml";
оОбмен.ИмяФайлаОбмена = "C:\Exchange\Data.xml";

// Загружаем правила для инициализации структуры параметров
оОбмен.ЗагрузитьПравилаОбмена();

// Передаем наш список в параметры конверсии
// Параметр "СписокДляВыгрузки" должен быть создан в правилах КД (без указания типа)
оОбмен.Параметры.Вставить("СписокДляВыгрузки", МойПодготовленныйСписокКонтрагентов);

// Запускаем выгрузку
оОбмен.ВыполнитьВыгрузку();

При таком подходе в самих правилах (в КД) в обработчиках ПВД или ПКО мы сможем обращаться к этому списку через глобальную переменную Параметры.СписокДляВыгрузки.

Способ 3. Реализация выгрузки через «Произвольный алгоритм»

Когда нам нужно полностью контролировать процесс выборки, мы используем режим «Произвольный алгоритм» в ПВД. Это дает максимальную гибкость. Разберем алгоритм действий:

1. В правилах выгрузки данных (ПВД) для конкретного объекта установим способ выборки «Произвольный алгоритм».

2. В обработчике «Перед обработкой» напишем код, который будет использовать переданный нами параметр. Если параметр содержит список ссылок, мы просто переберем их и вызовем принудительную выгрузку каждого объекта.

Пример кода в обработчике ПВД «Перед обработкой»:


// Проверяем, передан ли список в параметры
Если Параметры.Свойство("СписокДляВыгрузки") И ТипЗнч(Параметры.СписокДляВыгрузки) = Тип("СписокЗначений") Тогда
    
    Для Каждого ЭлементСписка Из Параметры.СписокДляВыгрузки Цикл
        
        // Выгружаем объект по конкретному правилу конверсии объектов (ПКО)
        // Объектом может быть ссылка на контрагента
        ВыгрузитьПоПравилу(ЭлементСписка.Значение, , , , "Контрагенты");
        
    КонецЦикла;
    
КонецЕсли;

// Устанавливаем Отказ, чтобы стандартная выборка (которой нет) не запускалась
Отказ = Истина;

В данном случае функция ВыгрузитьПоПравилу является ключевой. Она позволяет игнорировать стандартные механизмы выборки и выгружать только то, что необходимо нам «здесь и сейчас».

Нюансы передачи данных и типы параметров

Важно помнить, что при использовании COM-соединения или обмена через файлы, сложные типы данных (такие как ТаблицаЗначений) могут вести себя нестабильно при передаче в параметры «напрямую». Выясним причины и рассмотрим обходной путь.

Если вы сталкиваетесь с тем, что параметр «теряется» или очищается при загрузке правил, попробуйте воспользоваться сериализацией. Вы можете преобразовать список в строку и передать её как обычный текст:


// Преобразование списка в строку (в вашей обработке)
ЗначениеПараметра = ЗначениеВстрокуВнутр(МойСписок);
оОбмен.Параметры.Вставить("СписокСтрокой", ЗначениеПараметра);

Затем в правилах конверсии в обработчике «Перед выгрузкой данных» (глобальный обработчик) выполните обратное преобразование:


// Восстановление списка из строки в правилах КД
Если Параметры.Свойство("СписокСтрокой") Тогда
    Параметры.Вставить("СписокОбъектов", ЗначениеИзСтрокиВнутр(Параметры.СписокСтрокой));
КонецЕсли;

Резюмируем: для реализации выгрузки по списку в КД 2.1 наиболее правильным путем является либо использование стандартных отборов (в режиме Толстого клиента), либо программная установка параметров через внешнюю обработку с использованием метода ВыгрузитьПоПравилу. Это позволяет сохранить прозрачность правил и обеспечить пользователю удобный интерфейс подбора данных.

← На главную