Подключение к фоновым заданиям 1С
Случаются ситуации, что фоновое задание запущенное пользователем, продолжает работать и после выхода самого пользователя из 1С. Как же исключить повторный запуск фонового задания пользователем? Ну и заодно показать текущий прогресс выполнения задания. На самом деле всё оказалось просто. В 1С есть функционал получения полного списка выполняемых в текущий момент фоновых заданий:
1 |
ФоновыеЗадания.ПолучитьФоновыеЗадания(); |
После чего остаётся только пролистать все фоновые задания, идентифицировать нужное задание и передать его идентификатор в обработчик ожидания, который собственно и отображает например прогресс бар:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
&НаКлиенте Процедура ВыгрузкаКвитанцийНаБумаге(Команда) этаформа.ИндикаторВыгрузкаКвитанций=0; ЗапуститьФЗВыгрузкиКвитанций(); ПодключитьОбработчикОжидания("ИндикаторВыполненияВыгрузкиКвитанцийИсточник1",1,ложь); ПодключитьОбработчикОжидания("ИндикаторВыполненияВыгрузкиКвитанцийИсточник2",1,ложь); КонецПроцедуры &НаСервере Процедура ЗапуститьФЗВыгрузкиКвитанций() Фоновые = ФоновыеЗадания.ПолучитьФоновыеЗадания(); Для Каждого Фоновое из Фоновые Цикл если Фоновое.ИмяМетода="СК_ГР_ГеоаналитикаЗагрузки.ВыгрузитьКвитанцииВГеоаналитикуИсточник1" тогда если Фоновое.Состояние<>СостояниеФоновогоЗадания.ЗавершеноАварийно и Фоновое.Состояние<>СостояниеФоновогоЗадания.Завершено тогда сообщить("-предыдущее задание еще не завершено!"); объект.ФЗ_ВыгрузкаКвитанций = Фоновое.УникальныйИдентификатор; возврат; конецесли; конецесли; если Фоновое.ИмяМетода="СК_ГР_ГеоаналитикаЗагрузки.ВыгрузитьКвитанцииВГеоаналитикуИсточник2" тогда сообщить("-предыдущее задание еще не завершено!"); если Фоновое.Состояние<>СостояниеФоновогоЗадания.ЗавершеноАварийно и Фоновое.Состояние<>СостояниеФоновогоЗадания.Завершено тогда сообщить("-предыдущее задание еще не завершено!"); объект.ФЗ_ВыгрузкаКвитанций2 = Фоновое.УникальныйИдентификатор; возврат; конецесли; возврат; конецесли; конеццикла; Парм=Новый Структура("Период,ПроверятьНаличиевБД",объект.Период,объект.ПроверятьНаличиевБД); МассивПараметров = Новый Массив; МассивПараметров.Добавить(Парм); ФЗ = ФоновыеЗадания.Выполнить("СК_ГР_ГеоаналитикаЗагрузки.ВыгрузитьКвитанцииВГеоаналитикуИсточник1",МассивПараметров); объект.ФЗ_ВыгрузкаКвитанций = ФЗ.УникальныйИдентификатор; ФЗ2 = ФоновыеЗадания.Выполнить("СК_ГР_ГеоаналитикаЗагрузки.ВыгрузитьКвитанцииВГеоаналитикуИсточник2",МассивПараметров); объект.ФЗ_ВыгрузкаКвитанций2 = ФЗ2.УникальныйИдентификатор; КонецПроцедуры |
Т.е. если фоновое уже запущено — то просто получаем его идентификатор и отображаем прогресс бар. Если нет — запускаем