В данной статье описаны ошибки, возникающие при исполнении бизнес-процессов. Про ошибки, возникающие при моделировании, вы можете прочитать в статьях «Публикация бизнес-процесса» и «Проверка корректности процесса».
Ошибка, возникшая на определённом шаге процесса, отражается в карточке экземпляра. Там же вы можете предпринять необходимое действие: пропустить данный шаг или повторить его выполнение. При необходимости процесс можно также прервать.
В зависимости от того, как ошибка влияет на ход процесса в ELMA365, она может считаться критической или некритической.
Критические ошибки
При критической ошибке процесс прерывается, а пользователи из группы Администраторы получат сообщение с темой «Процесс прерван из‑за критической ошибки».
Пример ошибки |
Возможная причина |
Решение |
Ошибка при создании элемента приложения. |
Приложение, в котором требуется создать элемент, удалено из компании. |
Убедитесь, что в блоке Создание элемента верно указано приложение. |
Ошибка при изменении элемента. |
Сервис main оказался недоступен, поэтому данные в полях не могли обновиться. |
После устранения проблемы перезапустите шаг процесса. |
Ошибка при установке статуса. |
Статус был удалён из приложения. |
Убедитесь, что в настройках блока Управление статусом указаны действующие статусы приложения. |
Ошибка при запуске синхронного подпроцесса. |
При запуске синхронного подпроцесса выполнение основного бизнес-процесса приостанавливается. Если в подпроцессе возникает ошибка, то основной процесс прерывается. |
Исправьте ошибку в подпроцессе, чтобы основной процесс продолжался. |
Ошибка в событии-таймере «Не удалось взвести таймер». |
Не заполнена переменная, указывающая время срабатывания таймера, или не удалось высчитать время в рамках рабочего календаря. |
Проверьте заполнение переменной, в которой задаётся срок для таймера, или настройки рабочего календаря. |
Некритические ошибки
При некритической ошибке процесс продолжается, но администраторы также получат оповещение с темой «Во время исполнения процесса произошла ошибка».
Пример ошибки |
Возможная причина |
Решение |
Ошибка при присваивании значения переменной контекста. |
Не заполнена переменная правого операнда в переходе из шлюза. |
Убедитесь, что в ходе процесса переменная заполняется. |
Ошибка при запуске асинхронного подпроцесса. |
При запуске асинхронного подпроцесса выполнение основного бизнес-процесса не прекращается. Если в подпроцессе возникает ошибка, то основной процесс не прерывается, но вы увидите сообщение «Не удалось запустить подпроцесс». |
Исправьте ошибку в подпроцессе. |
Ошибка в оповещении. |
Не заполнена переменная, в которой хранится получатель. |
Проверьте настройки графического элемента Оповещение. Возможно, в качестве получателя указан элемент оргструктуры, который к моменту исполнения процесса был удалён. Убедитесь, что сотрудники, группы и элементы оргструктуры, которым должно быть направлено оповещение, существуют в системе. |
Ошибка при постановке задачи пользователю «Не удалось рассчитать срок завершения задачи». |
Не получилось высчитать время в рамках рабочего календаря. |
Проверьте настройки времени выполнения задачи. |
Автоматическое прерывание зацикленного бизнес-процесса
Может получиться так, что бизнес-процесс зациклится на каком-то шаге. Например, в диаграмме процесса использован исключающий шлюз с переходом по умолчанию на самого себя и переходом на конечное событие без заданного условия. В этом случае процесс будет раз за разом повторять один и тот же шаг — выходить из шлюза и возвращаться обратно в него же.

