![BPMN: типовая ошибка «Подмена потока управления» BPMN.Ошибка. Подмена потока управления. Модель 4](https://olegburko.ru/wp-content/uploads/2025/01/Model_4-750x350.jpg)
Исходя из моего опыта проведения тренингов по BPMN (на разных уровнях: для аналитических целей и для исполнения моделей процессов в процессном движке, это неважно) накопилась какая-то статистика и стало понятно, что некоторые ошибки являются типовыми для существенного числа слушателей в группе.
Этой статьёй я планирую начать цикл по рассмотрению типовых ошибок, которые часто допускают слушатели при моделировании бизнес-процессов в нотации BPMN, чтобы вы могли повысить качество моделирования и не допускать подобных элементарных ошибок.
Преамбула
При моделировании потока работ в рамках одного пула данная ошибка обычно не встречается. Для примера я возьму классический пример заказа пиццы. Например, вы захотели поесть пиццы, сделали заказ, получили пиццу и съели её, утолив голод. Назовём наш процесс «Перекус по-итальянски» и представим модель этого следующим образом:
![BPMN.Ошибка. Подмена потока управления. Модель 1](https://olegburko.ru/wp-content/uploads/2025/01/Model_1-1024x370.jpg)
С точки зрения структуры, диаграмма выглядит нормально:
- есть стартовое событие
- есть активности
- понятно, что за чем выполняется
- есть завершающее событие
Модель с ошибкой
Но! Непонятно, у кого заказывается пицца: может в пиццерии, а может у какого-то частного лица (жены, например). И кто эту пиццу доставляет (может, дети приносят). Т.е. на диаграмме не отражён участник нашего процесса, который принимает заказ на изготовление пиццы и доставляет её. Для исправления ситуации обычно используется другой пул, в свёрнутом виде, который отражает внешнего участника взаимодействия. И диаграмма, с точки зрения, начинающего аналитика, может выглядеть вот так:
![BPMN.Ошибка. Подмена потока управления. Модель 2](https://olegburko.ru/wp-content/uploads/2025/01/Model_2-1024x472.jpg)
На диаграмме появились потоки сообщений и их появление часто вызывает ошибку, которую мы можем видеть на диаграмме. Когда из активности «Заказать пиццу» выходит поток сообщений, но не выходит поток управления.
Начинающие (и не только) моделировщики не всегда чётко проводят разницу между потоком сообщений (по которому ходит информация) и потоком управления (который показывает, в каком порядке должны активироваться элементы модели, что показывается виртуальной сущностью «токен»).
В конце статьи будет видеоверсия этой статьи, где вы сможете посмотреть, то что я описываю, в динамике. А сейчас обратите внимание на скриншот симуляции выполнения экземпляра этого процесса. После того, как активность «Заказать пиццу» отработала (сообщение отправилось внешнему участнику взаимодействия «Пиццерия») появилась надпись «Finished». Т.е. экземпляр процесса завершился. Ведь по правилам BPMN, если из активности не выходит поток управления, это означает неявное окончание этой ветви процесса. Мы просто не видим токена, который после завершения активности «Заказать пиццу» сразу уничтожается.
Для лучшего понимания необходимо смоделировать это завершение процесса и диаграмма примет следующий вид:
![BPMN.Ошибка. Подмена потока управления. Модель 3](https://olegburko.ru/wp-content/uploads/2025/01/Model_3-1024x469.jpg)
И если мы ещё раз посмотрим на её исполнение, то увидим, что на самом деле, в результате выполнения активности «Заказать пиццу» по потоку сообщений отправляется информация о заказе пиццы (серый кружок), а по потоку управления отправляется токен, который сразу же уничтожается в завершающем событии и наш экземпляр процесса завершается. Но ведь мы не хотим, чтобы экземпляр процесса завершился, нам надо дождаться пиццу и съесть её!
Правильный вариант модели
Правильный вариант диаграммы может быть такой:
![BPMN.Ошибка. Подмена потока управления. Модель 4](https://olegburko.ru/wp-content/uploads/2025/01/Model_4-1024x473.jpg)
В этой версии модели поток управления не прерывается, и мы (надеюсь) дождёмся пиццы и съедим её. На этой мажорной ноте можно закончить рассмотрение ошибки «Подмена потока управления» и способа её исправления, а также сделать следующий вывод:
Вывод: тот факт, что активность порождает информацию (сообщение) и отправляет её по потоку сообщений, не отменяет необходимости определить дальнейший элемент для выполнения в процессе, что моделируется потоком управления.
Что дальше?
Если вы хотите глубже разобраться в BPMN — записывайтесь на мой авторский онлайн-курс «Основы BPMN». Он включает в себя много интересных материалов и практических упражнений, с самопроверкой. Также можете пройти «Бесплатный тест по основам BPMN» и объективно определить свой уровень знания BPMN. Ещё можете подписаться на новости с моего сайта и примерно 1 раз в 2 месяца вы будете получать рассылку с интересными материалами, анонсами и т.д. Если же вам больше нравиться читать Telegram, тогда присоединяйтесь к открытой группе «BPMN для всех» (t.me/bpmn_for_all)
Успехов в моделировании на BPMN!