Использование формул в
бизнес-процессах
Вы можете использовать формулы для решения сложных задач при настройке бизнес-процессов. Например, можно задать автогенерируемый заголовок задачи, который содержит значения нескольких полей, или определить нестандартное условие для перехода по потокам. Формулы в BPMSoft задаются в специальном окне в соответствии с определенными правилами (синтаксисом).
Рисунок 1 — Переход к созданию формулы
Для перехода к окну создания формулы выберите параметр элемента или процесса, значение для которого необходимо установить с помощью формулы. В соответствующем поле нажмите на кнопку
и в выпадающем меню выберите значение «Формула» (Рисунок 1). В результате откроется окно для добавления формулы.
Рисунок 2 — Окно для добавления формулы
Также для работы с формулами используется специальный элемент бизнес-процесса «Формула». Подробнее: Формула
Типы значений в окне создания формулы отображаются в следующем виде:
— уникальный идентификатор;
— числовой;
— дробный;
— текстовый;
— справочный;
— логический;
— дата и время.
Синтаксис формул
Формулы задаются в соответствии с определенным синтаксисом. Для создания формулы используйте следующие операторы, перечисленные в таблице 1.
При работе с формулами необходимо использовать значения одного типа, например, текстовые значения с текстовыми. В противном случае требуется преобразование значений в один тип.
Таблица 1 — Синтаксис формул
| Оператор | Описание |
|
"" |
Оператор для выделения текстового значения |
|
+ |
Оператор для объединения значений |
|
- |
Оператор для вычитания числовых данных |
|
* |
Оператор для умножения числовых данных |
|
/ |
Оператор для деления числовых данных |
|
== |
Оператор для сравнения значений — равно |
|
!= |
Оператор для сравнения значений — неравно |
|
<, > |
Операторы для сравнения значений: меньше и больше, соответственно |
|
>=, <= |
Операторы для сравнения значений: больше или равно и меньше или равно, соответственно |
|
&& |
Логическое «И» |
|
|| |
Логическое «ИЛИ» |
|
true, false |
Логические значения: «истина» и «ложь», соответственно |
|
\n |
Оператор для переноса текстового значения на следующую строку |
Проверка даты в диапазоне
Чтобы проверить, находится ли дата в установленном диапазоне, в формулах используется функция ДеньЛежитВДиапазонеДаты(), в которую передаются четыре параметра:
ДеньЛежитВДиапазонеДаты(datetime1, datetime2, daysBefore, daysAfter)
- datetime1 — параметр, относительно которого определяется установленный диапазон. Тип данных: Дата/Время;
- datetime2 — параметр, который проверяется относительно установленного диапазона. Тип данных: Дата/Время;
- daysBefore — параметр, который обозначает количество дней до параметра datetime1. Тип данных: Целое число;
- daysAfter — параметр, который обозначает количество дней после параметра datetime1. Тип данных: Целое число.
Функция возвращает значение «True», если день из параметра «datetime2» находится в диапазоне [datetime1 - daysBefore; datetime1 + daysAfter].
ДеньЛежитВДиапазонеДаты([#Читаем заявку.Первый элемент результирующей коллекции.Дата подачи#],[#Читаем заявку.Первый элемент результирующей коллекции.Дедлайн выполнения заявки#],5,5)
Условный поток
С помощью формул можно задать условие для перехода по определенному потоку. В зависимости от заданного в формуле условия будет выполнен переход к элементу соответствующего потока.
Зачастую для задания условий используется сравнение справочного параметра с постоянным значением справочника.
Для задания формулы выберите параметр документа «Состояние» и сравните с его справочным значением «Актуально»:
[#Читать данные документа.Первый элемент результирующей коллекции.Состояние#] == [#Справочник.Состояние документа.Актуальный.2144d9a6-b446-4afd-a52d-41f1b1910546#]
Используйте следующее условие для проверки заполненности поля:
[#Читать данные контрагента.Первый элемент результирующей коллекции.Основной контакт#] != Guid.Empty
В данном примере для формулы используется логический оператор «ИЛИ» (||) и оператор сравнения значений (!=):
[#Читать данные заказа.Первый элемент результирующей коллекции.Состояние#] != [#Справочник.Состояние заказа.4. Завершен.40de86ee-274d-4098-9b92-9ebdcf83d4fc#] || [#Читать данные заказа.Первый элемент результирующей коллекции.Состояние#] != [#Справочник.Состояние заказа.5. Отменен.8ab0f830-908b-40d7-80a3-7f49ef70ce70#]
Для выполнения данной проверки используйте следующую формулу:
[#Читать данные контакта.Первый элемент результирующей коллекции.Не использовать Email#] == false
Сложный текст
С помощью формул можно соединять данные, формируя сложный текст с переменными.
Для того чтобы задать тему письма, необходимо сочетать текстовые значения и параметры элемента «Читать данные». Для объединения данных значений используйте соответствующие операторы, представленные в таблице 1. Используйте в формуле пробелы для разделения статичных значений и значений, заключенных в кавычки:
"Статус оплаты по заказу №" + [#Читать данные заказа.Первый элемент результирующей коллекции.Номер#]+" изменен. Получатель:" + [#Читать данные заказа.Первый элемент результирующей коллекции.Имя получателя#]
Для переноса текста на следующую строку используется оператор \n, заключенный в кавычки. Чтобы объединить значения в формуле, используйте оператор +:
"Завершите задачу." + "\n" + "На детали «Результат» зафиксируйте информацию о встрече."
Для корректной работы оператора \n в текстовых полях необходимо установить признак «Многострочный текст».
Расчет числовых типов данных
В формулах можно использовать арифметические операции: сложение, вычитание, умножение и деление для числовых типов данных.
[#Читать данные заявки.Первый элемент результирующей коллекции.Первое число#]/[#Читать данные заявки.Первый элемент результирующей коллекции.Второе число#]*100
Если первое число, например, 12, а второе 30, результат расчета формулы будет 40.
([#Читать данные заявки.Первый элемент результирующей коллекции.Себестоимость товара#]+[#Читать данные заявки.Первый элемент результирующей коллекции.Себестоимость товара#]*[#Читать данные заявки.Первый элемент результирующей коллекции.НДС#]/100)*100
В результате при себестоимости в 50 рублей и НДС равном 15% общая сумма всех товаров составит 5750 рублей.
Разные типы данных
При создании формулы необходимо использовать значения одного типа. Чтобы использовать разные типы, требуется преобразование.
В данном примере для формулы необходимо использовать значения разных типов: текстовый, числовой (поле «Вероятность, %»), дробный (поле «Бюджет клиента») и дата (поле «Дата создания»). Для использования данных типов значений в бизнес-процессе необходимо преобразовать их в текстовый тип. Для этого несоответствующие текстовому типу значения заключаются в круглые скобки и добавляется метод .ToString():
"Оцените лояльность клиента к покупке. Бюджет:" + ([#Читать данные продажи.Первый элемент результирующей коллекции.Бюджет клиента#]).ToString () + "Вероятность:" + ([#Читать данные продажи.Первый элемент результирующей коллекции.Вероятность, %#]).ToString () + "Дата создания:" + ([#Читать данные продажи.Первый элемент результирующей коллекции.Дата создания#]).ToString ()
Расчет даты и времени
В формулах для работы с датой и временем используется структура DateTime языка программирования C#. Основные свойства и методы представлены в таблице 2.
Таблица 2 — Свойства и методы для работы с датой и временем
| Свойство/метод | Описание |
|
.Date |
Возвращает дату выбранного параметра |
|
.Hour |
Возвращает значение часов выбранного параметра даты |
|
DateTime.MinValue |
Минимальное значение даты и времени, 00:00, UTC 1 января 0001 года |
|
.TotalMinutes |
Возвращает полное значение даты и времени в минутах |
|
.TotalHours |
Возвращает полное значение даты и времени в часах |
|
.TotalDays |
Возвращает полное значение даты и времени в количестве дней |
|
.AddMinutes(), .AddHours(), .AddDays() |
Увеличивают выбранное значение даты и времени на определенное количество минут, часов или дней. |
Для проверки в условиях перехода по потоку используйте оператор сравнения != и свойство DateTime.MinValue:
[#Читать данные договора.Первый элемент результирующей коллекции.Дата завершения#] != DateTime.MinValue
Для сравнения значений воспользуйтесь оператором >= и свойством .Date в виде:
[#Читать данные обращения.Первый элемент результирующей коллекции.Фактическое разрешение#].Date >= [#Читать данные обращения.Первый элемент результирующей коллекции.Время разрешения#].Date
Для решения задачи в бизнес-процессе должны быть заданы потоки в зависимости от типа промоакции, например, два потока: промоакции с типом «Скидка» и «Подарок». Для каждого типа промоакции необходимо задать формулу, по которой будет добавлено заданное количество дней к дате согласования. Например, для промоакции с типом «Скидка» необходимо добавить 3 дня к дате согласования. Для этого в формуле используйте метод .AddDays(), в скобках которого укажите нужное количество дней:
([#Читать данные промоакции.Первый элемент результирующей коллекции.Дата согласования#].AddDays(3)).Date
Рекомендуем изучить
Добавление бизнес-процесса
Добавление элементов
Элемент процесса «Формула»
Запуск процессов