В конструкторе бизнес-процессов нашего приложения часто используются блоки задач и задержки. Правильная комбинация этих элементов позволяет строить чёткие, управляемые сценарии. Но если использовать их неосмотрительно — можно столкнуться с дублированием задач или не созданием задач.
Пример: есть две задачи, после выполнения их обеих должны создаваться следующие две задачи.
Представим типичную ситуацию:
Есть две задачи: Задача 1 и Задача 2.
После их завершения должны быть созданы: Задача 11 и Задача 22.
Между ними стоит задержка.
Такой сценарий встречается часто. Можно предположить, что как только обе задачи завершатся с произведенным результатом, после задержки создадутся следующие.
Но на деле:
Завершилась Задача 1 → стрелка в задержку → задержка сработала → блок задач создал Задачи 11 и 22.
Завершилась Задача 2 → всё повторяется → блок задач снова создал Задачи 11 и 22.
Итог: каждая следующая задача создаётся дважды.
Почему так происходит?
Блок задержки не объединяет потоки. Он срабатывает каждый раз независимо, на каждую входящую стрелку.
Блок задач, стоящий после задержки, отрабатывает на каждое её срабатывание — и каждый раз создаёт одни и те же задачи заново.
Как избежать дублирования задач
Чтобы задачи 11 и 22 создавались только один раз после завершения обеих предыдущих:
Не ставьте задержку между группами задач.
Проведите стрелки напрямую от Задачи 1 и Задачи 2 в блоки задач.
Блоки задач будут ждать обе стрелки, и сработают только когда обе задачи завершатся.
На схеме: задача 11 создастся только после произведенного результата в задачах 1 и 2, задача 22 также создастся только после произведенного результата в задачах 1 и 2.
Задачи могут не создаваться, если входящие стрелки не выполняются
Не всегда задачи создаются, даже если логика процесса кажется правильной. Иногда задачи не выполняются, потому что:
В блок задач ведёт несколько стрелок, и не все условия выполнения стрелок выполняются к моменту их активации. Например, вторая стрелка может быть невыполнима на момент создания задач (например, если не выполнены какие-то предшествующие условия или задачи).
❗ Задержка после блока задач не задерживает создание задач, потому что они создаются в момент активации блока. Она может применяться только к следующим действиям, но не к созданию задач.
Рекомендация: используйте вложенные процессы
Чтобы упростить схему и уменьшить количество связей:
Объедините логически связанные шаги в вложенные процессы
Например, Задача 1 и Задача 2 → в один процесс
Задача 11 и 22 → в другой процесс
В итоговом процессе свяжите их одной стрелкой: процесс → процесс
Это минимизирует ошибки, упростит визуальную логику и облегчит поддержку
Вывод
Задержка срабатывает на каждое входящее событие отдельно.
Блок задач ждёт все входящие стрелки — используйте это, чтобы избежать дублей.
Если хотя бы одна из входящих в блок задач стрелок не выполнима , задача не создастся.
Не ставьте задержку перед блоком задач, если ждёте завершения нескольких шагов перед ее созданием.
Вложенные процессы — отличный способ упрощения и локализации логики.