Запланировать не активные задания.
Процедура ЗапланироватьНеАктивныеЗадания() Экспорт
Запрос = Новый Запрос;
СправочникиЗаданий = ОчередьЗаданийСлужебныйПовтИсп.ПолучитьСправочникиЗаданий();
ТекстЗапроса = "";
Для Каждого СправочникЗаданий Из СправочникиЗаданий Цикл
Если Не ПустаяСтрока(ТекстЗапроса) Тогда
ТекстЗапроса = ТекстЗапроса + "
|
|ОБЪЕДИНИТЬ ВСЕ
|"
КонецЕсли;
Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(СправочникЗаданий.СоздатьЭлемент().Метаданные().ПолноеИмя(), РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда
ТекстЗапроса = ТекстЗапроса + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"ВЫБРАТЬ
| Очередь.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных,
| Очередь.Ссылка КАК Идентификатор,
| ЕСТЬNULL(Очередь.Шаблон, НЕОПРЕДЕЛЕНО) КАК Шаблон,
| ЕСТЬNULL(ЧасовыеПояса.Значение, """") КАК ЧасовойПояс,
| ВЫБОР
| КОГДА Очередь.Шаблон = ЗНАЧЕНИЕ(Справочник.ШаблоныЗаданийОчереди.ПустаяСсылка)
| ТОГДА Очередь.Расписание
| ИНАЧЕ Очередь.Шаблон.Расписание
| КОНЕЦ КАК Расписание,
| ВЫБОР
| КОГДА Очередь.Шаблон = ЗНАЧЕНИЕ(Справочник.ШаблоныЗаданийОчереди.ПустаяСсылка)
| ТОГДА Очередь.КоличествоПовторовПриАварийномЗавершении
| ИНАЧЕ Очередь.Шаблон.КоличествоПовторовПриАварийномЗавершении
| КОНЕЦ КАК КоличествоПовторовПриАварийномЗавершении,
| ВЫБОР
| КОГДА Очередь.Шаблон = ЗНАЧЕНИЕ(Справочник.ШаблоныЗаданийОчереди.ПустаяСсылка)
| ТОГДА Очередь.ИнтервалПовтораПриАварийномЗавершении
| ИНАЧЕ Очередь.Шаблон.ИнтервалПовтораПриАварийномЗавершении
| КОНЕЦ КАК ИнтервалПовтораПриАварийномЗавершении
|ИЗ
| %1 КАК Очередь
| ЛЕВОЕ СОЕДИНЕНИЕ Константа.ЧасовойПоясОбластиДанных КАК ЧасовыеПояса
| ПО Очередь.ОбластьДанныхВспомогательныеДанные = ЧасовыеПояса.ОбластьДанныхВспомогательныеДанные
|ГДЕ
| Очередь.СостояниеЗадания = ЗНАЧЕНИЕ(Перечисление.СостоянияЗаданий.НеАктивно)
| И Очередь.Использование"
, СправочникЗаданий.ПустаяСсылка().Метаданные().ПолноеИмя());
Иначе
ТекстЗапроса = ТекстЗапроса + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"ВЫБРАТЬ
| -1 КАК ОбластьДанных,
| Очередь.Ссылка КАК Идентификатор,
| НЕОПРЕДЕЛЕНО КАК Шаблон,
| """" КАК ЧасовойПояс,
| Очередь.Расписание КАК Расписание,
| Очередь.КоличествоПовторовПриАварийномЗавершении КАК КоличествоПовторовПриАварийномЗавершении,
| Очередь.ИнтервалПовтораПриАварийномЗавершении КАК ИнтервалПовтораПриАварийномЗавершении
|ИЗ
| %1 КАК Очередь
|ГДЕ
| Очередь.СостояниеЗадания = ЗНАЧЕНИЕ(Перечисление.СостоянияЗаданий.НеАктивно)
| И Очередь.Использование"
, СправочникЗаданий.ПустаяСсылка().Метаданные().ПолноеИмя());
КонецЕсли;
КонецЦикла;
Запрос.Текст = ТекстЗапроса;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если ЗначениеЗаполнено(Выборка.ЧасовойПояс) Тогда
ЧасовойПояс = Выборка.ЧасовойПояс;
Иначе
ЧасовойПояс = Неопределено;
КонецЕсли;
Если ЗначениеЗаполнено(Выборка.Шаблон) Тогда
ИмяМетода = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Выборка.Шаблон, "ИмяМетода");
Иначе
ИмяМетода = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Выборка.Идентификатор, "ИмяМетода");
КонецЕсли;
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(Выборка.Идентификатор.Метаданные().ПолноеИмя());
ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Идентификатор);
Блокировка.Заблокировать();
Задание = Выборка.Идентификатор.ПолучитьОбъект();
Расписание = Выборка.Расписание.Получить();
// Если это задания периодические (не одноразовые)
Если (Расписание <> Неопределено И (Расписание.ПериодПовтораДней <> 0 Или Расписание.ПериодПовтораВТечениеДня <> 0)) Тогда
Задание.ЗапланированныйМоментЗапуска = ПолучитьЗапланированныйМоментЗапускаЗадания(
Расписание, ЧасовойПояс, Задание.ДатаНачалаПоследнегоЗапуска, Задание.ДатаЗавершенияПоследнегоЗапуска);
Задание.НомерПопытки = 0;
Если ЗначениеЗаполнено(Задание.ЗапланированныйМоментЗапуска) Тогда
Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.Запланировано;
Иначе
Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.НеАктивно;
КонецЕсли;
Задание.ИсполняющееФоновоеЗадание = Неопределено;
Задание.ОбменДанными.Загрузка = Истина;
Задание.Записать();
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ТекстСообщения = НСтр("ru = 'Задание не удалось обновить
|ОбластьДанных: %1
|Имя метода: %2'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Строка(Выборка.ОбластьДанных), ИмяМетода);
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Обновление очереди заданий'",
ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ТекстСообщения);
КонецПопытки;
КонецЦикла;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ПолучитьЗапланированныйМоментЗапускаЗадания (БСП)
ПриОпределенииЗапланированногоМоментаЗапуска (БСП)
КонтрольАктивностиПользователей (БСП)
ИзменитьЗаданиеКонтрольАктивностиПользователей (БСП)
ЗапланироватьОбновлениеДанныхОбластей (БСП)
ВключитьЗаданиеКонтрольАктивностиПользователейПриНеобходимости (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)