Документация / BPMN
Подпроцессы
Подпроцесс (sub-process) — действие, внутри которого свой процесс со своими событиями, задачами и шлюзами. Подпроцессы помогают декомпозировать модель: на верхнем уровне показывают крупные этапы, детали — внутри.
Свёрнутый и развёрнутый подпроцесс
- Свёрнутый — выглядит как задача со знаком «+» внизу; детали скрыты (в редакторе их можно открыть на отдельном листе).
- Развёрнутый — рамка, внутри которой видна вся логика.
Внутри подпроцесс начинается с начального события без триггера и заканчивается конечными событиями. Когда все ветви подпроцесса завершились, маркер выходит из подпроцесса по его исходящему потоку.
<bpmn:subProcess id="Delivery" name="Доставить заказ">
<bpmn:startEvent id="DeliveryStart" />
<bpmn:task id="Pack" name="Упаковать" />
<bpmn:task id="Hand" name="Передать курьеру" />
<bpmn:endEvent id="DeliveryEnd" />
<bpmn:sequenceFlow id="D1" sourceRef="DeliveryStart" targetRef="Pack" />
<bpmn:sequenceFlow id="D2" sourceRef="Pack" targetRef="Hand" />
<bpmn:sequenceFlow id="D3" sourceRef="Hand" targetRef="DeliveryEnd" />
</bpmn:subProcess>
Вызов процесса
Вызывающее действие (call activity) — рамка с толстой границей. Оно запускает отдельный, повторно используемый процесс, который описан в другом месте: например, «Проверить контрагента» может вызываться из процессов закупки, продажи и аренды. В отличие от встроенного подпроцесса, вызываемый процесс ничего не знает о вызывающем и получает данные только через явные входы и выходы.
<bpmn:callActivity id="CheckPartner" name="Проверить контрагента" calledElement="Process_PartnerCheck" />
Событийный подпроцесс
Событийный подпроцесс (event sub-process, triggeredByEvent="true") рисуется пунктирной рамкой внутри процесса
и не соединяется с ним потоками. Он запускается, когда в процессе происходит событие — приходит сообщение, срабатывает
таймер, возникает ошибка. Его начальное событие может быть:
- прерывающим (сплошная граница) — основной процесс останавливается, работает только подпроцесс;
- непрерывающим (пунктирная граница) — подпроцесс работает параллельно с основным процессом.
Типичный пример — «Клиент отменил заказ»: в какой бы момент ни пришло сообщение об отмене, процесс её обработает.
<bpmn:subProcess id="OnCancel" name="Отмена заказа" triggeredByEvent="true">
<bpmn:startEvent id="CancelReceived" name="Запрос отмены" isInterrupting="true">
<bpmn:messageEventDefinition messageRef="Msg_Cancel" />
</bpmn:startEvent>
<!-- обработка отмены -->
</bpmn:subProcess>
Транзакция
Транзакция (transaction) — подпроцесс с двойной рамкой. Все её действия должны завершиться успешно вместе; если что-то пошло не так, выполненные шаги отменяются задачами компенсации, а процесс уходит по граничному событию отмены. Пример: бронирование тура — перелёт, отель и трансфер бронируются только вместе.
Произвольный подпроцесс
Произвольный подпроцесс (ad-hoc sub-process) помечается тильдой «~». Задачи внутри него выполняются в любом порядке и любое число раз — по решению исполнителя. Подходит для творческой или экспертной работы: «Подготовить коммерческое предложение» может включать расчёты, согласования и правки в произвольной последовательности.
<bpmn:adHocSubProcess id="Proposal" name="Подготовить предложение">
<bpmn:task id="Calc" name="Рассчитать стоимость" />
<bpmn:task id="Agree" name="Согласовать скидку" />
</bpmn:adHocSubProcess>
Похожие инструменты
Обновлено: 30 сентября 2026 г.
