Панель администрирования УТ / Управление настройками регламентного задания / Модуль формы

файл

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	РазделениеВключено = ОбщегоНазначения.РазделениеВключено();
	
	ИмяМетаданныхРегламентногоЗадания = Параметры.ИмяМетаданныхРегламентногоЗадания;
	Если ПустаяСтрока(ИмяМетаданныхРегламентногоЗадания) Тогда
		ВызватьИсключение НСтр("ru = 'Не указано имя регламентного задания для настройки.'");
	КонецЕсли;
	МетаданныеДляПроверкиПравДоступаНаИзменение = Параметры.МетаданныеДляПроверкиПравДоступаНаИзменение;
	
	Если НЕ РазрешеноИзменение(МетаданныеДляПроверкиПравДоступаНаИзменение) Тогда
		Элементы.ТаблицаРегламентныеЗадания.ТолькоПросмотр = Истина;
		Элементы.ТаблицаРегламентныеЗаданияНастроитьРасписание.Доступность = Ложь;
	КонецЕсли;
	
	Элементы.ТаблицаРегламентныеЗаданияНастроитьРасписание.Видимость = Не РазделениеВключено;
	Заголовок = СтрШаблон(НСтр("ru = 'Настройка задания: %1'"), Метаданные.РегламентныеЗадания[ИмяМетаданныхРегламентногоЗадания].Представление());
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ЗагрузитьРегламентныеЗадания();
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	Если ИмяСобытия = "Запись_РегламентныеЗадания" Тогда
		
		ЗагрузитьРегламентныеЗадания(Параметр);
		
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаРегламентныеЗадания
&НаКлиенте
Процедура ТаблицаРегламентныеЗаданияПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа, Параметр)
	Отказ = Истина;
	
	ДобавитьСкопироватьИзменитьРегламентноеЗадание(?(Копирование, "Скопировать", "Добавить"));
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаРегламентныеЗаданияПередНачаломИзменения(Элемент, Отказ)
	Отказ = Истина;
	Если РазрешеноИзменение(МетаданныеДляПроверкиПравДоступаНаИзменение) Тогда
		ДобавитьСкопироватьИзменитьРегламентноеЗадание("Изменить");
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаРегламентныеЗаданияПередУдалением(Элемент, Отказ)
	Отказ = Истина;
	
	Если Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки.Количество() > 1 Тогда
		ПоказатьПредупреждение(, НСтр("ru = 'Выберите одно регламентное задание.'"));
		
	ИначеЕсли Элемент.ТекущиеДанные.Предопределенное Тогда
		ПоказатьПредупреждение(, НСтр("ru = 'Невозможно удалить предопределенное регламентное задание.'") );
	Иначе
		ПоказатьВопрос(
			Новый ОписаниеОповещения("ТаблицаРегламентныеЗаданияПередУдалениемЗавершение", ЭтотОбъект),
			НСтр("ru = 'Удалить регламентное задание?'"), РежимДиалогаВопрос.ДаНет);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьСкопироватьИзменитьРегламентноеЗадание(Знач Действие)
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("Действие",      Действие);
	
	Если Не Элементы.ТаблицаРегламентныеЗадания.ТекущиеДанные = Неопределено Тогда
		ПараметрыФормы.Вставить("Идентификатор", Элементы.ТаблицаРегламентныеЗадания.ТекущиеДанные.Идентификатор);
	КонецЕсли;
	
	ПараметрыФормы.Вставить("ИмяМетаданныхРегламентногоЗадания", ИмяМетаданныхРегламентногоЗадания);
   	ПараметрыФормы.Вставить("МетаданныеДляПроверкиПравДоступаНаИзменение", МетаданныеДляПроверкиПравДоступаНаИзменение);
	
	ОткрытьФорму("Обработка.ПанельАдминистрированияУТ.Форма.НастройкаРегламентногоЗадания", ПараметрыФормы, ЭтотОбъект);
	
КонецПроцедуры
#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура НастроитьРасписание(Команда)
	ТекущиеДанные = Элементы.ТаблицаРегламентныеЗадания.ТекущиеДанные;
	
	Если ТекущиеДанные = Неопределено Тогда
		ПоказатьПредупреждение(, НСтр("ru = 'Выберите регламентное задание.'"));
	
	ИначеЕсли Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки.Количество() > 1 Тогда
		ПоказатьПредупреждение(, НСтр("ru = 'Выберите одно регламентное задание.'"));
	Иначе
		Диалог = Новый ДиалогРасписанияРегламентногоЗадания(
			ПолучитьРасписание(ТекущиеДанные.Идентификатор));
		
		Диалог.Показать(Новый ОписаниеОповещения(
			"ОткрытьРасписаниеЗавершение", ЭтотОбъект, ТекущиеДанные));
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьРегламентныеЗадания(Команда)
	
	ЗагрузитьРегламентныеЗадания();

КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервереБезКонтекста
Процедура УстановитьРасписание(Знач ИдентификаторРегламентногоЗадания, Знач Расписание)
	
	УстановитьПривилегированныйРежим(Истина);
	
	РегламентныеЗаданияСервер.УстановитьРасписаниеРегламентногоЗадания(
		ИдентификаторРегламентногоЗадания,
		Расписание);

	УстановитьПривилегированныйРежим(Ложь);
	
КонецПроцедуры

