Перенаправить задачи. Перенаправить задачи МассивЗадач новому исполнителю, указанному в структуре.
// Перенаправить задачи МассивЗадач новому исполнителю, указанному в структуре.
// ИнфоОПеренаправлении.
//
// Параметры:
// МассивЗадач - Массив - массив задач для перенаправления.
// ИнфоОПеренаправлении - Структура - содержит новые значения реквизитов адресации задачи.
// ТолькоПроверка - Булево - если Истина, то функция не будет выполнять
// физического перенаправления задач, а только
// проверит возможность перенаправления.
// МассивПеренаправленныхЗадач - Массив - массив перенаправленных задач.
// Может отличаться по составу элементов от
// массива МассивЗадач, если какие-то задачи
// не удалось перенаправить.
//
// Возвращаемое значение:
// Булево - Истина, если перенаправление выполнено успешно.
//
Функция ПеренаправитьЗадачи(Знач МассивЗадач, Знач ИнфоОПеренаправлении, Знач ТолькоПроверка = Ложь,
МассивПеренаправленныхЗадач = Неопределено) Экспорт
Результат = Истина;
СведенияОЗадачах = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(МассивЗадач, "БизнесПроцесс,Выполнена");
НачатьТранзакцию();
Попытка
Для Каждого Задача Из СведенияОЗадачах Цикл
Если Задача.Значение.Выполнена Тогда
Результат = Ложь;
Если ТолькоПроверка Тогда
ОтменитьТранзакцию();
Возврат Результат;
КонецЕсли;
КонецЕсли;
БизнесПроцессыИЗадачиСервер.ЗаблокироватьЗадачи(Задача.Ключ);
Если ЗначениеЗаполнено(Задача.Значение.БизнесПроцесс) И Не Задача.Значение.БизнесПроцесс.Пустая() Тогда
БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы(Задача.Значение.БизнесПроцесс);
КонецЕсли;
КонецЦикла;
Если ТолькоПроверка Тогда
Для Каждого Задача Из СведенияОЗадачах Цикл
ЗадачаОбъект = Задача.Ключ.ПолучитьОбъект();
ЗадачаОбъект.Выполнена = Ложь;
ЗадачаОбъект.ДополнительныеСвойства.Вставить("Перенаправление", Истина);
ЗадачаОбъект.ВыполнитьЗадачу();
КонецЦикла;
ОтменитьТранзакцию();
Возврат Результат;
КонецЕсли;
Для Каждого Задача Из СведенияОЗадачах Цикл
Если НЕ ЗначениеЗаполнено(МассивПеренаправленныхЗадач) Тогда
МассивПеренаправленныхЗадач = Новый Массив();
КонецЕсли;
// Не устанавливаем объектную блокировку на задачу Задача для того, чтобы
// позволить выполнять перенаправление по команде из формы этой задачи.
ЗадачаОбъект = Задача.Ключ.ПолучитьОбъект();
УстановитьПривилегированныйРежим(Истина);
НоваяЗадача = Задачи.ЗадачаИсполнителя.СоздатьЗадачу();
НоваяЗадача.Заполнить(ЗадачаОбъект);
ЗаполнитьЗначенияСвойств(НоваяЗадача, ИнфоОПеренаправлении,
"Исполнитель,РольИсполнителя,ОсновнойОбъектАдресации,ДополнительныйОбъектАдресации");
НоваяЗадача.Записать();
УстановитьПривилегированныйРежим(Ложь);
МассивПеренаправленныхЗадач.Добавить(НоваяЗадача.Ссылка);
ЗадачаОбъект.РезультатВыполнения = ИнфоОПеренаправлении.Комментарий;
ЗадачаОбъект.Выполнена = Ложь;
ЗадачаОбъект.ДополнительныеСвойства.Вставить("Перенаправление", Истина);
ЗадачаОбъект.ВыполнитьЗадачу();
УстановитьПривилегированныйРежим(Истина);
ПодчиненныеБизнесПроцессы = БизнесПроцессыИЗадачиСервер.ВыбратьБизнесПроцессыВедущейЗадачи(Задача.Ключ, Истина).Выбрать();
УстановитьПривилегированныйРежим(Ложь);
Пока ПодчиненныеБизнесПроцессы.Следующий() Цикл
БизнесПроцессОбъект = ПодчиненныеБизнесПроцессы.Ссылка.ПолучитьОбъект();
БизнесПроцессОбъект.ВедущаяЗадача = НоваяЗадача.Ссылка;
БизнесПроцессОбъект.Записать();
КонецЦикла;
ПодчиненныеБизнесПроцессы = БизнесПроцессыИЗадачиСервер.БизнесПроцессыГлавнойЗадачи(Задача.Ключ, Истина);
Для каждого ПодчиненныйБизнесПроцесс Из ПодчиненныеБизнесПроцессы Цикл
БизнесПроцессОбъект = ПодчиненныйБизнесПроцесс.ПолучитьОбъект();
БизнесПроцессОбъект.ГлавнаяЗадача = НоваяЗадача.Ссылка;
БизнесПроцессОбъект.Записать();
КонецЦикла;
ПриПеренаправленииЗадачи(ЗадачаОбъект, НоваяЗадача);
КонецЦикла;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
Результат = Ложь;
Если Не ТолькоПроверка Тогда
ВызватьИсключение;
КонецЕсли;
КонецПопытки;
Возврат Результат;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ПеренаправитьЗадачиЗавершение (БСП)
Сгибы листка (задача с собеседования)