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