// Установка нового расписания
// 
// Параметры:
// 	НовоеРасписание - РасписаниеРегламентногоЗадания
// 	ТекущиеДанные - ДанныеФормыЭлементКоллекции
&НаКлиенте
Процедура ОткрытьРасписаниеЗавершение(НовоеРасписание, ТекущиеДанные) Экспорт

	Если НовоеРасписание <> Неопределено Тогда

		Если РазделениеВключено 
			И НовоеРасписание.ПериодПовтораВТечениеДня > 0
			И НовоеРасписание.ПериодПовтораВТечениеДня < 3600 Тогда
			
			НовоеРасписание.ПериодПовтораВТечениеДня = 3600;
			
		КонецЕсли;
		
		УстановитьРасписание(ТекущиеДанные.Идентификатор, НовоеРасписание);
		ЗагрузитьРегламентныеЗадания(ТекущиеДанные.Идентификатор);
	КонецЕсли;
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьРасписание(Знач ИдентификаторРегламентногоЗадания)
	
	УстановитьПривилегированныйРежим(Истина);
	
	Возврат РегламентныеЗаданияСервер.РасписаниеРегламентногоЗадания(
		ИдентификаторРегламентногоЗадания);
	
КонецФункции

&НаСервере
Функция ЗагрузитьРегламентныеЗадания(ИдентификаторЗадания = Неопределено)

	Таблица =  РеквизитФормыВЗначение("ТаблицаРегламентныеЗадания");

	// Обновление таблицы РегламентныеЗадания и списка СписокВыбора регламентного задания для отбора.
	Если ИдентификаторЗадания = Неопределено Тогда
		РегламентноеЗадание = Метаданные.РегламентныеЗадания[ИмяМетаданныхРегламентногоЗадания];
		ПредставлениеРегламентногоЗадания = РегламентноеЗадание.Представление();
		Отбор = новый Структура("Метаданные", Метаданные.РегламентныеЗадания[ИмяМетаданныхРегламентногоЗадания]);
	Иначе	
		Отбор = новый Структура("УникальныйИдентификатор",Новый УникальныйИдентификатор(ИдентификаторЗадания));
	КонецЕсли;
	
	УстановитьПривилегированныйРежим(Истина);
	ТекущиеЗадания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор);
	УстановитьПривилегированныйРежим(Ложь);
	
	Если ИдентификаторЗадания = Неопределено Тогда
		Индекс = 0;
		Для Каждого Задание Из ТекущиеЗадания Цикл
			
			Идентификатор = Строка(РегламентныеЗаданияСервер.УникальныйИдентификатор(Задание));
			
			Если Индекс >= Таблица.Количество()
			 ИЛИ Таблица[Индекс].Идентификатор <> Идентификатор Тогда
				
				// Вставка нового задания.
				Обновляемое = Таблица.Вставить(Индекс);
			Иначе
				Обновляемое = Таблица[Индекс];
			КонецЕсли;
			
			ЗаполнитьЗначенияСвойств(Обновляемое, Задание);

			Обновляемое.Идентификатор = Идентификатор;
			
			Если ПустаяСтрока(Обновляемое.Наименование) Тогда
				Обновляемое.Наименование = Автонаименование(ПредставлениеРегламентногоЗадания, Задание.Параметры);
			КонецЕсли;
			
			Индекс = Индекс + 1;
		КонецЦикла;
	
		// Удаление лишних строк.
		Пока Индекс < Таблица.Количество() Цикл
			Таблица.Удалить(Индекс);
		КонецЦикла;
	Иначе
		
		Строки = Таблица.НайтиСтроки(
			Новый Структура("Идентификатор", ИдентификаторЗадания));
		
		Если Строки.Количество() > 0 
			И ТекущиеЗадания.Количество() > 0 Тогда
			
			ЗаполнитьЗначенияСвойств(Строки[0], ТекущиеЗадания[0]);
			Строки[0].Идентификатор = ИдентификаторЗадания;
			Если ПустаяСтрока(Строки[0].Наименование) Тогда
				Строки[0].Наименование = Автонаименование(ПредставлениеРегламентногоЗадания, ТекущиеЗадания[0].Параметры);
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
	ОбработатьРезультат(Новый Структура("Таблица", Таблица));
	
	Возврат Истина;
	
КонецФункции

&НаСервере
Процедура ОбработатьРезультат(Результат)
	
	ЗначениеВРеквизитФормы(Результат.Таблица, "ТаблицаРегламентныеЗадания");
	
	Элементы.ТаблицаРегламентныеЗадания.Обновить();
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаРегламентныеЗаданияПередУдалениемЗавершение(Ответ, Контекст) Экспорт
	
	Если Ответ = КодВозвратаДиалога.Да Тогда
		УдалитьРегламентноеЗаданиеВыполнитьНаСервере(
			Элементы.ТаблицаРегламентныеЗадания.ТекущиеДанные.Идентификатор);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УдалитьРегламентноеЗаданиеВыполнитьНаСервере(Знач Идентификатор)
	
	УстановитьПривилегированныйРежим(Истина);
	РегламентныеЗаданияСервер.УдалитьЗадание(Идентификатор);
	УстановитьПривилегированныйРежим(Ложь);
	
	ЗагрузитьРегламентныеЗадания();
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция РазрешеноИзменение(МетаданныеДляПроверкиПравДоступаНаИзменение)
	Результат = Истина;

	Для Каждого ЭлементДляПроверкиПрав Из МетаданныеДляПроверкиПравДоступаНаИзменение Цикл
        МетаданныеДляПроверкиПрав = Метаданные.НайтиПоПолномуИмени(ЭлементДляПроверкиПрав.Значение);
		Если ЗначениеЗаполнено(МетаданныеДляПроверкиПрав) И Не ПравоДоступа("Изменение", МетаданныеДляПроверкиПрав) Тогда
			Результат = Ложь;
			Прервать;
		КонецЕсли;	
	КонецЦикла;
	Возврат Результат;
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция АвтоНаименование(Представление, Параметры)
	
	СтрокаНаименования = Представление;
	
	Возврат СтрокаНаименования;
	
КонецФункции

#КонецОбласти

Связанные материалы