Линейный процесс годится для простых сценариев, но реальные регламенты почти всегда содержат развилки «если — иначе» и участки, где несколько согласующих работают одновременно. В Битрикс24 за это отвечают действия «Условие» и «Параллельное выполнение». Разберём их логику и подводные камни.
Зачем нужны ветвления
Ветвление превращает процесс из прямой ленты действий в схему с выбором пути. Без развилок пришлось бы под каждый вариант делать отдельный шаблон, что неудобно и порождает дубли. С ветвлением один процесс обслуживает все случаи: маленькая сумма идёт коротким путём, крупная — через дополнительное согласование.
- Условие — выбор одной ветки из нескольких по логическому правилу.
- Параллельное выполнение — одновременный запуск нескольких веток, которые сходятся в одной точке.
- Параллельное голосование — частный случай, где несколько человек голосуют, а результат считается по правилу большинства.
Все три действия находятся в дизайнере в группе логических конструкций и добавляются на схему перетаскиванием.
Действие «Условие»: развилка если — иначе
Действие «Условие» создаёт на схеме несколько параллельных колонок-веток, но реально выполняется только первая, чьё условие истинно (проверка идёт слева направо). Последняя ветка без условия работает как else — «во всех остальных случаях».
Условие настраивается конструктором сравнений: поле, оператор, значение. Можно комбинировать несколько строк по «И» и «ИЛИ».
| Оператор | Смысл |
|---|---|
| равно / не равно | Точное сравнение |
| больше / меньше | Числа и даты |
| содержит | Подстрока в тексте |
| пустое / не пустое | Проверка заполненности поля |
Параллельное выполнение
Действие «Параллельное выполнение» запускает несколько веток одновременно и не идёт дальше, пока не завершатся все. Это нужно, когда шаги не зависят друг от друга: например, параллельно уведомить бухгалтерию, поставить задачу логисту и запросить документы у клиента.
- все ветки стартуют сразу при входе в блок;
- каждая выполняется своим темпом;
- процесс продолжается только после слияния всех веток в общую точку.
Главная выгода — время: три согласования по одному дню, запущенные параллельно, займут день, а не три. При этом внутри каждой ветки можно строить свою последовательность действий, включая вложенные условия.
Параллельное голосование
Параллельное голосование — специализированная конструкция, когда решение принимают несколько человек, а процесс должен посчитать результат. Каждому участнику приходит запрос, а действие собирает голоса «за»/«против» и определяет исход по заданному правилу.
- Большинство — решение по перевесу голосов;
- Единогласно — достаточно одного «против», чтобы отклонить;
- Хотя бы один «за» — мягкий вариант согласования.
После подсчёта голосование отдаёт результат в переменную, по которой дальше строится обычное «Условие»: одобрено — идём к исполнению, отклонено — возвращаем инициатору с комментариями. Голосование удобно для коллегиальных решений: закупочные комитеты, приёмка работ, утверждение бюджета.
Вложенность и сочетание конструкций
Логические блоки свободно вкладываются друг в друга, и реальные процессы обычно комбинируют их. Типичная схема закупки:
- Условие по сумме: до лимита — короткая ветка, выше — расширенная;
- в расширенной ветке — параллельное выполнение: одновременно согласуют финансовый и технический директора;
- внутри одной из веток — голосование закупочной комиссии;
- после слияния — итоговое условие по совокупному результату.
Чтобы такая схема оставалась читаемой, давайте веткам осмысленные названия и не увлекайтесь глубиной вложенности: три-четыре уровня — практический предел, после которого процесс проще разбить на несколько шаблонов с вызовом вложенного процесса.
Частые ошибки при ветвлении
Ветвления — источник самых коварных багов, потому что визуально схема выглядит правильно, а выполняется не так, как задумано.
- Ветка else перехватывает всё. Общее условие стоит левее узкого — узкое никогда не срабатывает.
- Зависший параллельный блок. Одна ветка ждёт ответа сотрудника, который в отпуске, — весь процесс стоит до слияния.
- Конфликт переменных. Параллельные ветки перезаписывают общую переменную.
- Нет ветки по умолчанию. Ни одно условие не истинно — процесс проваливается мимо всех веток.
Итог
Развилки и параллелизм — то, что отличает рабочий регламент от игрушечной схемы. «Условие» выбирает путь по правилу, «Параллельное выполнение» экономит время на независимых шагах, а «Параллельное голосование» оформляет коллегиальные решения. Ключ к надёжности — правильный порядок веток, отдельные переменные для параллельных участков и обязательная ветка по умолчанию.
Мы в B2Bsite собираем такие процессы под реальные регламенты согласования и следим, чтобы схема была не только корректной, но и понятной для сопровождения. Если процесс на портале зависает или ведёт себя непредсказуемо на развилках, поможем разобраться и переработать логику.
Частые вопросы
Сколько веток условия выполнится?
Только одна — первая слева, чьё условие истинно. Остальные не проверяются. Последняя ветка без условия работает как «иначе» и срабатывает, когда все предыдущие ложны.
Чем отличается параллельное выполнение от условия?
Условие выбирает одну ветку из нескольких. Параллельное выполнение запускает все ветки одновременно и продолжает процесс только после того, как каждая из них завершится.
Что даёт параллельное выполнение по времени?
Оно позволяет выполнять независимые шаги одновременно. Три согласования по дню, запущенные параллельно, займут один день вместо трёх.
Как принять коллегиальное решение в процессе?
Используйте параллельное голосование: каждому участнику уходит запрос, а действие подсчитывает голоса по правилу большинства, единогласия или хотя бы одного «за».
Почему узкое условие никогда не срабатывает?
Скорее всего, левее стоит более общее условие, которое перехватывает все случаи. Расположите узкие условия левее, а общий вариант — правее.
Можно ли вкладывать условия и параллельные блоки друг в друга?
Да, конструкции свободно вкладываются. Но не увлекайтесь: при глубине более трёх-четырёх уровней процесс лучше разбить на отдельные шаблоны с вызовом вложенного процесса.
Почему параллельный процесс завис?
Обычно одна из веток ждёт ответа сотрудника, которого нет на месте. Пока не завершатся все ветки, слияние не наступит. Задавайте тайм-ауты для действий ожидания.
Опасно ли писать в одну переменную из параллельных веток?
Да, результат станет непредсказуемым из-за гонки. Заведите для каждой ветки свою переменную и сведите значения уже после точки слияния.
Поможем с настройкой и поддержкой Битрикс24
Поможем с настройкой, доработкой и поддержкой Битрикс24.