Подключение к фоновым заданиям 1С
Случаются ситуации, что фоновое задание запущенное пользователем, продолжает работать и после выхода самого пользователя из 1С. Как же исключить повторный запуск фонового задания пользователем? Ну и заодно показать текущий прогресс выполнения задания. На самом деле всё оказалось просто. В 1С есть функционал получения полного списка выполняемых в текущий момент фоновых заданий:
ФоновыеЗадания.ПолучитьФоновыеЗадания();
После чего остаётся только пролистать все фоновые задания, идентифицировать нужное задание и передать его идентификатор в обработчик ожидания, который собственно и отображает например прогресс бар:
&НаКлиенте
Процедура ВыгрузкаКвитанцийНаБумаге(Команда)
этаформа.ИндикаторВыгрузкаКвитанций=0;
ЗапуститьФЗВыгрузкиКвитанций();
ПодключитьОбработчикОжидания("ИндикаторВыполненияВыгрузкиКвитанцийИсточник1",1,ложь);
ПодключитьОбработчикОжидания("ИндикаторВыполненияВыгрузкиКвитанцийИсточник2",1,ложь);
КонецПроцедуры
&НаСервере
Процедура ЗапуститьФЗВыгрузкиКвитанций()
Фоновые = ФоновыеЗадания.ПолучитьФоновыеЗадания();
Для Каждого Фоновое из Фоновые Цикл
если Фоновое.ИмяМетода="СК_ГР_ГеоаналитикаЗагрузки.ВыгрузитьКвитанцииВГеоаналитикуИсточник1" тогда
если Фоновое.Состояние<>СостояниеФоновогоЗадания.ЗавершеноАварийно и Фоновое.Состояние<>СостояниеФоновогоЗадания.Завершено тогда
сообщить("-предыдущее задание еще не завершено!");
объект.ФЗ_ВыгрузкаКвитанций = Фоновое.УникальныйИдентификатор;
возврат;
конецесли;
конецесли;
если Фоновое.ИмяМетода="СК_ГР_ГеоаналитикаЗагрузки.ВыгрузитьКвитанцииВГеоаналитикуИсточник2" тогда
сообщить("-предыдущее задание еще не завершено!");
если Фоновое.Состояние<>СостояниеФоновогоЗадания.ЗавершеноАварийно и Фоновое.Состояние<>СостояниеФоновогоЗадания.Завершено тогда
сообщить("-предыдущее задание еще не завершено!");
объект.ФЗ_ВыгрузкаКвитанций2 = Фоновое.УникальныйИдентификатор;
возврат;
конецесли;
возврат;
конецесли;
конеццикла;
Парм=Новый Структура("Период,ПроверятьНаличиевБД",объект.Период,объект.ПроверятьНаличиевБД);
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Парм);
ФЗ = ФоновыеЗадания.Выполнить("СК_ГР_ГеоаналитикаЗагрузки.ВыгрузитьКвитанцииВГеоаналитикуИсточник1",МассивПараметров);
объект.ФЗ_ВыгрузкаКвитанций = ФЗ.УникальныйИдентификатор;
ФЗ2 = ФоновыеЗадания.Выполнить("СК_ГР_ГеоаналитикаЗагрузки.ВыгрузитьКвитанцииВГеоаналитикуИсточник2",МассивПараметров);
объект.ФЗ_ВыгрузкаКвитанций2 = ФЗ2.УникальныйИдентификатор;
КонецПроцедуры
Т.е. если фоновое уже запущено — то просто получаем его идентификатор и отображаем прогресс бар. Если нет — запускаем