Документооборот

1. shua1 15.11.23 14:49 Сейчас в теме
Здравствуйте,
Знаете ли как в Документообороте 2.1 устроен запуск второго согласования в рамках одного документа, очень нужна реализация проверки в документе.
В общем ситуация такая, доработан код, чтобы удалять повторяющихся пользователей при запуске бизнес-процесса, как в самом списке исполнителей бизнес-процесса согласования, так и во второй проверке, по выполненным задачам пользователей, чтобы повторно не прилетали задачи на согласование по БП.
И вопрос в чем, что бывают ситуации, когда в документе есть уже завершенный бизнес-процесс, по такому же шаблону запускают еще один процесс, ну и доработка начинает себя вести так, что задачи создаются по пользователям, которые были удалены из 1 завершенного бизнес-процесса.
А сейчас мне нужно, сделать так, чтобы программа понимала, что это новый процесс и делала все сначала, не смотря на первый завершенный процесс, вот как реализовать, уже запутался, к чему подцепиться
По теме из базы знаний
Найденные решения
8. vadim1011985 101 15.11.23 18:09 Сейчас в теме
(6) можно еще попробовать так

Это код использовал для поиска ранее запущенного но не завершенного процесса.(Для запрета повторного запуска пока первый процесс еще не завершен) Вам же наоборот необходимо найти завершенный (т.е. немного подправить условие в запросе) . Ну так же надо учитывать что у процесса должен быть основной педмет. Если процесс без предмета то это не сработает.

P.S. Так как писал для Документооборот проф 2.1 и использовал составные процессы. то условие по ведущей задаче в Вашем случае не нужно.

	

Функция ЕстьРанееЗапущенныйБизнесПроцесс(ОсновнойПредмет,ТипБизнесПроцесса)

   Запрос = Новый Запрос; 
	
	Запрос.Текст = "ВЫБРАТЬ
	               |	ДанныеБизнесПроцессов.БизнесПроцесс КАК БизнесПроцесс,
	               |	ДанныеБизнесПроцессов.Завершен КАК Завершен
	               |ИЗ
	               |	РегистрСведений.ДанныеБизнесПроцессов КАК ДанныеБизнесПроцессов
	               |ГДЕ
	               |	ДанныеБизнесПроцессов.ОсновнойПредмет = &ОсновнойПредмет
	               |	И ДанныеБизнесПроцессов.ВедущаяЗадача = ЗНАЧЕНИЕ(Задача.ЗадачаИсполнителя.ПустаяСсылка)
	               |	И ТИПЗНАЧЕНИЯ(ДанныеБизнесПроцессов.БизнесПроцесс) = &ТипБизнесПроцесса
	               |	И ДанныеБизнесПроцессов.Завершен = ЛОЖЬ
	               |	И ДанныеБизнесПроцессов.Стартован = ИСТИНА
	               |	И ДанныеБизнесПроцессов.ПометкаУдаления = ЛОЖЬ";
	
	Запрос.УстановитьПараметр("ОсновнойПредмет",ОсновнойПредмет);
	Запрос.УстановитьПараметр("ТипБизнесПроцесса",ТипБизнесПроцесса);
	
	Результат = Запрос.Выполнить();
	
	Возврат НЕ Результат.Пустой();
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. newlogin1 15.11.23 16:12 Сейчас в теме
(1)У процессов есть маршрут, у маршрута точки
Например у согласования (пишу под для 3-йки):
Подготовка, Старт, Согласовать, Ознакомиться, Повторить согласование, обработка результата, завершение.

Соответственно все просто - при обработке процесса проверяем точку маршрута - должна быть Старт
4. shua1 15.11.23 16:53 Сейчас в теме
(2)
(2)Ого, спасибо, попробую туда подцепиться
6. shua1 15.11.23 17:22 Сейчас в теме
(2) А вы можете скинуть, как вы такую проверку организовали? Пока мое условие не отработало
7. newlogin1 15.11.23 17:48 Сейчас в теме
(6)Нет подрукой ничего, если в кратце у процесса должна быть точка, ее надо сравнить с БизнесПроцессы.Процес.Точки.Точка. Очень давно такую проверку делал, поганяйте тестовые согласования (только согласования) в тестовой базе с отладкой, посмотрите какие реквизиты есть у процесса
8. vadim1011985 101 15.11.23 18:09 Сейчас в теме
(6) можно еще попробовать так

Это код использовал для поиска ранее запущенного но не завершенного процесса.(Для запрета повторного запуска пока первый процесс еще не завершен) Вам же наоборот необходимо найти завершенный (т.е. немного подправить условие в запросе) . Ну так же надо учитывать что у процесса должен быть основной педмет. Если процесс без предмета то это не сработает.

P.S. Так как писал для Документооборот проф 2.1 и использовал составные процессы. то условие по ведущей задаче в Вашем случае не нужно.

	

Функция ЕстьРанееЗапущенныйБизнесПроцесс(ОсновнойПредмет,ТипБизнесПроцесса)

   Запрос = Новый Запрос; 
	
	Запрос.Текст = "ВЫБРАТЬ
	               |	ДанныеБизнесПроцессов.БизнесПроцесс КАК БизнесПроцесс,
	               |	ДанныеБизнесПроцессов.Завершен КАК Завершен
	               |ИЗ
	               |	РегистрСведений.ДанныеБизнесПроцессов КАК ДанныеБизнесПроцессов
	               |ГДЕ
	               |	ДанныеБизнесПроцессов.ОсновнойПредмет = &ОсновнойПредмет
	               |	И ДанныеБизнесПроцессов.ВедущаяЗадача = ЗНАЧЕНИЕ(Задача.ЗадачаИсполнителя.ПустаяСсылка)
	               |	И ТИПЗНАЧЕНИЯ(ДанныеБизнесПроцессов.БизнесПроцесс) = &ТипБизнесПроцесса
	               |	И ДанныеБизнесПроцессов.Завершен = ЛОЖЬ
	               |	И ДанныеБизнесПроцессов.Стартован = ИСТИНА
	               |	И ДанныеБизнесПроцессов.ПометкаУдаления = ЛОЖЬ";
	
	Запрос.УстановитьПараметр("ОсновнойПредмет",ОсновнойПредмет);
	Запрос.УстановитьПараметр("ТипБизнесПроцесса",ТипБизнесПроцесса);
	
	Результат = Запрос.Выполнить();
	
	Возврат НЕ Результат.Пустой();
Показать
3. vadim1011985 101 15.11.23 16:21 Сейчас в теме
(1) а почему у вас возникает ситуация когда 2 задачи на согласование прилетают одному человеку ?
5. shua1 15.11.23 16:59 Сейчас в теме
(3)В комплексном процессе, в разных согласованиях, попадаются одни и те же люди, как обычной пользователь, так и который находится в роли исполнителя, заказчик захотел, чтобы один и тот же человек не согласовывал задачи, а сделал это 1 раз за весь комплексный процесс
9. shua1 17.11.23 15:54 Сейчас в теме
Вопрос на самом деле решился вот так
Нашел ведущую задачу
Функция НайтиГоловнойПроцесс(БизнесПроцесс)
Возврат БизнесПроцесс.ВедущаяЗадача.БизнесПроцесс;
КонецФункции

Далее уже обрабатывал по задачам
ГоловнойПроцесс = НайтиГоловнойПроцесс(БизнесПроцесс);
СписокПользователей = ПолучитьВыполненныеЗадачиСогласованияПоПользователям(ПервыйПредмет, ГоловнойПроцесс)
Оставьте свое сообщение

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