Документация / BPMN

События

Событие (event) — то, что происходит во время процесса и влияет на его ход: пришло письмо, наступил срок, возникла ошибка. На диаграмме событие — кружок; значок внутри показывает триггер (тип события).

Виды событий по месту в процессе

ВидГраницаСмысл
НачальноеТонкая одинарнаяЗапускает процесс. Только «ловит» событие
ПромежуточноеДвойнаяПроисходит по ходу процесса: ловит или бросает событие
КонечноеТолстаяЗавершает ветвь процесса. Может «бросить» результат

Промежуточные события бывают:

  • ловящими (catching, значок контурный) — процесс ждёт события: сообщения, таймера, сигнала;
  • бросающими (throwing, значок залитый) — процесс сам создаёт событие: отправляет сообщение, эскалацию, сигнал.

Граничные события

Граничное событие (boundary event) рисуется на границе действия. Пока действие выполняется, событие «слушает», и если оно произошло — процесс уходит по исходящему потоку граничного события.

  • Прерывающее (сплошная двойная граница, cancelActivity="true") — действие прерывается.
  • Непрерывающее (пунктирная граница, cancelActivity="false") — действие продолжается, а параллельно запускается ещё одна ветвь: например, напоминание руководителю, если задача висит дольше дня.
<bpmn:boundaryEvent id="Overdue" name="1 день" attachedToRef="Approve" cancelActivity="false">
  <bpmn:timerEventDefinition>
    <bpmn:timeDuration xsi:type="bpmn:tFormalExpression">P1D</bpmn:timeDuration>
  </bpmn:timerEventDefinition>
</bpmn:boundaryEvent>

Типы событий (триггеры)

ТипЭлемент XMLГде используетсяЗначение
Простое (без типа)—Начало, промежуточное, конецНачало или завершение без уточнения причины
СообщениеmessageEventDefinitionВездеПолучение или отправка сообщения другому участнику
ТаймерtimerEventDefinitionНачало, промежуточное, границаДата, интервал или расписание
УсловиеconditionalEventDefinitionНачало, промежуточное, границаУсловие стало истинным (например, «остаток меньше 10 штук»)
СигналsignalEventDefinitionВездеШироковещательное оповещение всех, кто ждёт сигнал
ОшибкаerrorEventDefinitionКонец, граница, событийный подпроцессКритическая ошибка: действие прерывается
ЭскалацияescalationEventDefinitionПромежуточное, конец, границаПередача вопроса на уровень выше без прерывания
КомпенсацияcompensateEventDefinitionПромежуточное, конец, границаЗапуск отката выполненных действий
ОтменаcancelEventDefinitionКонец, границаОтмена транзакции
СсылкаlinkEventDefinitionПромежуточное«Переход» внутри процесса — для разрыва длинных стрелок
ОстановкаterminateEventDefinitionКонецНемедленно завершает весь процесс, все ветви
Множественноенесколько определенийВездеЛюбое из нескольких событий
Параллельное множественноеparallelMultiple="true"Начало, промежуточное, границаВсе события из списка

Таймер

Время задаётся в формате ISO 8601:

  • timeDate — конкретный момент: 2026-12-31T18:00:00;
  • timeDuration — длительность: PT15M (15 минут), P3D (3 дня);
  • timeCycle — повторение: R3/PT1H (три раза с интервалом в час).
<bpmn:startEvent id="Daily" name="Каждый день в 9:00">
  <bpmn:timerEventDefinition>
    <bpmn:timeCycle xsi:type="bpmn:tFormalExpression">0 0 9 * * ?</bpmn:timeCycle>
  </bpmn:timerEventDefinition>
</bpmn:startEvent>

Выражение cron в timeCycle поддерживают не все движки — стандарт гарантирует только формат ISO 8601.

Ошибка и эскалация

Конечное событие ошибки «бросает» ошибку с кодом, а граничное событие ошибки на вызывающем действии её «ловит». Эскалация работает так же, но не обязательно прерывает действие — это «сигнал наверх».

<bpmn:error id="Error_NoMoney" name="Недостаточно средств" errorCode="NO_MONEY" />
<bpmn:endEvent id="Failed" name="Оплата не прошла">
  <bpmn:errorEventDefinition errorRef="Error_NoMoney" />
</bpmn:endEvent>
<bpmn:boundaryEvent id="OnNoMoney" attachedToRef="Payment">
  <bpmn:errorEventDefinition errorRef="Error_NoMoney" />
</bpmn:boundaryEvent>

Сообщение и сигнал

Сообщение адресовано конкретному участнику и передаётся потоком сообщений. Сигнал никому не адресован: его получают все процессы, которые его ждут (например, «Изменились цены»).

Советы

  • Начальное событие называют по факту, который запустил процесс: «Заявка получена», а не «Начало».
  • У каждой ветви процесса должно быть своё конечное событие с понятным результатом: «Заказ отправлен», «Заявка отклонена».
  • Событие остановки используйте осторожно: оно обрывает все параллельные ветви.

Обновлено: 30 сентября 2026 г.