Files
T
2024-05-21 14:30:00 +03:00

577 lines
33 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2024, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область ПрограммныйИнтерфейс
// Получить структуру с описанием формы выполнения задачи.
//
// Параметры:
// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя
//
// Возвращаемое значение:
// см. БизнесПроцессыИЗадачиПереопределяемый.ПриПолученииФормыВыполненияЗадачи.ПараметрыФормы
//
Функция ФормаВыполненияЗадачи(Знач ЗадачаСсылка) Экспорт
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("БизнесПроцессыИЗадачиВызовСервера.ФормаВыполненияЗадачи",
"ЗадачаСсылка", ЗадачаСсылка, Тип("ЗадачаСсылка.ЗадачаИсполнителя"));
Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗадачаСсылка, "БизнесПроцесс,ТочкаМаршрута");
Если Реквизиты.БизнесПроцесс = Неопределено ИЛИ Реквизиты.БизнесПроцесс.Пустая() Тогда
Возврат Новый Структура();
КонецЕсли;
ТипБизнесПроцесса = Реквизиты.БизнесПроцесс.Метаданные(); // ОбъектМетаданныхБизнесПроцесс
ПараметрыФормы = БизнесПроцессы[ТипБизнесПроцесса.Имя].ФормаВыполненияЗадачи(ЗадачаСсылка,
Реквизиты.ТочкаМаршрута);
БизнесПроцессыИЗадачиПереопределяемый.ПриПолученииФормыВыполненияЗадачи(
ТипБизнесПроцесса.Имя, ЗадачаСсылка, Реквизиты.ТочкаМаршрута, ПараметрыФормы);
Возврат ПараметрыФормы;
КонецФункции
// Проверяет, находится ли в ячейке отчета ссылка на задачу и в параметре
// ЗначениеРасшифровки возвращает значение расшифровки.
//
// Параметры:
// Расшифровка - Строка - имя ячейки.
// ДанныеРасшифровкиОтчета - Строка - адрес во временном хранилище.
// ЗначениеРасшифровки - ЗадачаСсылка.ЗадачаИсполнителя
// - Произвольный - значение расшифровки из ячейки.
//
// Возвращаемое значение:
// Булево - Истина, если это задача исполнителю.
//
Функция ЭтоЗадачаИсполнителю(Знач Расшифровка, Знач ДанныеРасшифровкиОтчета, ЗначениеРасшифровки) Экспорт
ДанныеРасшифровкиОбъект = ПолучитьИзВременногоХранилища(ДанныеРасшифровкиОтчета); // ДанныеРасшифровкиКомпоновкиДанных
ЗначениеРасшифровки = ДанныеРасшифровкиОбъект.Элементы[Расшифровка].ПолучитьПоля()[0].Значение;
Возврат ТипЗнч(ЗначениеРасшифровки) = Тип("ЗадачаСсылка.ЗадачаИсполнителя");
КонецФункции
// Выполнить задачу ЗадачаСсылка, при необходимости выполнив обработчик.
// ОбработкаВыполненияПоУмолчанию модуля менеджера бизнес-процесса,
// к которому относится задача ЗадачаСсылка.
//
// Параметры:
// ЗадачаСсылка - ЗадачаСсылка
// ДействиеПоУмолчанию - Булево - признак необходимости вызова процедуры
// ОбработкаВыполненияПоУмолчанию у бизнес-процесса задачи.
//
Процедура ВыполнитьЗадачу(ЗадачаСсылка, ДействиеПоУмолчанию = Ложь) Экспорт
НачатьТранзакцию();
Попытка
БизнесПроцессыИЗадачиСервер.ЗаблокироватьЗадачи(ЗадачаСсылка);
СведенияЗадачи = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗадачаСсылка, "Выполнена, БизнесПроцесс, ТочкаМаршрута");
Если СведенияЗадачи.Выполнена Тогда
ВызватьИсключение НСтр("ru = 'Задача уже была выполнена ранее.'");
КонецЕсли;
Если ДействиеПоУмолчанию
И СведенияЗадачи.БизнесПроцесс <> Неопределено
И Не СведенияЗадачи.БизнесПроцесс.Пустая() Тогда
ТипБизнесПроцесса = СведенияЗадачи.БизнесПроцесс.Метаданные(); // ОбъектМетаданныхБизнесПроцесс
БизнесПроцессы[ТипБизнесПроцесса.Имя].ОбработкаВыполненияПоУмолчанию(ЗадачаСсылка,
СведенияЗадачи.БизнесПроцесс, СведенияЗадачи.ТочкаМаршрута);
КонецЕсли;
ЗадачаОбъект = ЗадачаСсылка.ПолучитьОбъект();
ЗадачаОбъект.Выполнена = Ложь;
ЗадачаОбъект.ВыполнитьЗадачу();
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
// Перенаправить задачи МассивЗадач новому исполнителю, указанному в структуре ИнфоОПеренаправлении.
//
// Параметры:
// ПеренаправляемыеЗадачи - Массив из ЗадачаСсылка.ЗадачаИсполнителя
// ИнфоОПеренаправлении - Структура - новые значения реквизитов адресации задачи.
// ТолькоПроверка - Булево - если Истина, то функция не будет выполнять
// физического перенаправления задач, а только
// проверит возможность перенаправления.
// ПеренаправленныеЗадачи - Массив из ЗадачаСсылка.ЗадачаИсполнителя - перенаправленные задачи.
// Может отличаться по составу элементов от массива
// ПеренаправляемыеЗадачи, если не все задачи удалось перенаправить.
//
// Возвращаемое значение:
// Булево - Истина, если перенаправление выполнено успешно.
//
Функция ПеренаправитьЗадачи(Знач ПеренаправляемыеЗадачи, Знач ИнфоОПеренаправлении, Знач ТолькоПроверка = Ложь,
ПеренаправленныеЗадачи = Неопределено) Экспорт
Результат = Истина;
СведенияОЗадачах = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ПеренаправляемыеЗадачи, "БизнесПроцесс,Выполнена");
НачатьТранзакцию();
Попытка
Для Каждого Задача Из СведенияОЗадачах Цикл
Если Задача.Значение.Выполнена Тогда
Результат = Ложь;
Если ТолькоПроверка Тогда
ОтменитьТранзакцию();
Возврат Результат;
КонецЕсли;
КонецЕсли;
БизнесПроцессыИЗадачиСервер.ЗаблокироватьЗадачи(Задача.Ключ);
Если ЗначениеЗаполнено(Задача.Значение.БизнесПроцесс) И Не Задача.Значение.БизнесПроцесс.Пустая() Тогда
БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы(Задача.Значение.БизнесПроцесс);
КонецЕсли;
КонецЦикла;
Если ТолькоПроверка Тогда
Для Каждого Задача Из СведенияОЗадачах Цикл
ЗадачаОбъект = Задача.Ключ.ПолучитьОбъект();
ЗадачаОбъект.Выполнена = Ложь;
ЗадачаОбъект.ДополнительныеСвойства.Вставить("Перенаправление", Истина);
ЗадачаОбъект.ДополнительныеСвойства.Вставить("ТолькоПроверка", Истина);
ЗадачаОбъект.ВыполнитьЗадачу();
КонецЦикла;
ОтменитьТранзакцию();
Возврат Результат;
КонецЕсли;
Для Каждого Задача Из СведенияОЗадачах Цикл
Если НЕ ЗначениеЗаполнено(ПеренаправленныеЗадачи) Тогда
ПеренаправленныеЗадачи = Новый Массив();
КонецЕсли;
// Не устанавливаем объектную блокировку на задачу Задача для того, чтобы
// позволить выполнять перенаправление по команде из формы этой задачи.
ЗадачаОбъект = Задача.Ключ.ПолучитьОбъект();
УстановитьПривилегированныйРежим(Истина);
НоваяЗадача = Задачи.ЗадачаИсполнителя.СоздатьЗадачу();
НоваяЗадача.Заполнить(ЗадачаОбъект);
ЗаполнитьЗначенияСвойств(НоваяЗадача, ИнфоОПеренаправлении,
"Исполнитель,РольИсполнителя,ОсновнойОбъектАдресации,ДополнительныйОбъектАдресации");
НоваяЗадача.Записать();
УстановитьПривилегированныйРежим(Ложь);
ПеренаправленныеЗадачи.Добавить(НоваяЗадача.Ссылка);
ЗадачаОбъект.РезультатВыполнения = ИнфоОПеренаправлении.Комментарий;
ЗадачаОбъект.Выполнена = Ложь;
ЗадачаОбъект.ДополнительныеСвойства.Вставить("Перенаправление", Истина);
ЗадачаОбъект.ВыполнитьЗадачу();
УстановитьПривилегированныйРежим(Истина);
ПодчиненныеБизнесПроцессы = БизнесПроцессыИЗадачиСервер.ВыбратьБизнесПроцессыВедущейЗадачи(Задача.Ключ, Истина).Выбрать();
УстановитьПривилегированныйРежим(Ложь);
Пока ПодчиненныеБизнесПроцессы.Следующий() Цикл
БизнесПроцессОбъект = ПодчиненныеБизнесПроцессы.Ссылка.ПолучитьОбъект();
БизнесПроцессОбъект.ВедущаяЗадача = НоваяЗадача.Ссылка;
БизнесПроцессОбъект.Записать();
КонецЦикла;
УстановитьПривилегированныйРежим(Истина);
ПодчиненныеБизнесПроцессы = БизнесПроцессыИЗадачиСервер.БизнесПроцессыГлавнойЗадачи(Задача.Ключ, Истина);
УстановитьПривилегированныйРежим(Ложь);
Для каждого ПодчиненныйБизнесПроцесс Из ПодчиненныеБизнесПроцессы Цикл
БизнесПроцессОбъект = ПодчиненныйБизнесПроцесс.ПолучитьОбъект();
БизнесПроцессОбъект.ГлавнаяЗадача = НоваяЗадача.Ссылка;
БизнесПроцессОбъект.Записать();
КонецЦикла;
ПриПеренаправленииЗадачи(ЗадачаОбъект, НоваяЗадача);
КонецЦикла;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
Результат = Ложь;
Если Не ТолькоПроверка Тогда
ВызватьИсключение;
КонецЕсли;
КонецПопытки;
Возврат Результат;
КонецФункции
// Отмечает указанные бизнес-процессы как активные.
//
// Параметры:
// БизнесПроцессы - Массив из ОпределяемыйТип.БизнесПроцесс
//
Процедура СделатьАктивнымБизнесПроцессы(БизнесПроцессы) Экспорт
НачатьТранзакцию();
Попытка
БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы(БизнесПроцессы);
Для каждого БизнесПроцесс Из БизнесПроцессы Цикл
СделатьАктивнымБизнесПроцесс(БизнесПроцесс);
КонецЦикла;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
// Отмечает указанный бизнес-процесс как активный.
//
// Параметры:
// БизнесПроцесс - ОпределяемыйТип.БизнесПроцесс
//
Процедура СделатьАктивнымБизнесПроцесс(БизнесПроцесс) Экспорт
Если ТипЗнч(БизнесПроцесс) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
Возврат;
КонецЕсли;
НачатьТранзакцию();
Попытка
БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы(БизнесПроцесс);
Объект = БизнесПроцесс.ПолучитьОбъект();
Если Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Активен Тогда
Если Объект.Завершен Тогда
ВызватьИсключение НСтр("ru = 'Невозможно сделать активными завершенные бизнес-процессы.'");
КонецЕсли;
Если Не Объект.Стартован Тогда
ВызватьИсключение НСтр("ru = 'Невозможно сделать активными не стартовавшие бизнес-процессы.'");
КонецЕсли;
ВызватьИсключение НСтр("ru = 'Бизнес-процесс уже активен.'");
КонецЕсли;
Объект.Заблокировать();
Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Активен;
Объект.Записать(); // АПК:1327 Блокировка установлена ранее в БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы.
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
// Отмечает указанные бизнес-процессы как остановленные.
//
// Параметры:
// БизнесПроцессы - Массив из ОпределяемыйТип.БизнесПроцесс
//
Процедура ОстановитьБизнесПроцессы(БизнесПроцессы) Экспорт
НачатьТранзакцию();
Попытка
БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы(БизнесПроцессы);
Для каждого БизнесПроцесс Из БизнесПроцессы Цикл
ОстановитьБизнесПроцесс(БизнесПроцесс);
КонецЦикла;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ЗаписьЖурналаРегистрации(БизнесПроцессыИЗадачиСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
// Отмечает указанный бизнес-процесс как остановленный.
//
// Параметры:
// БизнесПроцесс - ОпределяемыйТип.БизнесПроцесс
//
Процедура ОстановитьБизнесПроцесс(БизнесПроцесс) Экспорт
Если ТипЗнч(БизнесПроцесс) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
Возврат;
КонецЕсли;
НачатьТранзакцию();
Попытка
БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы(БизнесПроцесс);
Объект = БизнесПроцесс.ПолучитьОбъект();
Если Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Остановлен Тогда
Если Объект.Завершен Тогда
ВызватьИсключение НСтр("ru = 'Невозможно остановить завершенные бизнес-процессы.'");
КонецЕсли;
Если Не Объект.Стартован Тогда
ВызватьИсключение НСтр("ru = 'Невозможно остановить не стартовавшие бизнес-процессы.'");
КонецЕсли;
ВызватьИсключение НСтр("ru = 'Бизнес-процесс уже остановлен.'");
КонецЕсли;
Объект.Заблокировать();
Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Остановлен;
Объект.Записать(); // АПК:1327 Блокировка установлена ранее в БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы.
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
// Отмечает указанные задачи как принятые к исполнению.
//
// Параметры:
// Задачи - Массив из ЗадачаСсылка.ЗадачаИсполнителя
//
Процедура ПринятьЗадачиКИсполнению(Задачи) Экспорт
НовыйМассивЗадач = Новый Массив();
НачатьТранзакцию();
Попытка
БизнесПроцессыИЗадачиСервер.ЗаблокироватьЗадачи(Задачи);
Для каждого Задача Из Задачи Цикл
Если ТипЗнч(Задача) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
Продолжить;
КонецЕсли;
ЗадачаОбъект = Задача.ПолучитьОбъект();
Если ЗадачаОбъект.Выполнена Тогда
Продолжить;
КонецЕсли;
ЗадачаОбъект.Заблокировать();
ЗадачаОбъект.ПринятаКИсполнению = Истина;
ЗадачаОбъект.ДатаПринятияКИсполнению = ТекущаяДатаСеанса();
Если НЕ ЗначениеЗаполнено(ЗадачаОбъект.Исполнитель) Тогда
ЗадачаОбъект.Исполнитель = Пользователи.АвторизованныйПользователь();
КонецЕсли;
ЗадачаОбъект.Записать(); // АПК:1327 Блокировка установлена ранее в БизнесПроцессыИЗадачиСервер.ЗаблокироватьЗадачи.
НовыйМассивЗадач.Добавить(Задача);
КонецЦикла;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Задачи = НовыйМассивЗадач;
КонецПроцедуры
// Отмечает указанные задачи как не принятые к исполнению.
//
// Параметры:
// Задачи - Массив из ЗадачаСсылка.ЗадачаИсполнителя
//
Процедура ОтменитьПринятиеЗадачКИсполнению(Задачи) Экспорт
НовыйМассивЗадач = Новый Массив();
НачатьТранзакцию();
Попытка
БизнесПроцессыИЗадачиСервер.ЗаблокироватьЗадачи(Задачи);
Для каждого Задача Из Задачи Цикл
Если ТипЗнч(Задача) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
Продолжить;
КонецЕсли;
ЗадачаОбъект = Задача.ПолучитьОбъект();
Если ЗадачаОбъект.Выполнена Тогда
Продолжить;
КонецЕсли;
ЗадачаОбъект.Заблокировать();
ЗадачаОбъект.ПринятаКИсполнению = Ложь;
ЗадачаОбъект.ДатаПринятияКИсполнению = "00010101000000";
Если Не ЗадачаОбъект.РольИсполнителя.Пустая() Тогда
ЗадачаОбъект.Исполнитель = Неопределено;
КонецЕсли;
ЗадачаОбъект.Записать(); // АПК:1327 Блокировка установлена ранее в БизнесПроцессыИЗадачиСервер.ЗаблокироватьЗадачи.
НовыйМассивЗадач.Добавить(Задача);
КонецЦикла;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Задачи = НовыйМассивЗадач;
КонецПроцедуры
// Проверяет, является ли указанная задача ведущей.
//
// Параметры:
// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя
//
// Возвращаемое значение:
// Булево
//
Функция ЭтоВедущаяЗадача(ЗадачаСсылка) Экспорт
УстановитьПривилегированныйРежим(Истина);
Результат = БизнесПроцессыИЗадачиСервер.ВыбратьБизнесПроцессыВедущейЗадачи(ЗадачаСсылка);
Возврат НЕ Результат.Пустой();
КонецФункции
// Формирует список подбора для указания исполнителя в полях ввода составного типа (Пользователь и Роль).
//
// Параметры:
// Текст - Строка - фрагмент текста для поиска возможных исполнителей.
//
// Возвращаемое значение:
// СписокЗначений - список подбора, содержащий возможных исполнителей.
//
Функция СформироватьДанныеВыбораИсполнителя(Текст) Экспорт
ДанныеВыбора = Новый СписокЗначений;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Пользователи.Ссылка КАК Ссылка
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.Наименование ПОДОБНО &Текст СПЕЦСИМВОЛ ""~""
| И Пользователи.Недействителен = ЛОЖЬ
| И Пользователи.Служебный = ЛОЖЬ
| И Пользователи.ПометкаУдаления = ЛОЖЬ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РолиИсполнителей.Ссылка
|ИЗ
| Справочник.РолиИсполнителей КАК РолиИсполнителей
|ГДЕ
| РолиИсполнителей.Наименование ПОДОБНО &Текст СПЕЦСИМВОЛ ""~""
| И НЕ РолиИсполнителей.ПометкаУдаления";
Запрос.УстановитьПараметр("Текст", ОбщегоНазначения.СформироватьСтрокуДляПоискаВЗапросе(Текст) + "%");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДанныеВыбора.Добавить(Выборка.Ссылка);
КонецЦикла;
Возврат ДанныеВыбора;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Возвращаемое значение:
// Число
//
Функция КоличествоНевыполненныхЗадачБизнесПроцессов(БизнесПроцессы) Экспорт
МассивБизнесПроцессов = Новый Массив;
Для каждого БизнесПроцесс Из БизнесПроцессы Цикл
Если ТипЗнч(БизнесПроцесс) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
Продолжить;
КонецЕсли;
МассивБизнесПроцессов.Добавить(БизнесПроцесс);
КонецЦикла;
Если МассивБизнесПроцессов.Количество() = 0 Тогда
Возврат 0;
КонецЕсли;
Запрос = Новый Запрос(
"ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК Количество
|ИЗ
| Задача.ЗадачаИсполнителя КАК ЗадачиИсполнителя
|ГДЕ
| ЗадачиИсполнителя.БизнесПроцесс В (&БизнесПроцессы)
| И ЗадачиИсполнителя.Выполнена = ЛОЖЬ");
Запрос.УстановитьПараметр("БизнесПроцессы", МассивБизнесПроцессов);
Возврат Запрос.Выполнить().Выгрузить()[0].Количество;
КонецФункции
// Возвращаемое значение:
// Число
//
Функция КоличествоНевыполненныхЗадачБизнесПроцесса(БизнесПроцесс) Экспорт
Возврат КоличествоНевыполненныхЗадачБизнесПроцессов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(БизнесПроцесс));
КонецФункции
// Возвращаемое значение:
// - БизнесПроцессСсылка
// - Неопределено
//
Функция ПометитьНаУдалениеБизнесПроцессы(ВыделенныеСтроки) Экспорт
Количество = 0;
Для Каждого СтрокаТаблицы Из ВыделенныеСтроки Цикл
БизнесПроцессСсылка = СтрокаТаблицы.Владелец;
Если БизнесПроцессСсылка = Неопределено ИЛИ БизнесПроцессСсылка.Пустая() Тогда
Продолжить;
КонецЕсли;
НачатьТранзакцию();
Попытка
БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы(БизнесПроцессСсылка);
БизнесПроцессОбъект = БизнесПроцессСсылка.ПолучитьОбъект();
БизнесПроцессОбъект.УстановитьПометкуУдаления(НЕ БизнесПроцессОбъект.ПометкаУдаления);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Количество = Количество + 1;
КонецЦикла;
Возврат ?(Количество = 1, ВыделенныеСтроки[0].Владелец, Неопределено);
КонецФункции
Процедура ПриПеренаправленииЗадачи(ЗадачаОбъект, НоваяЗадачаОбъект)
Если ЗадачаОбъект.БизнесПроцесс = Неопределено Или ЗадачаОбъект.БизнесПроцесс.Пустая() Тогда
Возврат;
КонецЕсли;
ПодключенныеБизнесПроцессы = Новый Соответствие;
ПодключенныеБизнесПроцессы.Вставить(Метаданные.БизнесПроцессы.Задание.ПолноеИмя(), "");
БизнесПроцессыИЗадачиПереопределяемый.ПриОпределенииБизнесПроцессов(ПодключенныеБизнесПроцессы);
ТипБизнесПроцесса = ЗадачаОбъект.БизнесПроцесс.Метаданные();
СведенияОБизнесПроцессе = ПодключенныеБизнесПроцессы[ТипБизнесПроцесса.ПолноеИмя()];
Если СведенияОБизнесПроцессе <> Неопределено Тогда
БизнесПроцессы[ТипБизнесПроцесса.Имя].ПриПеренаправленииЗадачи(ЗадачаОбъект.Ссылка, НоваяЗадачаОбъект.Ссылка);
КонецЕсли;
КонецПроцедуры
#КонецОбласти