Маршрутизация процесса согласования в комплексном процессе

1. H@wk 18.12.14 17:39 Сейчас в теме
Задача следующая:

Есть комплексный процесс по согласованию договорных документов, выглядит так:

1. Согласование документа с согласующим №1 при условии, что условие о необходимости согласования с ним Истина (т.е. согласование может быть, а может и не быть).

2. Согласование с согласующим №2 (условия нет), т.е. этот согласующий всегда участвует в согласовании документов.

3. Согласование с согласующим №3, при условии, что согласующий №2 согласовал положительно и, если согласующий №1 участвует, то и его виза положительна (если не участвует, то для старта 3-го согласования необходима только положительная виза согласующего №2).

Проблема в том, что Согласование №3 стартует только в том случае, если есть положительное согласование с Согласующим №1, если же Согласование №1 не стартовало, то комплексный процесс заканчивается на Согласующем №2.

Коллеги, может кто сталкивался с такой проблемой?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Оберон 16 18.12.14 18:10 Сейчас в теме
надо просто развернуть логику
3. H@wk 18.12.14 18:44 Сейчас в теме
(2) Оберон, если можно поясните пожалуйста.

И будет ли работать предложенный метод, если процессов аналогичных согласованию №1, будет не один, а скажем пять?

Спасибо.
4. user904413 09.02.18 11:44 Сейчас в теме
Подскажите, пожалуйста, а возможно настроить, чтобы достаточно было согласование договора или только пользователю с ролью юрист или только пользователю с ролью руководитель правового департамента? Т.е. любые пользователи с этими ролями могли увидеть, что требуется согласование и кто-либо один из них мог рассмотреть и нажать согласовать.
Спасибо
5. iolko 319 09.02.18 11:49 Сейчас в теме
Все это делается на уровне условий маршрутизации. Делал такое и не раз и не два, почти вся логика согласования в данный момент на таких процессах.
6. user904413 09.02.18 12:05 Сейчас в теме
Можете подсказать как такое условие прописать? спасибо
7. iolko 319 12.02.18 04:02 Сейчас в теме
(6)
УДОБухгалтер = Ложь;
	УДОЭкономист = Ложь;
	УДОЮрист = Ложь;
	УдоМаркетолог = Ложь;	
	
	
	//Проверка для перехода на согласование Начальник УДО
	Рез = Ложь;	
	//1 проверим нужно ли согласовывать Маркетологом
	УсловиеДляПроверки = Справочники.УсловияМаршрутизации.НайтиПоНаименованию("Добавить Маркетолога УДО");
	ТребуетсяМаркетологУДО = РаботаСУсловиямиМаршрутизации.ПроверитьПрименимостьУсловияМаршрутизацииКОбъекту(Предмет.Ссылка,УсловиеДляПроверки);
	
	
	//2 Проверим  нужно ли согласовывать Экономистом УДО
	УсловиеДляПроверки = Справочники.УсловияМаршрутизации.НайтиПоНаименованию("Добавить Экономиста УДО");
	ТребуетсяЭкономистУДО = РаботаСУсловиямиМаршрутизации.ПроверитьПрименимостьУсловияМаршрутизацииКОбъекту(Предмет.Ссылка,УсловиеДляПроверки);
	
	
	//3 Проверим согласования
	//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
	// Данный фрагмент построен конструктором.
	// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ВизыСогласования.РольИсполнителя,
		|	ВизыСогласования.РезультатСогласования,
		|	ВизыСогласования.Исполнитель
		|ИЗ
		|	Справочник.ВизыСогласования КАК ВизыСогласования
		|ГДЕ
		|	ВизыСогласования.ПомещенаВИсторию = &ПомещенаВИсторию
		|	И ВизыСогласования.Удалена = &Удалена
		|	И ВизыСогласования.Документ = &Документ";
	
	Запрос.УстановитьПараметр("Документ", Предмет.Ссылка);
	Запрос.УстановитьПараметр("ПомещенаВИсторию", Ложь);
	Запрос.УстановитьПараметр("Удалена", Ложь);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		Если Строка (ВыборкаДетальныеЗаписи.РольИсполнителя) = "Согласующий УДО Маркетолог" И ВыборкаДетальныеЗаписи.РезультатСогласования = Перечисления.РезультатыСогласования.Согласовано Тогда
			УдоМаркетолог = Истина;                                      
		КонецЕсли;
		
		Если юк_РаботаСУсловиямиМаршрутизации.ПроверитьИсполнителяНаРоль(ВыборкаДетальныеЗаписи.Исполнитель,"000000020") И ВыборкаДетальныеЗаписи.РезультатСогласования = Перечисления.РезультатыСогласования.Согласовано Тогда
			УдоМаркетолог = Истина;                                      
		КонецЕсли;
		
		Если Строка (ВыборкаДетальныеЗаписи.РольИсполнителя) = "Согласующий УДО Бухгалтер" И ВыборкаДетальныеЗаписи.РезультатСогласования = Перечисления.РезультатыСогласования.Согласовано Тогда
			УДОБухгалтер = Истина;	
		КонецЕсли;
		
		Если юк_РаботаСУсловиямиМаршрутизации.ПроверитьИсполнителяНаРоль(ВыборкаДетальныеЗаписи.Исполнитель,"000000017") И ВыборкаДетальныеЗаписи.РезультатСогласования = Перечисления.РезультатыСогласования.Согласовано Тогда
			УДОБухгалтер = Истина;                                      
		КонецЕсли;
		
		Если Строка (ВыборкаДетальныеЗаписи.РольИсполнителя) = "Согласующий УДО Экономист" И ВыборкаДетальныеЗаписи.РезультатСогласования = Перечисления.РезультатыСогласования.Согласовано Тогда
			УДОЭкономист = Истина;	
		КонецЕсли;	
		
		Если юк_РаботаСУсловиямиМаршрутизации.ПроверитьИсполнителяНаРоль(ВыборкаДетальныеЗаписи.Исполнитель,"000000018") И ВыборкаДетальныеЗаписи.РезультатСогласования = Перечисления.РезультатыСогласования.Согласовано Тогда
			УДОЭкономист = Истина;                                      
		КонецЕсли;
		
		Если Строка (ВыборкаДетальныеЗаписи.РольИсполнителя) = "Согласующий УДО Юрист" И ВыборкаДетальныеЗаписи.РезультатСогласования = Перечисления.РезультатыСогласования.Согласовано Тогда
			УДОЮрист = Истина;	
		КонецЕсли;
		
		Если юк_РаботаСУсловиямиМаршрутизации.ПроверитьИсполнителяНаРоль(ВыборкаДетальныеЗаписи.Исполнитель,"000000019") И ВыборкаДетальныеЗаписи.РезультатСогласования = Перечисления.РезультатыСогласования.Согласовано Тогда
			УДОЮрист = Истина;                                      
		КонецЕсли;
	КонецЦикла;
	//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
	
	Если НЕ ТребуетсяМаркетологУДО Тогда 
		УдоМаркетолог = Истина;
	КонецЕсли;
	
	Если НЕ ТребуетсяЭкономистУДО Тогда
		УДОЭкономист = Истина;
	КонецЕсли;
	
	Если 	УДОБухгалтер И УДОЭкономист И УДОЮрист И УдоМаркетолог Тогда
		Рез=Истина;
	КонецЕсли;	
	
	Результат = Рез;
Показать



Так же вот обработка, которая позволяет проверять правила Проверка условий маршрутизации
8. hoyo 12.02.18 10:24 Сейчас в теме
Всё просто, если вы делаете не в одном процессе согласования это, а делаете внутри комплексного процесса два процесса согласования. Ну или согласование и утверждение. В первом процессе у вас согласующий№2 и возможно №1. А второй процесс с согласующим №3 запускается по условию "Если согласовано 1", то есть если первый процесс (вне зависимости от количества согласующих внутри) был согласован.
Оставьте свое сообщение

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