Это старая версия документа.
Слияние веток процесса возможно в двух случаях:
После оператора ветвления имитация исполняет параллельные ветки экземпляра процесса одновременно. Параллельно выполняемые ветки экземпляра процесса могут снова объединиться в операторе слияния (Рис.1). Продолжительность имитации каждой параллельной ветки, в общем случае, будет разной, следовательно, в оператор слияния токены, порожденные оператором ветвления, придут в разное время. Токен, пришедший по первой ветке экземпляра процесса, может ожидать в точке слияния прихода следующего токена, а может запустить выполнение процесса далее без ожидания. Это будет зависеть от используемого оператора слияния и параметра время синхронизации.
На диаграмме процесса в нотации ЕРС в качестве точки слияния параллельных веток процесса используются операторы. Время синхронизации задается в Окне свойств каждого оператора (Рис.2).
Если в качестве оператора слияния используется оператор «И», дальнейшее выполнение экземпляра процесса продолжится только в случае, если выполнятся все ветки, входящие в этот оператор. Выполнение одной из веток запускает время синхронизации, в течение которого экземпляр процесса ожидает выполнения остальных веток. Если по окончании времени синхронизации остальные ветки экземпляра процесса не выполнились, выполнение экземпляра процесса останавливается.
Если время синхронизации в операторе не задано, после выполнения одной из веток экземпляр процесса будет ожидать выполнения остальных веток до окончания имитации.
Если в качестве оператора слияния используется оператор «ИЛИ», выполнение одной из веток, входящей в оператор, запускает дальнейшее выполнение экземпляра процесса и время синхронизации. Если в течение времени синхронизации выполняются другие ветки экземпляра процесса, дальнейшее выполнение экземпляра процесса они не запускают. По истечении времени синхронизации цикл повторяется снова.
Если время синхронизации в операторе не задано, каждая ветка экземпляра процесса, входящая в оператор, запускает дальнейшее выполнение экземпляра процесса.
Если в качестве оператора слияния используется оператор «Исключающее ИЛИ», вне зависимости от значения времени синхронизации каждая ветка экземпляра процесса, входящая в этот оператор, запускает дальнейшее выполнение экземпляра процесса.
На диаграммах процессов в нотациях Процесс, Процедура в качестве точки слияния параллельных веток выступает блок процесса, у которого есть несколько входящих стрелок «Связь предшествования».
Время синхронизации задается для всех диаграмм процессов в нотациях Процесс, Процедура один раз в параметре «Время синхронизации для Процессов/Процедур» (Главное меню → Анализ процессов → Параметры ФСА).
В течение времени синхронизации экземпляр процесса будет ожидать выполнения всех веток, входящих в точку слияния. Дальнейшее выполнение экземпляра процесса продолжится, только если в течение времени синхронизации выполнятся все ветки экземпляра процесса. Если этого не произойдет, по окончании времени синхронизации выполнение экземпляра процесса остановится.
Если значение времени синхронизации не установлено, после выполнения одной из веток экземпляр процесс будет ожидать выполнения остальных веток в точке слияния до окончания имитации.
Если в качестве оператора слияния используется Эксклюзивный шлюз (XOR), вне зависимости от значения времени синхронизации каждая ветка экземпляра процесса, входящая в этот оператор, запускает дальнейшее выполнение экземпляра процесса. Тот же механизм используется для случая, когда оператор слияния отсутствует.
= | ||
Рисунок 3. Слияние по XOR |
Неэксклюзивных шлюз слияния потоков используются для объединения нескольких параллельных веток в одну. Для шлюза может быть задано время синхронизации.
Окончание выполнения одной из сливающихся веток, запускает дальнейшее выполнение экземпляра процесса и стартует время синхронизации. Если в течение времени синхронизации завершают выполнение другие ветки экземпляра процесса, то дальнейшее выполнение экземпляра процесса они не запускают. По истечении времени синхронизации цикл повторяется снова.
Если время синхронизации для шлюза не задано, каждая ветка экземпляра процесса, входящая в шлюз, запускает дальнейшее выполнение экземпляра процесса.
= | ||
Рисунок 4. Слияние по OR |
Комплексный шлюз обрабатывается в процессе имитации как неэксклюзивный шлюз (ИЛИ).
Параллельный шлюз обрабатывается в процессе имитации как оператор AND в нотации EPC.
В качестве примера рассмотрим процесс обслуживания клиента (Рис.5).
По условиям примера клиент может обратиться в компанию для приобретения либо продукта А, либо продукта Б, либо для приобретения обоих продуктов. После выяснение информации о том, какой продукт необходим клиенту, сотрудники компании изготавливают этот продукт и отправляют его клиенту. Изготовление каждого продукта занимает разное время. Поэтому если клиенту необходимо оба продукта, то изготовленные продукты могут быть отправлены клиенту либо оба сразу, либо по отдельности по мере изготовления каждого.
Возможна ситуация, когда один из продуктов уже изготовлен, а до окончания изготовления второго продукта осталось не более 8 часов. В этом случае целесообразно подождать изготовления второго продукта и отправить весь заказ клиенту сразу.
Для моделирования данной ситуации в точке слияния веток процесса в окне свойств оператора «ИЛИ» необходимо задать время синхронизации (Рис.6).
В результате, в случае, если компания будет изготавливать для клиента оба продукта, возможны 2 ситуации:
Для слияния по AND для всех нотаций принимается, что токен, порожденный стартом одного экземпляра стартового события на одной ветке, должен обязательно дождаться токен, порожденный стартом другого стартового события на другой ветке. Ожидание производится по стандартным правилам, принятым для данной нотации (они описаны выше). Токены объединяются по принципу "первый с первым". Например, если есть 100 токенов процесса А, ожидающих в точке слияния, то первый пришедший токен процесса В продолжит выполнение самого раннего экземпляра процесса А. Поэтому рекомендуется задавать стартовые события на одной и другой ветке таким образом, чтобы частота их возникновения совпадала. Иначе экземпляры объединяемых токенов «разъедутся» со временем и имитация может дать неверные результаты.
Для имитации ситуаций, когда один токен, порожденный стартовым событием одной ветки, должен объединиться со всеми токенами, порожденными другим стартовым событием (см. Рис.7), у стартовых событий необходимо заполнить значение параметра "Область действия".
По умолчанию, параметр "Область действия" скрыт . Его можно вывести на показ с помощью пункта меню Настройка колонок (Окно свойств события → вкладка Параметры ФСА → кнопка Действия → Настройка колонок). Параметр может принимать значения:
Локальное событие возникает в одном экземпляре процесса. Глобальное событие возникает во всех экземплярах соответствующих процессов, которые созданы в имитации на момент возникновения этого события. Для рассматриваемого примера событие "Возникла необходимость отправить письмо" является Локальным, а событие "Пришел курьер" - Глобальным. Все токены, порожденные событием "Возникла необходимость отправить письмо", дойдя до оператора AND, будут ожидать токена, порожденного событием "Пришел курьер", и только после возникновения события "Пришел курьер", выполнение процесса продолжится.
В нотации BPMN диаграмма, изображенная на Рис.7, будет иметь следующий вид (Рис.8):
Для слияния по XOR для всех нотаций слияние работает на пропуск токена, никоим образом его не обрабатывая.
Слияние по ИЛИ не реализовано в связи с тем, что невозможно определить, какие токены в точке слияния необходимо слить вместе, а какие оставить раздельными.
Для имитации сложных взаимодействий между ветками процессов можно использовать переменные.
Для того чтобы процесс "Сборка изделия" начал выполняться в момент, когда возникнут события "Деталь 1 сформирована", "Деталь 2 закуплена", можно:
Процесс "Сборка изделия" начнет выполняться только тогда, когда выполнятся оба события: "Деталь 1 сформирована" и "Деталь 2 закуплена".