ЗапланироватьНеАктивныеЗадания (БСП)

Автор: 1С
ОбщийМодуль.ОчередьЗаданийСлужебный
БСП

Запланировать не активные задания.

Процедура ЗапланироватьНеАктивныеЗадания() Экспорт
	
	Запрос = Новый Запрос;
	
	СправочникиЗаданий = ОчередьЗаданийСлужебныйПовтИсп.ПолучитьСправочникиЗаданий();
	ТекстЗапроса = "";
	Для Каждого СправочникЗаданий Из СправочникиЗаданий Цикл
		
		Если Не ПустаяСтрока(ТекстЗапроса) Тогда
			
			ТекстЗапроса = ТекстЗапроса + "
			|
			|ОБЪЕДИНИТЬ ВСЕ
			|"
			
		КонецЕсли;
		
		Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(СправочникЗаданий.СоздатьЭлемент().Метаданные().ПолноеИмя(), РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда
			
			ТекстЗапроса = ТекстЗапроса + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			"ВЫБРАТЬ
			|	Очередь.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных,
			|	Очередь.Ссылка КАК Идентификатор,
			|	ЕСТЬ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
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ПолучитьЗапланированныйМоментЗапускаЗадания (БСП)

ПриОпределенииЗапланированногоМоментаЗапуска (БСП)

КонтрольАктивностиПользователей (БСП)

ИзменитьЗаданиеКонтрольАктивностиПользователей (БСП)

ОтменитьФоновоеЗадание (БСП)

ЗапланироватьОбновлениеДанныхОбластей (БСП)

ВключитьЗаданиеКонтрольАктивностиПользователейПриНеобходимости (БСП)

ЗапланироватьЗагрузкуДанных (БСП)

СделатьАктивнымЗавершение (БСП)

1С Менеджер конфигураций