В этой статье вы узнаете, как настроить буферы в имитационном моделировании (DES-симуляции) Storm BPMN: сделать промежуточное событие буфером, задать ёмкость, дисциплину обслуживания и поведение при переполнении. Также описано, как читать вкладку «Буферы» в отчёте по симуляции и понимать потери от отклонённых заявок.

Буфер — это межоперационное хранилище с конечной ёмкостью: склад, зал ожидания или очередь между двумя задачами процесса. В модели он появляется там, где на схеме стоит промежуточное условное событие. Без буфера заявки проходят узел мгновенно; с буфером они могут накапливаться, ждать места или отклоняться — и именно это поведение вы настраиваете перед запуском симуляции.

## Как сделать событие буфером

1. Откройте экран настройки симуляции (шаг 2, после создания). Справа находится панель **«Свойства элемента»**.

2. В группе элементов выберите вкладку **«События»** и найдите нужное промежуточное условное событие. На схеме оно помечено подсказкой **«Событие»**.

3. Включите тумблер **«Сделать буфером»**. После этого в панели появятся поля настройки буфера.

Если на схеме нет промежуточного условного события, буфер создать нельзя — движок моделирует буферы только в этой позиции. Промежуточное событие без тумблера работает как простая задержка (поле **«Время ожидания»**).

## Параметры буфера

После включения тумблера доступны следующие поля:

* **Ёмкость** — максимальное количество единиц, которые буфер может удержать одновременно. Например, 50 документов на складе или 10 мест в зале ожидания.

* **При переполнении** — что происходит, когда ёмкость исчерпана:

  * **«Ждать места (BLOCK)»** — процесс замедляется: следующая заявка не может пройти, пока в буфере не освободится место. Ничего не теряется, но время цикла растёт.

  * **«Отклонять (REJECT)»** — заявки сверх ёмкости отклоняются и считаются потерянными. Чтобы оценить финансовые потери, задайте стоимость привлечения заявки (CAC) в секции **«Цель симуляции»**.

* **Дисциплина** — порядок, в котором заявки покидают буфер:

  * **«FIFO — очередь»** — первая пришла, первая ушла (стандартная очередь).

  * **«LIFO — стек»** — последняя пришла, первая ушла (например, стопка документов, где берут верхний лист).

* **Таймаут ожидания** — максимальное время, которое заявка может провести в буфере. По истечении таймаута заявка считается отказом (причина «Таймаут» в отчёте). Пустое значение — без ограничения.

* **Содержимое** — текстовое описание того, что хранится в буфере: «документы», «люди», «кг» и т. д. Это подпись для читаемости отчёта, на расчёт не влияет.

![Панель свойств буфера с полями ёмкости, дисциплины и поведения при переполнении](https://helpdesk.stormbpmn.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBdkl0IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--727916c69b913d6f5eea67b02704947ac6f5d312/buffer_properties_panel-4440e4c6a5e6f177.png)

## Вкладка «Буферы» в отчёте

После завершения симуляции перейдите на вкладку **«Результаты»** и откройте вкладку **«Буферы»**. Здесь отображается таблица **«Статистика буферов»** с колонками:

* **Буфер** — название промежуточного события, которое вы настроили как буфер.

* **Ёмкость** — заданное вами максимальное количество единиц.

* **Пик** — максимальное количество единиц, которое одновременно находилось в буфере за весь прогон. Если пик равен ёмкости, буфер регулярно переполнялся.

* **Утилизация** — доля времени, когда буфер был заполнен (или заполнен до определённого уровня). Высокая утилизация означает, что буфер работает на пределе.

* **Вошло** — общее количество единиц, которые прошли через буфер за прогон.

* **Отклонено** — количество заявок, отклонённых из-за переполнения (актуально только при режиме **«Отклонять (REJECT)»**). При режиме **«Ждать места (BLOCK)»** это значение равно нулю.

* **Ср. ожидание** — среднее время, которое заявка провела в буфере до выхода.

* **Макс. ожидание** — максимальное время ожидания в буфере за весь прогон.

Под таблицей отображается сводка: **«заявок отклонено»** и **«потери (CAC)»**. Потери рассчитываются как количество отклонённых заявок, умноженное на стоимость привлечения заявки (CAC), заданную в секции **«Цель симуляции»**. Если CAC не задан, потери не рассчитываются.

Если в модели нет ни одного настроенного буфера, вкладка покажет сообщение: **«Буферы не настроены»**.


## Как интерпретировать результат

* Если **пик** близок к **ёмкости**, а **отклонено** больше нуля — буфер является узким местом. Рассмотрите увеличение ёмкости или переход на режим **«Ждать места (BLOCK)»**, если потери неприемлемы.

* Если **среднее ожидание** в буфере велико, а утилизация низкая — вероятно, дисциплина LIFO или неравномерный поток создают «завалы». Попробуйте переключить на FIFO.

* Если **потери (CAC)** значительны — это прямые финансовые потери от отклонённых заявок. Сравните их с доходом от обработанных заявок на вкладке **«Экономика»**.

* Для оценки влияния буфера на время цикла смотрите вкладку **«Сводка»** (показатель **«Среднее ожидание»**) и вкладку **«Динамика и достоверность»** (декомпозиция времени в системе).

## Частые формулировки

«как сделать буфер в симуляции», «буфер переполняется, что делать», «FIFO или LIFO в буфере», «потери от отклонённых заявок в симуляции», «ёмкость буфера в DES», «вкладка буферы в отчёте симуляции», «таймаут ожидания в буфере», «потери по CAC из-за буфера».