Как выгрузить определенный список документов через Конвертацию данных 2.0 на управляемых формах?

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

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

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

Почему не открывается форма настройки параметров?

Проанализируем архитектурные ограничения, с которыми связано такое поведение системы:

  1. Ограничение типов параметров в КД 2.0: В штатной таблице настройки параметров универсальной выгрузки поддерживаются только примитивные типы (Число, Строка, Дата, Булево). Коллекции значений (такие как СписокЗначений или Массив) интерактивно заполнить в стандартной таблице параметров невозможно.
  2. Клиент-серверное разделение на управляемых формах: В обычном приложении существовала возможность вызывать диалоги и открывать внешние формы непосредственно из обработчиков правил обмена. На управляемых формах весь процесс выгрузки данных выполняется исключительно на стороне сервера. Попытка открыть форму обработки из серверных обработчиков правил (Инициализация, Перед выгрузкой данных) приводит к исключению, так как интерактивные методы интерфейса на сервере недоступны.

Способ 1. Программный запуск выгрузки через обработку-обертку

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

Посмотрим на пример кода серверной процедуры выполнения выгрузки:


&НаСервере
Процедура ВыполнитьВыгрузкуНаСервере()
    
    // Создаем экземпляр обработки обмена данными
    ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
    
    // Задаем пути к файлам
    ОбработкаОбмена.ИмяФайлаПравил = ПутьКФайлуПравил;
    ОбработкаОбмена.ИмяФайлаВыгрузки = ПутьКФайлуВыгрузки;
    ОбработкаОбмена.РежимОбмена = "Выгрузка";
    
    // Выполняем чтение правил обмена
    ОбработкаОбмена.ПрочитатьПравилаОбмена();
    
    // Передаем сформированный список документов напрямую в структуру параметров
    // Параметр с именем СписокДокументов должен быть предварительно создан в КД 2.0
    ОбработкаОбмена.Параметры.Вставить("СписокДокументов", Объект.СписокВыгружаемыхДокументов);
    
    // Запускаем процесс выгрузки
    ОбработкаОбмена.ВыполнитьВыгрузку();
    
КонецПроцедуры

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


Если Параметры.СписокДокументов <> Неопределено И Параметры.СписокДокументов.Количество() > 0 Тогда
    Если Параметры.СписокДокументов.НайтиПоЗначению(Источник) = Неопределено Тогда
        Отказ = Истина;
    КонецЕсли;
КонецЕсли;

Способ 2. Выборка через произвольный алгоритм в ПВД

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

Разберем настройку по шагам:

  1. В конфигурации «Конвертация данных 2.0» откроем нужное Правило выгрузки данных (ПВД).
  2. Переключим способ выборки данных со «Стандартная выборка» на «Произвольный алгоритм».
  3. В обработчике «Перед обработкой правила» напишем текст запроса для выборки нужных ссылок и отправим их на выгрузку процедурой ВыгрузитьПоПравилу().

Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   Док.Ссылка КАК Ссылка
    |ИЗ
    |   Документ.РеализацияТоваровУслуг КАК Док
    |ГДЕ
    |   Док.Проведен = ИСТИНА
    |   И Док.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    |   И Док.Организация = &Организация";

Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
Запрос.УстановитьПараметр("Организация", Параметры.Организация);

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    ВыгрузитьПоПравилу(Выборка.Ссылка, , , , "РеализацияТоваровУслуг");
КонецЦикла;

Способ 3. Передача списка через строковый параметр с разделителями

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

Разберем алгоритм реализации:

  1. В КД 2.0 создаем параметр с типом Строка (например, СписокНомеровДокументов или СписокГУИД).
  2. Пользователь при запуске выгрузки заполняет строковый параметр значениями через точку с запятой (например: УТ-00001;УТ-00005;УТ-00012).
  3. В обработчике «Перед выгрузкой данных» преобразуем строку в массив и получаем массив ссылок:

Если ЗначениеЗаполнено(Параметры.СписокНомеровДокументов) Тогда
    МассивНомеров = СтрРазделить(Параметры.СписокНомеровДокументов, ";", Ложь);
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Док.Ссылка КАК Ссылка
        |ИЗ
        |   Документ.РеализацияТоваровУслуг КАК Док
        |ГДЕ
        |   Док.Номер В(&МассивНомеров)";
    Запрос.УстановитьПараметр("МассивНомеров", МассивНомеров);
    
    Параметры.Вставить("СписокСсылок", Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"));
КонецЕсли;
  1. В ПКО нужного документа в обработчике «Перед выгрузкой» накладываем фильтр:

Если Параметры.Свойство("СписокСсылок") И Параметры.СписокСсылок.Количество() > 0 Тогда
    Если Параметры.СписокСсылок.Найти(Источник) = Неопределено Тогда
        Отказ = Истина;
    КонецЕсли;
КонецЕсли;

Альтернативные решения

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

  1. Обработка «Выгрузка и загрузка данных XML»: Поставляется на диске ИТС и входит в состав БСП. В отличие от универсального обмена по правилам КД 2.0, данная обработка на управляемых формах использует систему компоновки данных (СКД), что позволяет пользователю настраивать произвольные отборы непосредственно по списку документов.
  2. Регистрация изменений на узле плана обмена: Если обмен между базами настроен через план обмена, нужные документы можно зарегистрировать к выгрузке программно с помощью метода ПланыОбмена.ЗарегистрироватьИзменения(Узел, ДокументСсылка), после чего выполнить штатную выгрузку по плану обмена.
← На главную