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

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 33 15.06.21 21:39 Сейчас в теме
Почему не запустить комплексный процесс, состоящий из согласования и ознакомления? Шаблон процесса можно назначить виду документа и запретить его менять.
CyberBob; +1 Ответить
Оставьте свое сообщение

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