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