ОбновитьЗаданияОчередиПоШаблонам (БСП)

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

Обновить задания очереди по шаблонам. Обновляет задания очереди созданные на основе шаблонов.

///  Обновляет задания очереди созданные на основе шаблонов.
Процедура ОбновитьЗаданияОчередиПоШаблонам(Параметры = Неопределено) Экспорт
	
	Если НЕ РаботаВМоделиСервиса.РазделениеВключено() Тогда
		Возврат;
	КонецЕсли;
	
	Если Параметры = Неопределено Тогда
		Параметры = Новый Структура;
		Параметры.Вставить("МонопольныйРежим", Истина);
	КонецЕсли;
	
	ЗапускВМонопольномРежиме = Параметры.МонопольныйРежим;
	
	Блокировка = Новый БлокировкаДанных;
	Блокировка.Добавить("Справочник.ОчередьЗаданийОбластейДанных");
	
	НачатьТранзакцию();
	Попытка
		Блокировка.Заблокировать();
		
		ИзмененияШаблонов = ОбновитьШаблоныЗаданийОчереди(Параметры);
		Если НЕ ЗапускВМонопольномРежиме 
			И Параметры.МонопольныйРежим Тогда
			
			ОтменитьТранзакцию();
			Возврат;
		КонецЕсли;
		
		Если ИзмененияШаблонов.Удаленные.Количество() > 0
			ИЛИ ИзмененияШаблонов.ДобавленныеИзмененные.Количество() > 0 Тогда
			
			// Удаление заданий по удаленным шаблонам.
			Запрос = Новый Запрос(
			"ВЫБРАТЬ
			|	Очередь.Ссылка
			|ИЗ
			|	Справочник.ОчередьЗаданийОбластейДанных КАК Очередь
			|ГДЕ
			|	Очередь.Шаблон В(&УдаленныеШаблоны)");
			Запрос.УстановитьПараметр("УдаленныеШаблоны", ИзмененияШаблонов.Удаленные);
			
			Выборка = Запрос.Выполнить().Выбрать();
			Пока Выборка.Следующий() Цикл
				
				Задание = Выборка.Ссылка.ПолучитьОбъект();
				Задание.ОбменДанными.Загрузка = Истина;
				Задание.Удалить();
				
			КонецЦикла;
			
			// Добавление заданий по добавленным шаблонам.
			ДобавленныеИзмененные = ИзмененияШаблонов.ДобавленныеИзмененные;
			
			Запрос = Новый Запрос(
			"ВЫБРАТЬ
			|	Области.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных,
			|	Очередь.Ссылка КАК Идентификатор,
			|	Шаблоны.Ссылка КАК Шаблон,
			|	ЕСТЬNULL(Очередь.ДатаНачалаПоследнегоЗапуска, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаНачалаПоследнегоЗапуска,
			|	ЧасовыеПояса.Значение КАК ЧасовойПояс
			|ИЗ
			|	РегистрСведений.ОбластиДанных КАК Области
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ШаблоныЗаданийОчереди КАК Шаблоны
			|		ПО (Шаблоны.Ссылка В (&ДобавленныеИзмененныеШаблоны))
			|			И (Области.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.Используется))
			|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОчередьЗаданийОбластейДанных КАК Очередь
			|		ПО Области.ОбластьДанныхВспомогательныеДанные = Очередь.ОбластьДанныхВспомогательныеДанные
			|			И (Шаблоны.Ссылка = Очередь.Шаблон)
			|		ЛЕВОЕ СОЕДИНЕНИЕ Константа.ЧасовойПоясОбластиДанных КАК ЧасовыеПояса
			|		ПО Области.ОбластьДанныхВспомогательныеДанные = ЧасовыеПояса.ОбластьДанныхВспомогательныеДанные");
			Запрос.УстановитьПараметр("ДобавленныеИзмененныеШаблоны", ДобавленныеИзмененные.ВыгрузитьКолонку("Ссылка"));
			
			Выборка = Запрос.Выполнить().Выбрать();
			Пока Выборка.Следующий() Цикл
				
				СтрокаШаблона = ДобавленныеИзмененные.Найти(Выборка.Шаблон, "Ссылка");
				Если СтрокаШаблона = Неопределено Тогда
					ШаблонСообщения = НСтр("ru = 'При обновлении не найден шаблон задания %1'");
					ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Выборка.Ссылка);
					ВызватьИсключение(ТекстСообщения);
				КонецЕсли;
				
				Если ЗначениеЗаполнено(Выборка.Идентификатор) Тогда
					Задание = Выборка.Идентификатор.ПолучитьОбъект();
				Иначе
					
					Задание = Справочники.ОчередьЗаданийОбластейДанных.СоздатьЭлемент();
					Задание.Шаблон = Выборка.Шаблон;
					Задание.ОбластьДанныхВспомогательныеДанные = Выборка.ОбластьДанных;
					
				КонецЕсли;
				
				Задание.Использование = СтрокаШаблона.Использование;
				Задание.Ключ = СтрокаШаблона.Ключ;
				
				Задание.ЗапланированныйМоментЗапуска = 
					ОчередьЗаданийСлужебный.ПолучитьЗапланированныйМоментЗапускаЗадания(
						СтрокаШаблона.Расписание,
						Выборка.ЧасовойПояс,
						Выборка.ДатаНачалаПоследнегоЗапуска);
						
				Если ЗначениеЗаполнено(Задание.ЗапланированныйМоментЗапуска) Тогда
					Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.Запланировано;
				Иначе
					Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.НеЗапланировано;
				КонецЕсли;
				
				Задание.Записать();
				
			КонецЦикла;
		
		КонецЕсли;
		
		ЗафиксироватьТранзакцию();
	Исключение
		ОтменитьТранзакцию();
		ВызватьИсключение;
	КонецПопытки;
	
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

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

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

ШаблоныЗаданийОчереди (БСП)

ШаблонПоИмени (БСП)

ПриПолученииСпискаШаблонов (БСП)

СоздатьЗаданияОчередиПоШаблонамВТекущейОбласти (БСП)

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

ОбработатьОчередьЗаданий (БСП)

ПараметрыЗаданийОчереди (БСП)

УдалитьЗадание (БСП)

ПодготовитьДанные (БСП)

TurboConf ИР адаптер 2.63