Имя: Пароль:
1C
1С v8
Перезапись регламентного задания вызывает его выполнение
0 Dwarrior
 
19.10.20
11:51
Добрый день!

Есть самодельная рассылка SMS через регламентное задание. Рассылка каждый день в 10:00. Так вот, если изменить настройку рассылки, вызвав тем самым перезапись регл. задания (Название, расписание), то оно выполняется вновь, даже если сегодня уже выполнялось. Как это побороть?
Вот эта процедура обновляет данные РЗ при записи настройки рассылки:

Процедура ОбновитьДанныеРегламентногоЗадания(Отказ, РасписаниеРегламентногоЗадания, ТекущийОбъект) Экспорт
    
    // Получаем регламентное задание по идентификатору, если объект не находим, то создаем новый.
    РегламентноеЗаданиеОбъект = СоздатьРегламентноеЗаданиеПриНеобходимости(Отказ, ТекущийОбъект);
    
    Если Отказ Тогда
        Возврат;
    КонецЕсли;
    
    // обновляем свойства РЗ
    УстановитьПараметрыРегламентногоЗадания(РегламентноеЗаданиеОбъект, РасписаниеРегламентногоЗадания, ТекущийОбъект);
    
    // Записываем измененное задание.
    ЗаписатьРегламентноеЗадание(Отказ, РегламентноеЗаданиеОбъект);
    
    // Запоминаем GUID регламентное задания в реквизите объекта.
    ТекущийОбъект.РегламентноеЗаданиеGUID = Строка(РегламентноеЗаданиеОбъект.УникальныйИдентификатор);
    
КонецПроцедуры
1 Dwarrior
 
19.10.20
11:52
Это было и на платформе 8.1 и на платформе 8.3
2 Айвонттубифри
 
19.10.20
12:05
(0) Тоже с этим сталкивалась. Послушаю советы...
3 Dwarrior
 
19.10.20
15:57
Никто не сталкивался?
4 Dwarrior
 
19.10.20
15:58
Даже если выключить задачу и снова включить в типовых БСПшных "Администрирование - Обслуживание - Регламентные и фоновые задания" - то задание выполняется. Т.е. это дело в самом механизме регл. заданий что ли?
5 fisher
 
19.10.20
16:06
Все сталкивались. Все с этим живут. Есть там какая-то особенность связанная с анализом ежедневного расписания, но подробностей и можно ли это обойти - не помню.
Я иногда это использую для немедленного перезапуска если нужно :) В консоли деактивировал/активировал - и пошел процесс.
6 fisher
 
19.10.20
16:11
А в самопальном справочнике рассылок выкручивался так - программный код рассылки у меня тоже в справочнике рассылок хранился :)
Поэтому когда надо было поменять регламент - я делал обработчик пустым. Т.е. регламент отрабатывал вне очереди, но ничего при этом не делал. А потом втыкал текст обработчика в элемент справочника, но записывал его уже без перезаписи регламента :) Выживал как мог, короче.
7 Philix
 
19.10.20
18:25
В расписании регламентного задания есть дата начала его выполнения. Через него указывай дату первого правильного запуска при каждой перезаписи. Но это помогает при ежедневных заданиях. Если оно более частое (например, ежечасное), то надо еще со временем с начала играть в день перезаписи, и к вечеру не забыть поставить нормальное время начала работы.
8 Dwarrior
 
19.10.20
21:03
(7)  Спасибо, так и делал в общем-то.
(6)  Спасибо, это идея. Меняем расписание при пустом коде, а потом записываем код.

Жаль что приходится так выкручиваться в казалось бы простом деле
9 Serg_1960
 
19.10.20
21:36
(0) Имхо, нет ничего проще, чем хранить дату/время последнего запуска задания - читается и проверяется в начале, запоминается и перезаписывается в конце.
10 fisher
 
20.10.20
10:14
(8) Если динамические обработчики не нужны, тогда можно просто при изменении расписания устанавливать признак у рассылки и по этому признаку в обработчике ничего не делать, кроме того что сбрасывать этот признак. Тогда при очередном выполнении по расписанию все уже пройдет штатно.
(9) И как ты будешь относительно прошлого времени запуска понимать - штатный это запуск или нет? Там не все так просто. Во-первых, придется анализировать расписание. Во-вторых, возможны сдвиги относительно расписания (из-за долгого выполнения или аварийных перезапусках).
11 fisher
 
20.10.20
10:16
О! Можно еще проще. Хранить в справочнике рассылок не дату/время последнего запуска, а дату/время изменения регламентного задания. И в обработчике ее проверять - если, скажем, прошло не больше минуты - значит это фальстарт и его не обрабатываем.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс