Здравствуйте,
Знаете ли как в Документообороте 2.1 устроен запуск второго согласования в рамках одного документа, очень нужна реализация проверки в документе.
В общем ситуация такая, доработан код, чтобы удалять повторяющихся пользователей при запуске бизнес-процесса, как в самом списке исполнителей бизнес-процесса согласования, так и во второй проверке, по выполненным задачам пользователей, чтобы повторно не прилетали задачи на согласование по БП.
И вопрос в чем, что бывают ситуации, когда в документе есть уже завершенный бизнес-процесс, по такому же шаблону запускают еще один процесс, ну и доработка начинает себя вести так, что задачи создаются по пользователям, которые были удалены из 1 завершенного бизнес-процесса.
А сейчас мне нужно, сделать так, чтобы программа понимала, что это новый процесс и делала все сначала, не смотря на первый завершенный процесс, вот как реализовать, уже запутался, к чему подцепиться
---
можно еще попробовать так

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

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

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

    Запрос = Новый Запрос;

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

    Запрос.УстановитьПараметр("ОсновнойПредмет",ОсновнойПредмет);
    Запрос.УстановитьПараметр("ТипБизнесПроцесса",ТипБизнесПроцесса);

    Результат = Запрос.Выполнить();

    Возврат НЕ Результат.Пустой();
```
---
У процессов есть маршрут, у маршрута точки
Например у согласования (пишу под для 3-йки):
Подготовка, Старт, Согласовать, Ознакомиться, Повторить согласование, обработка результата, завершение.

Соответственно все просто - при обработке процесса проверяем точку маршрута - должна быть Старт
---
(2)Ого, спасибо, попробую туда подцепиться
---
А вы можете скинуть, как вы такую проверку организовали? Пока мое условие не отработало
---
Нет подрукой ничего, если в кратце у процесса должна быть точка, ее надо сравнить с БизнесПроцессы.Процес.Точки.Точка. Очень давно такую проверку делал, поганяйте тестовые согласования (только согласования) в тестовой базе с отладкой, посмотрите какие реквизиты есть у процесса
---
можно еще попробовать так

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

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

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

    Запрос = Новый Запрос;

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

    Запрос.УстановитьПараметр("ОсновнойПредмет",ОсновнойПредмет);
    Запрос.УстановитьПараметр("ТипБизнесПроцесса",ТипБизнесПроцесса);

    Результат = Запрос.Выполнить();

    Возврат НЕ Результат.Пустой();
```
---
а почему у вас возникает ситуация когда 2 задачи на согласование прилетают одному человеку ?
---
В комплексном процессе, в разных согласованиях, попадаются одни и те же люди, как обычной пользователь, так и который находится в роли исполнителя, заказчик захотел, чтобы один и тот же человек не согласовывал задачи, а сделал это 1 раз за весь комплексный процесс
---
Вопрос на самом деле решился вот так
Нашел ведущую задачу
Функция НайтиГоловнойПроцесс(БизнесПроцесс)
 Возврат БизнесПроцесс.ВедущаяЗадача.БизнесПроцесс;
КонецФункции

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