ДО Запустить процесс Ознакомление при выполнении задачи определенным юзером

1. Vitaly1C8 15.06.21 15:59 Сейчас в теме
Всем привет ! Документооборот 1.4
Задача следующая: есть юзер которого нужно контролировать когда он согласовывает задачу (у которой большая сумма в Предмете) Для этого после его согласования стартовать процесс Ознакомление на другого юзера.
Как я понимаю, сделать это нужно в ПодпискеНаСобытия источником для которой является ЗадачаОбъект.ЗадачаИсполнителя

1. В коде обработчика какая то дичь ... касающаяся Комплексного БизнесПроцесса; Могу ли я полностью игнорировать эту обработку, и добавить свой код типа
    Если ТипЗнч(Источник.БизнесПроцесс) = Тип("БизнесПроцессСсылка.Согласование") Тогда 


2. Наверняка уже есть пример, как запустить программно процесс; Хотелось бы посмотреть )

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

Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Good_Smile 15.06.21 16:37 Сейчас в теме
Добрый день! А в 1.4 есть дополнительные обработчики бизнес-событий? если есть, я бы сделала через них и не меняла конфу.
По поводу автоматического создания задач на ознакомления нашла статью https://its.1c.ru/db/metod8dev/content/5874/hdoc

Вот код создания задачи ознакомления при завершении процесса:

Процедура ЗавершениеПриЗавершении(ТочкаМаршрутаБизнесПроцесса, Отказ)

        ...  

    // Если "Согласовано" и это вложенный процесс, 
    //  то задача Ознакомления создается в обработчике ПриЗавершении, 
    //  чтобы не препятствовать завершению процесса.

    Если РезультатСогласования = Перечисления.РезультатыСогласования.Согласовано

         И ЗначениеЗаполнено(ВедущаяЗадача) Тогда

         БизнесПроцессВедущейЗадачи =
             ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВедущаяЗадача, "БизнесПроцесс");

         Если ТипЗнч(БизнесПроцессВедущейЗадачи) <> Тип("БизнесПроцессСсылка.КомплексныйПроцесс") Тогда

             Возврат;

         КонецЕсли;

         
         Задача = Задачи.ЗадачаИсполнителя.СоздатьЗадачу();
     ЗаполнитьЗадачуОзнакомиться(Задача);
         Задача.Записать();
         НоваяСтрока = РезультатыОзнакомлений.Добавить();
         НоваяСтрока.НомерИтерации   = НомерИтерации;
         НоваяСтрока.ЗадачаИсполнителя = Задача.Ссылка;
         РаботаСБизнесПроцессами.ЗаписатьПроцесс(ЭтотОбъект, "ПростаяЗапись");

    КонецЕсли;
    
КонецПроцедуры
Показать
Vitaly1C8; +1 Ответить
3. comptr 36 15.06.21 21:39 Сейчас в теме
Почему не запустить комплексный процесс, состоящий из согласования и ознакомления? Шаблон процесса можно назначить виду документа и запретить его менять.
CyberBob; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот