НайтиЗадания (БСП)

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

Найти задания. В локальном режиме работы возвращает регламентные задания, соответствующие отбору.

// В локальном режиме работы возвращает регламентные задания, соответствующие отбору.
// В модели сервиса - таблицу значений, в которой содержится описание найденных заданий
// в справочниках ОчередьЗаданий (если не установлены разделители) или ОчередьЗаданийОбластейДанных.
//
// Параметры:
//  Отбор - Структура - со свойствами: 
//          1) Общие для любого режима работы:
//             * УникальныйИдентификатор - УникальныйИдентификатор - идентификатор регламентного задания
//                                            в локальном режиме работы.
//                                       - СправочникСсылка.ОчередьЗаданий,
//                                         СправочникСсылка.ОчередьЗаданийОбластейДанных - идентификатор задания
//                                            очереди в модели сервиса.
//             * Метаданные              - ОбъектМетаданных: РегламентноеЗадание - метаданные регламентного задания.
//                                       - Строка - имя регламентного задания.
//             * Использование           - Булево - если Истина, задание включено.
//             * Ключ                    - Строка - прикладной идентификатор задания.
//          2) Возможные ключи только локального режима:
//             * Наименование            - Строка - наименование регламентного задания.
//             * Предопределенное        - Булево - если Истина, регламентное задание определено в метаданных.
//          3) Возможные ключи только для модели сервиса:
//             * ИмяМетода               - Строка - имя метода (или псевдоним) обработчика очереди задании.
//             * ОбластьДанных           - Число - значение разделителя области данных задания.
//             * СостояниеЗадания        - ПеречислениеСсылка.СостоянияЗаданий - состояние задания очереди.
//             * Шаблон                  - СправочникСсылка.ШаблоныЗаданийОчереди - шаблон задания, используется только
//                                            для разделенных заданий очереди.
//
// Возвращаемое значение:
//     Массив - в локальном режиме работы массив регламентных заданий.
//              см. описание метода РегламентноеЗадание в синтакс-помощнике.
//     ТаблицаЗначений - в модели сервиса таблица значений со свойствами:
//        * ИнтервалПовтораПриАварийномЗавершении - Число - Интервал в секундах, через который нужно перезапускать
//                                                     задание в случае его аварийного завершения.
//        * Использование                         - Булево - если Истина, задание включено.
//        * Ключ                                  - Строка - прикладной идентификатор задания.
//        * КоличествоПовторовПриАварийномЗавершении - Число - количество повторов при аварийном завершении задания.
//        * Параметры                             - Массив - параметры, передаваемые в обработчик задания.
//        * Расписание                            - Расписание - расписание задания.
//        * УникальныйИдентификатор               - УникальныйИдентификатор - идентификатор регламентного задания
//                                                     в локальном режиме работы.
//                                                - СправочникСсылка.ОчередьЗаданий,
//                                                  СправочникСсылка.ОчередьЗаданийОбластейДанных - идентификатор задания
//                                                     очереди в модели сервиса.
//        * ЗапланированныйМоментЗапуска          - Дата - дата и время запланированного запуска задания
//                                                     (в часовом поясе области данных).
//        * ИмяМетода                             - Строка - имя метода (или псевдоним) обработчика очереди задании.
//        * ОбластьДанных                         - Число - значение разделителя области данных задания.
//        * СостояниеЗадания                      - ПеречислениеСсылка.СостоянияЗаданий - состояние задания очереди.
//        * Шаблон                                - СправочникСсылка.ШаблоныЗаданийОчереди - шаблон задания,
//                                                     используется только для разделенных заданий очереди.
//        * ЭксклюзивноеВыполнение                - Булево - при установленном флаге задание будет выполнено 
//                                                     даже при установленной блокировке начала сеансов в области
//                                                     данных. Так же если в области есть задания с таким флагом
//                                                     сначала будут выполнены они.
//
Функция НайтиЗадания(Отбор) Экспорт
	
	ВызватьИсключениеЕслиНетПраваАдминистрирования();
	
	КопияОтбора = ОбщегоНазначения.СкопироватьРекурсивно(Отбор);
	
	Если ОбщегоНазначения.РазделениеВключено() Тогда
		
		МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса");
		Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ОчередьЗаданий") Тогда
			
			Если КопияОтбора.Свойство("УникальныйИдентификатор") И НЕ КопияОтбора.Свойство("Идентификатор") Тогда
				КопияОтбора.Вставить("Идентификатор", КопияОтбора.УникальныйИдентификатор);
			КонецЕсли;
			
			Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
				ОбластьДанных = МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса();
				КопияОтбора.Вставить("ОбластьДанных", ОбластьДанных);
			КонецЕсли;
			
			МодульОчередьЗаданий  = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий");
			ШаблоныЗаданийОчереди = МодульОчередьЗаданий.ШаблоныЗаданийОчереди();
			
			Если КопияОтбора.Свойство("Метаданные") Тогда
				Если ТипЗнч(КопияОтбора.Метаданные) = Тип("ОбъектМетаданных") Тогда
					Если ШаблоныЗаданийОчереди.Найти(КопияОтбора.Метаданные.Имя) <> Неопределено Тогда
						УстановитьПривилегированныйРежим(Истина);
						Шаблон = МодульОчередьЗаданий.ШаблонПоИмени(КопияОтбора.Метаданные.Имя);
						УстановитьПривилегированныйРежим(Ложь);
						КопияОтбора.Вставить("Шаблон", Шаблон);
					Иначе
						КопияОтбора.Вставить("ИмяМетода", КопияОтбора.Метаданные.ИмяМетода);
					КонецЕсли;
				Иначе
					МетаданныеРегламентноеЗадание = Метаданные.РегламентныеЗадания.Найти(КопияОтбора.Метаданные);
					Если МетаданныеРегламентноеЗадание <> Неопределено Тогда
						Если ШаблоныЗаданийОчереди.Найти(МетаданныеРегламентноеЗадание.Имя) <> Неопределено Тогда
							УстановитьПривилегированныйРежим(Истина);
							Шаблон = МодульОчередьЗаданий.ШаблонПоИмени(МетаданныеРегламентноеЗадание.Имя);
							УстановитьПривилегированныйРежим(Ложь);
							КопияОтбора.Вставить("Шаблон", Шаблон);
						Иначе
							КопияОтбора.Вставить("ИмяМетода", МетаданныеРегламентноеЗадание.ИмяМетода);
						КонецЕсли;
					КонецЕсли;
				КонецЕсли;
			ИначеЕсли КопияОтбора.Свойство("Идентификатор") 
				И (ТипЗнч(КопияОтбора.Идентификатор) = Тип("УникальныйИдентификатор")
				ИЛИ ТипЗнч(КопияОтбора.Идентификатор) = Тип("Строка")) Тогда
				
				Если ТипЗнч(КопияОтбора.Идентификатор) = Тип("Строка") Тогда
					КопияОтбора.Идентификатор = Новый УникальныйИдентификатор(КопияОтбора.Идентификатор);
				КонецЕсли;
				
				СправочникДляЗадания = МодульОчередьЗаданий.СправочникОчередьЗаданий();
				Если МодульРаботаВМоделиСервиса.ЭтоРазделеннаяКонфигурация() Тогда
					МодульОчередьЗаданийРазделениеДанных = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданийРазделениеДанных");
					ПереопределенныйСправочник = МодульОчередьЗаданийРазделениеДанных.ПриВыбореСправочникаДляЗадания(КопияОтбора);
					Если ПереопределенныйСправочник <> Неопределено Тогда
						СправочникДляЗадания = ПереопределенныйСправочник;
					КонецЕсли;
				КонецЕсли;
				КопияОтбора.Вставить("Идентификатор", СправочникДляЗадания.ПолучитьСсылку(КопияОтбора.Идентификатор));
			КонецЕсли;
			
			КопияОтбора.Удалить("Метаданные");
			СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(КопияОтбора);
			// Для обратной совместимости поле Идентификатор не удаляется.
			КопияСписка = СписокЗаданий.Скопировать();
			КопияСписка.Колонки.Добавить("УникальныйИдентификатор");
			Для Каждого Строка Из КопияСписка Цикл
				Строка.УникальныйИдентификатор = Строка.Идентификатор;
			КонецЦикла;
			
			Возврат КопияСписка;
			
		КонецЕсли;
	Иначе
		
		СписокЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания(КопияОтбора);
		
		Возврат СписокЗаданий;
		
	КонецЕсли;
	
КонецФункции

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

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

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

НайтиЗадание (БСП)

НайтиСертификат (БСП)

Найти значение в строке

НайтиСтрокиТаблицы (БСП)

НайтиУстановленныеПрограммы (БСП)

Найти основной договор

НайтиВариантыОтчетовДляВывода (БСП)

НайтиПорциюДляОбновления (БСП)

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз