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