По умолчанию в процессе каждый шаг может повторяться не более 100 раз. Это помогает исключить бесконечное исполнение процесса:
- по кругу, когда используется исключающий шлюз, зацикленный на себе;
- параллельно при множественном запуске более 100 экземпляров подпроцесса.
Если количество повторений превысит указанное значение, процесс автоматически прерывается, а супервизор системы получает соответствующее оповещение.
Запустить шаг процесса более 100 раз
Если нужно выполнить шаг бизнес-процесса более 100 раз, можно использовать исключающий шлюз и таймер длительностью от трёх минут. В шлюзе разделите общее количество повторений на несколько частей меньше 100 и направьте процесс на таймер. Он нужен, чтобы приостановить процесс для обнуления системного счётчика повторений. После такой остановки этот счётчик будет заново считать оставшиеся шаги, выполняемые по кругу. Таким образом можно обойти ограничение в максимум 100 повторений.
Допустим, в процессе обрабатывается 101 элемент приложения. Пользователь добавляет их на форме задачи. Затем с помощью исключающего шлюза с каждым из элементов запускается экземпляр подпроцесса. В этом примере ставится задача исполнителю.
Чтобы избежать ошибки в процессе, используйте на схеме:
- исключающий шлюз со скриптом. Это позволяет разделить общее количество повторений на несколько частей и запустить их постепенно, чтобы обойти системное ограничение в максимум 100 повторений;
- блок Скрипт, в котором считается количество элементов, прошедших через шлюз;
- таймер длительностью от трёх минут. Он приостанавливает процесс, когда в скрипте шлюза зафиксируется 99 повторений подпроцесса. В течение этого времени обнулится системный счётчик повторений, и можно продолжить исполнение нужного шага с оставшимися элементами.

Рассмотрим эти настройки:
- На вкладке Контекст добавьте переменные для выполнения скриптов и настройки переходов:
- Счётчик повторений — переменная типа Число (целое), чтобы считать количество повторений подпроцесса в скрипте шлюза;
- Счётчик элементов — переменная типа Число (целое), чтобы считать количество элементов, для которых нужно запустить подпроцесс в блоке Скрипт;
- Приложение с элементами — переменная типа Приложение (несколько), чтобы добавить поле в блоке Задача;
- Приложение подпроцесса — переменная типа Приложение (один), чтобы настроить блок Запуск процесса.
- На вкладке Схема разместите блок Задача. Вынесите на форму задачи поле с приложением, элементы которого нужно обработать.
- Добавьте на схему исключающий шлюз. В нём считается количество повторений запущенных подпроцессов. Для этого в настройках шлюза на вкладке Служебная переменная включите опцию В условиях перехода использовать служебную переменную с типом Число и добавьте скрипт:
async function getIterationsNumber(): Promise<number> {
// Считаем количество итераций в цикле, используя контекстную переменную Счётчик итераций
Context.data.iterator = Context.data.iterator! + 1;
if (Context.data.iterator > 99) { // Если количество итераций в цикле больше 99, то обнуляем счётчик итераций
Context.data.iterator = 0;
}
return Context.data.iterator; // Возвращаем в служебной переменной значение счётчика итератора
}
- Добавьте переход от блока Задача к шлюзу.
- Разместите на схеме блок Скрипт. Укажите в нём функцию, чтобы получать элементы по одному из задачи, считать их и передавать на следующий шаг Запуск процесса.
// Этот скрипт не является типовым |
- Добавьте переход от шлюза к блоку Скрипт.
- Разместите на схеме блок Запуск процесса. Выберите в нём пользовательский процесс, в котором создаётся задача с вложенным элементом.
- Добавьте переходы от блока Скрипт к блоку Запуск процесса, а от него к шлюзу.
- Вынесите на схему таймер. Укажите срок выполнения три минуты.
- Добавьте переход от шлюза к таймеру. На вкладке Условия перехода задайте следующее условие: Служебная переменная шлюза = 99. Таким образом при достижении 99 повторений запущенных подпроцессов основной процесс перейдёт в таймер и остановится на три минуты. В течение этого времени обнулится системный счётчик повторений, который зафиксировал выполненные круги шага. Это позволяет продолжить запуск подпроцессов с оставшимися элементами. Если количество повторений меньше 99, то процесс завершится, минуя таймер.
- Добавьте переход на конечное событие. На вкладке Условия перехода задайте следующее условие: Счётчик элементов = 0. Когда для всех элементов запустится подпроцесс, основной процесс завершится.