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