1С БСП. Запуск фонового задания во внешней обработке с индикацией

В данной статье описан пример кода для запуска фонового задания из формы внешней обработки средствами 1С БСП с возможностью отображения индикации.

Описание используемых процедур

Данный пример кода реализован с использованием функционала Длительных операций 1С:Библиотеки стандартных подсистем версии 2.3.2 и выше.
В 1С БСП существует функционал для запуска фоновых заданий из дополнительных обработок в общем модуле ДлительныеОперации.
Основные процедуры функционала Длительных операций БСП, используемые в данном примере:
— Запуск экспортной функции внешней обработки происходит через функцию ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки, в которую необходимо передать данные для запуска: имя процедуры, ссылка на дополнительную обработку, имя обработки и другие;
— Процедура ДлительныеОперации.ВыполнитьВФоне: Запустить выполнение процедуры в фоновом задании, если это возможно;
— Функция ДлительныеОперации.ПрочитатьПрогресс: Считывает информацию о ходе выполнения фонового задания;
— Функция ДлительныеОперации.СообщитьПрогресс: Регистрирует информацию о ходе выполнения фонового задания;
— Процедура ДлительныеОперацииКлиент.ОжидатьЗавершение: Ожидать завершения выполнение процедуры в фоновом задании и открыть форму ожидания длительной операции.

Со всеми детальными описаниями и параметрами функций и процедур можно ознакомится в комментариях перед соответствующими процедурами в общих модулях.

Рассмотрим пример обработки.

Пример запуска процедуры внешней обработки в фоновом режиме с помощью функционала 1С БСП

В модуле объекта необходимо описать сведения о внешней обработке. Команда будет запускаться через команду формы.

Также вставим экспортную функцию, которая будет запускаться в фоновом задании. В качестве параметров у функции:
— СтруктураПараметров (тип Структура) — параметры, которые мы передали при запуске длительной операции;
— АдресРезультата (тип УникальныйИдентификатор) — Адрес временного хранилища, присвоенный при запуске задания, в котором будут записаны результаты работы процедуры.
В нашем примере на вход передается число — количество итераций, которое задается пользователем.
На выходе получаем массив чисел и помещаем во временное хранилище.

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

На форме добавляем команду, при выполнении которой будет запускаться фоновое задание.

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

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

Эту возможность можно реализовать несколькими способами, в данной же статье предлагается 2 варианта: с помощью редактирования общей формы конфигурации «ДлительнаяОперация» и с выводом индикации прямо на форму внешней обработки.

1. Вывод индикации в форме «ДлительнаяОперация».

Редактировать форму будем с помощью расширений. Важно отметить, что данная возможность использования расширений — замена произвольной процедуры в заимствованном модуле — стала реализована только в версии платформы 8.3.9, поэтому режим совместимости конфигурации и расширения должен быть 8.3.9 и выше или вообще отключен.
В форме добавляем в процедуру «ПриСозданииНаСервере» код по добавлению реквизита и элемента формы «Индикатор»:

Далее заменяем исполняемую в модуле общей формы процедуру, в которой происходит считывание прогресса выполнения и вывод информации на форму, и добавляем строку:

Таким образом, при запуске фонового задания будет открыта форма длительной операции с индикатором прогресса.

2. Вывод индикации в форме внешней обработки.

Для реализации данного способа добавим на форму 2 реквизита и соответствующих элемента: Индикатор (тип Число) и СтрокаСостояния (тип Строка).
Идея способа заключается в том, чтобы прочитать прогресс выполняемого задания в форме и вывести данные пользователю, не открывая форму длительной операции.
Для этого добавим Обработчик ожидания, который будет считывать прогресс и выводить его на форму, и саму процедуру считывания прогресса на сервере.

В ранее добавленные процедуры добавим код для работы индикации:
— в процедуре ЗапуститьВыполнение обнулим наши реквизиты при запуске нового задания, отключим необходимость открытия окна ожидания и подключим наш обработчик ожидания:

-в процедуре ОбработатьДанные добавим обработку прогресса при завершении выполнения задания:

Архив с обработкой и расширением:
ДлительныеОперацииВоВнешнейОбработке

Comments

So empty here ... leave a comment!

Добавить комментарий

Sidebar