Имя: Пароль:
1C
 
Как внутри регламентного задания узнать что оно уже выполняется.
,
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 И Фоновое.Состояние = СостояниеФоновогоЗадания.Активно Тогда
            
            Возврат;
            
        КонецЕсли;    
            
        
    КонецЦикла;

.
Независимо от того, куда вы едете — это в гору и против ветра!