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