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