|
Как внутри регламентного задания узнать что оно уже выполняется. |
☑ |
0
ProgAL
22.09.15
✎
14:31
|
Добрый день.
Есть задача формировать документы по куче подразделений раз в день, утром. Задание выполняется несколькими фоновыми заданиями и чаще всего хорошо. Сам процесс занимает 1,5 часа. Но иногда сервер падает и нужно раз в полчаса перевыполнять регламентное задание и доформировывать оставшиеся документы.
Как внутри регламентного задания понять что оно уже/еще выполняется.
Нижеприведенный код определяет что задание уже выполняется т к по сути вызывается изнутри выполняющегося задания.
Фоновые = ФоновыеЗадания.ПолучитьФоновыеЗадания();
Для Каждого Фоновое из Фоновые Цикл
РегламентноеЗадание = Фоновое.РегламентноеЗадание;
Если РегламентноеЗадание <> Неопределено Тогда
Если СокрЛП(РегламентноеЗадание.Наименование) = "Формирование внутренних заказов с отбором" Тогда
Возврат; // задание выполняется, еще раз выполнять не нужно
КонецЕсли;
КонецЕсли;
КонецЦикла;
|
|
1
Spieluhr
22.09.15
✎
16:18
|
ключ
|
|
2
Симпатяга
22.09.15
✎
16:20
|
(0) Есть стандартная обработка 1с. Консоль заданий.
Она как раз пишет, когда задание выполняется.
Стоит посмотреть её код.
|
|
3
Fragster
гуру
22.09.15
✎
16:21
|
(2) нет, правильнее (1). Задаем ключ равным подразделению. второй раз платформа сама не даст запустить задание.
|
|
4
Симпатяга
22.09.15
✎
16:34
|
Регламентные = РегламентныеЗадания.ПолучитьРегламентныеЗадания();
Для Каждого Регламентное из Регламентные Цикл
ПоследнееЗадание = Регламентное.ПоследнееЗадание;
Сообщить(ПоследнееЗадание.Состояние);
Конеццикла
(3) чем не устраивает?
|
|
5
ProgAL
22.09.15
✎
16:40
|
(4) Делал. Оно само себя определяет как активное. Поэтому некорректно.
|
|
6
VikingKosmo
22.09.15
✎
16:45
|
(5) ответ в (1)
|
|
7
ProgAL
22.09.15
✎
17:19
|
(3) А как это сделать? У меня ключ задан в виде числа.
|
|
8
ProgAL
23.09.15
✎
12:06
|
Получилось сделать так - в процедуре, которая выполняется регламентным заданием, пишем следующий код
НаборПараметров = Новый Массив;
НаборПараметров.Добавить(ТаблицаПодразделенийДляПередачиВЗадание);
НаборПараметров.Добавить(КомментарийВнутреннегоЗаказа);
НаборПараметров.Добавить(ПостроительВнутреннегоЗаказа);
НаборПараметров.Добавить(ВыбВариантНастроек);
// запуск фонового задания
Задание = ФоновыеЗадания.Выполнить("омРегламентныеЗадания.РассчитатьИСоздатьВнутрЗаказ", НаборПараметров, "уник_фвз_" + НомерПотока);
важен 3-й параметр.
В начале этой же процедуры пишем следующий код
Фоновые = ФоновыеЗадания.ПолучитьФоновыеЗадания();
Для Каждого Фоновое из Фоновые Цикл
Если Найти(Фоновое.Ключ, "уник_фвз_") > 0 И Фоновое.Состояние = СостояниеФоновогоЗадания.Активно Тогда
Возврат;
КонецЕсли;
КонецЦикла;
.
|
|