Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Перезапись регламентного задания вызывает его выполнение

Перезапись регламентного задания вызывает его выполнение
Я
   Dwarrior
 
19.10.20 - 11:51
Добрый день!

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

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.