Вычисления в полях процессов

Введение

Раздел актуален для версий системы 7.8 и последующих.

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

  • логические функции

  • текстовые функции

  • математические функции

  • функции обработки даты/времени

  • функции обработки условных операторов

  • счётчики

Более детально функции каждого типа описаны ниже (см. раздел Встроенные функции).

Для трассировки работы указанных формул все необходимые данные могут быть записаны в файл журнала (см. раздел Включение режима отладчика).

Создаваемые формулы могут содержать данные из следующих полей:

  • Данные из полей контролируемого модуля (основные параметры)

  • Данные из полей модулей, связанных с контролируемым модулем (связанные параметры)

Основные и связанные параметры

Добавление основных параметров

При работе с основными параметрами аргументами функций являются основные поля контролируемого модуля. В выпадающем списке перечислены все поля модуля, как основные, так и пользовательские, добавленные через Студию. Для добавления основного параметра выберите в списке необходимое поле и нажмите на кнопку Добавить основной параметр, после чего в таблице параметров появится соответствующая запись. Каждому добавляемому параметру присваивается уникальный идентификатор в фигурных скобках {Px}, где
P – обозначение основного параметра
x - порядковый номер параметра

Для некоторых типов полей (DropDown и MultiSelect) отображается дополнительный комбобокс, где можно выбрать какая именно часть данных будет участвовать в вычислениях: ключ или видимое значение. По умолчанию используется ключ.

Дополнительная информация о настройке ключей и видимых значений описана в разделе Создание стандартного комбобокса.

Для удаления параметра нажмите на кнопку справа от соответствующей записи.

При удалении параметра из таблицы идентификаторы других параметров могут быть изменены!

Добавление основного параметра

Идентификатор используется для ссылки на соответствующее поле при создании формулы. В примере выше все вхождения идентификатора {P0} в конечной формуле будут заменены полем Тип, а все вхождения идентификатора {P1} – полем Годовой доход.

Добавление связанных параметров

Настройка связанных параметров схожа с настройкой основных параметров (см. выше), с той лишь разницей, что перед тем как выбрать связанное поле, из дополнительного комбобокса необходимо выбрать модуль, связанный с контролируемым модулем отношением Один-к-одному или Один-ко-многим.

Дополнительная информация о связях описана в разделе Создание и редактирование связей.

Для добавления связанного параметра выберите модуль, связанный с контролируемым, затем в соседнем списке выберите необходимое поле и нажмите на кнопку Добавить связанный параметр, после чего в таблице параметров появится соответствующая запись.

Добавление связанного параметра

Каждому связанному параметру присваивается уникальный идентификатор в фигурных скобках {Rx}, где R – обозначение связанного параметра x - порядковый номер параметра

Для некоторых типов полей (DropDown и MultiSelect) отображается дополнительный комбобокс, где можно выбрать какая именно часть данных будет участвовать в вычислениях: ключ или видимое значение. По умолчанию используется ключ.

Дополнительная информация о настройке ключей и видимых значений описана в разделе Создание стандартного комбобокса.

Добавление формулы вычисляемого поля

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

Для удаления формулы нажмите на кнопку справа от соответствующей записи.

Добавление формулы вычисляемого поля

Вычисление формулы происходит по установленным правилам (при сохранении записи, по заданию в планировщике, либо в обоих случаях).

Формула может содержать любой текст в кодировке UTF-8, но вычисления будут выполняться только в выражениях, заключённых в фигурные скобки.

Например, если в поле Описание необходимо сохранять тип добавленного контрагента, фамилию ответственного и наименование отдела, в котором он состоит, то конечная формула может выглядеть следующим образом:

{P0} был создан пользователем {R0} из отдела {R1}

Пример добавления формулы

При необходимости в вычисляемых полях могут быть задействованы встроенные функции, позволяющие создавать достаточно сложные формулы. Перечень доступных функций описан следующем разделе.

Встроенные функции

Как уже было указано выше, все функции вычисляемых полей заключаются в фигурные скобки и выглядят следующим образом: {ИмяФункции(параметр1; параметр2;…)}.

Количество параметров может быть различным в зависимости от конкретной функции. При выполнении вычислений введённые в поля формулы заменяются вычисленными значениями.

Функции могут быть вложенными, использующими результат вычисления одной функции в качестве параметра другой, например:

{power({subtract({divide({add({multiply(10; 2)}; 12)}; 8)}; 1)}; 2)}

Указанная функция вычисляет следующее математическое выражение: ((((10 * 2) + 12) / 8) – 1)2

Условно все функции разделены на 6 групп, каждая их которых описана ниже.

Логические функции

Логические функции возвращают два значения: ИСТИНА или ЛОЖЬ, соответственно в виде 1 или 0 и могут быть использованы при работе с полями типа checkbox. Также эти функции могут быть использованы в качестве логического условия в функции ifThenElse (см. ниже).

equal

Сигнатура

{equal(параметр1; параметр2)}

Параметры

параметр1: любое значение

параметр2: любое значение

Описание

Определяет равенство параметра1 параметру2

Возвращаемое значение

1 (если параметры равны) или 0 (если параметры не равны)

Пример

{equal(1; 2)} Возвращаемое значение: 0

notEqual

Сигнатура

{notEqual(параметр1; параметр2)}

Параметры

параметр1: любое значение

параметр2: любое значение

Описание

Определяет неравенство параметра1 параметру2

Возвращаемое значение

0 (если параметры равны) или 1 (если параметры не равны)

Пример

{notEqual (1; 2)} Возвращаемое значение: 1

greaterThan

Сигнатура

{greaterThan(параметр1; параметр2)}

Параметры

параметр1: любое значение

параметр2: любое значение

Описание

Определяет, что параметр1 больше параметра2

Возвращаемое значение

1, если параметр1 больше параметра2, в противном случае - 0

Пример

{greaterThan(3; 3)} Возвращаемое значение: 0

greaterThanOrEqual

Сигнатура

{greaterThanOrEqual(параметр1; параметр2)}

Параметры

параметр1: любое значение

параметр2: любое значение

Описание

Определяет, что параметр1 больше или равен параметру2

Возвращаемое значение

1, если параметр1 больше или равен параметру2, в противном случае - 0

Пример

{greaterThanOrEqual(3; 3)} Возвращаемое значение: 1

lessThan

Сигнатура

{lessThan(параметр1; параметр2)}

Параметры

параметр1: любое значение

параметр2: любое значение

Описание

Определяет, что параметр1 меньше параметра2

Возвращаемое значение

1, если параметр1 меньше параметра2, в противном случае - 0

Пример

{lessThan(3; 3)} Возвращаемое значение: 0

lessThanOrEqual

Сигнатура

{lessThanOrEqual(параметр1; параметр2)}

Параметры

параметр1: любое значение

параметр2: любое значение

Описание

Определяет, что параметр1 меньше или равен параметру2

Возвращаемое значение

1, если параметр1 меньше или равен параметру2, в противном случае - 0

Пример

{lessThanOrEqual(3; 3)} Возвращаемое значение: 1

empty

Сигнатура

{empty(параметр)}

Параметры

параметр: текстовое значение

Описание

Определяет, что параметр пуст

Возвращаемое значение

1, если параметр пуст, в противном случае - 0

Пример

{empty(Любой-ТеКсТ)} Возвращаемое значение: 0

notEmpty

Сигнатура

{notEmpty(параметр)}

Параметры

параметр: текстовое значение

Описание

Определяет, что параметр пуст

Возвращаемое значение

1, если параметр не пуст, в противном случае - 0

Пример

{notEmpty(Любой-ТеКсТ)} Возвращаемое значение: 1

not

Сигнатура

{not(параметр)}

Параметры

параметр: логическое значение

Описание

Логическое отрицание параметра

Возвращаемое значение

1, если параметр равен 0, 0 если параметр равен 1

Пример

{not(0)} Возвращаемое значение: 1

and

Сигнатура

{and(параметр1; параметр2)}

Параметры

параметр1: логическое значение

параметр2: логическое значение

Описание

Применяет логический оператор И к двум логическим значениям

Возвращаемое значение

1, если параметр1 И параметр2 равен 1 и 0, если любой из параметров равен нулю

Пример

{and(1; 0)} Возвращаемое значение: 0

or

Сигнатура

{or(параметр1; параметр2)}

Параметры

параметр1: логическое значение

параметр2: логическое значение

Описание

Применяет логический оператор ИЛИ к двум логическим значениям

Возвращаемое значение

1, если параметр1 ИЛИ параметр2 равен 1 и 0, если оба параметра равны нулю

Пример

{or(1; 0)} Возвращаемое значение: 1

Строковые функции

Функции используются для обработки текста. Все перечисленные функции полностью поддерживают кодировку UTF-8.

substring

Сигнатура

{substring(text; start; length)}

Параметры

text: текстовое значение

start: целочисленное значение

length [необязательный параметр]: целочисленное значение

Описание

Возвращает подстроку указанной строки, начиная с символа start. Если параметр length опущен, то возвращаются все символы от позиции start до конца строки, в противном случае возвращается подстрока длинной length символов. Обратите внимание: индексация символов указанной строки начинается с 0.

Возвращаемое значение

Подстрока указанной строки

Пример

{substring(Ойра-Ойра; 4)} Возвращаемое значение: -Ойра

length

Сигнатура

{length(параметр)}

Параметры

параметр: текстовое значение

Описание

Возвращает количество символов в указанной строке.

Возвращаемое значение

Количество символов в указанной строке.

Пример

{length(зав. магистр-академик Морис-Иоганн-Лаврентий Пупков-Задний)} Возвращаемое значение: 58

replace

Сигнатура

{replace(search; replace; text)}

Параметры

search: текстовое значение

replace: текстовое значение

subject: текстовое значение

Описание

Производит замену всех вхождений подстроки search на подстроку replace в строке text.

Возвращаемое значение

Текст с заменёнными значениями подстрок.

Пример

{replace(кадров; вечной молодости; Отдел кадров)} Возвращаемое значение: Отдел вечной молодости

position

Сигнатура

{position(subject; search)}

Параметры

subject: текстовое значение

search: текстовое значение

Описание

Возвращает позицию первого вхождения подстроки search строки subject.

Возвращаемое значение

Целочисленное значение первого вхождения подстроки, либо -1, если подстрока не обнаружена.

Пример

{position(Познание бесконечности требует бесконечного времени; времени)} Возвращаемое значение: 45

lowercase

Сигнатура

{lowercase(параметр)}

Параметры

параметр: текстовое значение

Описание

Перевод текста в нижний регистр

Возвращаемое значение

Текст в нижнем регистре

Пример

{lowercase(ДиваН-ТраНсляТоР)} Возвращаемое значение: диван-транслятор

uppercase

Сигнатура

{uppercase(параметр)}

Параметры

параметр: текстовое значение

Описание

Перевод текста в верхний регистр

Возвращаемое значение

Текст в верхнем регистре

Пример

{uppercase(ДиваН-ТраНсляТоР)} Возвращаемое значение: ДИВАН-ТРАНСЛЯТОР

Математические функции

add

Сигнатура

{add(параметр1; параметр2)}

Параметры

параметр1: цифровое значение

параметр2: цифровое значение

Описание

Сложение параметров параметр1 и параметр2

Возвращаемое значение

Сумма параметров параметр1 и параметр2

Пример

{add(3.12; 4.83)} Возвращаемое значение: 7.95

subtract

Сигнатура

{subtract(параметр1; параметр2)}

Параметры

параметр1: цифровое значение

параметр2: цифровое значение

Описание

Вычитание параметра2 из параметра1

Возвращаемое значение

Разница между параметром2 и параметром1

Пример

{subtract(8; 3)} Возвращаемое значение: 5

multiply

Сигнатура

{multiply(параметр1; параметр2)}

Параметры

параметр1: цифровое значение

параметр2: цифровое значение

Описание

Умножение параметра1 на параметр2

Возвращаемое значение

Результат умножения параметра1 на параметр2

Пример

{multiply(2; 4)} Возвращаемое значение: 8

divide

Сигнатура

{divide(параметр1; параметр2)}

Параметры

параметр1: цифровое значение

параметр2: цифровое значение

Описание

Деление параметра1 на параметр2

Возвращаемое значение

Результат деления параметра1 на параметр2

Пример

{divide(8; 2)} Возвращаемое значение: 4

power

Сигнатура

{power(параметр1; параметр2)}

Параметры

параметр1: цифровое значение

параметр2: цифровое значение

Описание

Возведение параметра1 в степень параметр2

Возвращаемое значение

Результат возведения параметра1 в степень параметр2

Пример

{power(2; 7)} Возвращаемое значение: 128

squareRoot

Сигнатура

{squareRoot(параметр)}

Параметры

параметр: цифровое значение

Описание

Вычисление квадратного корня из параметра

Возвращаемое значение

Квадратный корень параметра

Пример

{squareRoot(9)} Возвращаемое значение: 3

absolute

Сигнатура

{absolute(параметр)}

Параметры

параметр: цифровое значение

Описание

Вычисление абсолютного значения параметра

Возвращаемое значение

Абсолютное значение параметра

Пример

{absolute(-44)} Возвращаемое значение: 44

Функции даты и времени

Большая часть описанных здесь функций использует параметр форматирования для представления даты/времени в желаемом формате. Параметры, указываемые при форматировании значений, аналогичны таковым из PHP.

Символ форматирования Описание Пример

День

d

День месяца с ведущими нулями

01 - 31

D

Сокращённое представление для недели

Mon - Sun

j

День месяца без ведущих нулей

1 - 31

l

Полное текстовое представление дня недели

Sunday - Saturday

N

Цифровое представление дня недели (ISO-8601)

1 (для понедельника) - 7 (для воскресенья)

S

Суффиксы для порядковых числительных

st, nd, rd или th. Может быть использован совместно с «j»

w

Цифровое представление дня недели

0 (для воскресенья) - 6 (для субботы)

z

День года (начиная с 0)

0 - 365

Неделя

W

Номер недели в году, неделя начинается с понедельника (ISO-8601)

42 (42-я неделя года)

Месяц

F

Полное текстовое представление месяца

January - December

m

Номер месяца с ведущими нулями

01 - 12

M

Сокращённое представление месяца

Jan - Dec

n

Номер месяца без ведущих нулей

1 - 12

t

Количество дней в указанном месяце

28 - 31

Год

L

Является ли год високосным

1, если год високосный, в противном случае - 0

o

Полное цифровое представление года (ISO-8601), схож с «Y», за тем исключением, что если номер недели (W) принадлежит предыдущему или следующему году, то отображается именно этот год

2003

Y

Полное цифровое представление года

2003

y

Краткое цифровое представление года

17 (вместо 2017)

Время

a

Ante meridiem или Post meridiem в нижнем регистре

am или pm

A

Ante meridiem или Post meridiem в верхнем регистре

AM или PM

B

Интернет-время

000 - 999

g

Часы в 12-часовом формате без ведущих нулей

1 - 12

G

Часы в 24-часовом формате без ведущих нулей

0 - 23

h

Часы в 12-часовом формате с ведущими нулями

01 - 12

H

Часы в 24-часовом формате с ведущими нулями

00 - 23

i

Минуты с ведущими нулями

00 - 59

s

Секунды с ведущими нулями

00 - 59

Часовые пояса

e

Идентификатор часового пояса

UTC, GMT, Atlantic/Azores

I

Указывает, попадают ли заданные дата и время в диапазон летнего времени

1, если летнее время, иначе - 0

O

Разница в часах с нулевым меридианом (GMT)

+0200

P

Разница в часах с нулевым меридианом (GMT) с разделителем между часами и минутами

+02:00

T

Аббревиатура часового пояса

EST, MDT

Z

Смещение часового пояса - разница между универсальным (UTC) и местным временем в секундах; смещение положительное, если местное время отстаёт от UTC, и отрицательное, если оно опережает UTC

-43200 - 50400

Форматы даты/времени

c

Дата в стандарте ISO 8601

2004-02-12T15:19:21+00:00

r

Дата в формате RFC 2822

Thu, 21 Dec 2000 16:01:07 +0200

U

Количество секунд, прошедших с 1 января 1970 года (UNIX-время)

Даты могут быть представлены в следующих форматах (форматы дат эквиваленты форматам объекта DateTime в PHP):

Описание Формат Пример

Месяц и день (американский вариант)

mm "/" dd

"5/12", "10/27"

Месяц, день и год (американский вариант)

mm "/" dd "/" y

"12/22/78", "1/17/2006"

Год (4 цифры), месяц и день, разделённые слешем

YY "/" mm "/" dd

"2008/6/30", "1978/12/22"

Год (4 цифры) и месяц (GNU)

YY "-" mm

"2008-6", "2008-06"

Год (4 цифры), месяц и день, указанные через тире

y "-" mm "-" dd

"2008-6-30", "78-12-22"

День, месяц и год (4 цифры), разделённые точкой, знаком табуляции или тире

dd [.\t-] mm [.-] YY

"30-6-2008", "22.12.1978"

День, месяц и год (2 цифры), разделённые точкой или знаком табуляции

dd [.\t] mm "." yy

"30.6.08", "22\t12.78"

День, название месяца и год

dd ([ \t.-])* m ([ \t.-])* y

"30-June 2008", "22DEC78", "14 III 1879"

Название месяца и год (4 цифры)

m ([ \t.-])*

"June 2008", "DEC1978", "March 1879"

Год (4 цифры) и название месяца

YY ([ \t.-])* m

"2008 June", "1978-XII", "1879.MArCH"

Название месяца, день и год

m ([ .\t-])* dd [,.stndrh\t ]+ y

"July 1st, 2008", "May.9,78"

Название месяца и день

m ([ .\t-])* dd [,.stndrh\t ]*

"July 1st,", "Apr 17", "May.9"

День и название месяца

d ([ .\t-])* m

"1 July", "17 Apr", "9.May"

Аббревиатура месяца, день и год

M "-" DD "-" y

"May-09-78", "Apr-17-1790"

Год, аббревиатура месяца и день

y "-" M "-" DD

"78-Dec-22"

Год (4 цифры)

YY

"1978", "2008"

Название месяца

m

"March", "jun", "DEC"

Стандарт ISO8601

Год (4 цифры), месяц и день

YY MM DD

"15810726", "19780417"

Год (4 цифры), месяц и день, разделённые слешем

YY "/" MM "/" DD

"2008/06/30", "1978/12/22"

Год (2 цифры), месяц и день, указанные через тире

yy "-" MM "-" DD

"08-06-30", "78-12-22"

Год (4 цифры) с опциональным префиксом, месяц и день, указанные через тире

[+-]? YY "-" MM "-" DD

"-0002-07-26", "+1978-04- 17", "1814-05-17"

Если в описанных ниже функциях не указано значение даты/времени, то считается, что оно равно значению «2016.04.29. 15:08:03»

date

Сигнатура

{date(формат; отметка времени)}

Параметры

формат: символ форматирования

отметка времени: значение даты/времени

Описание

Создание даты/времени в указанном формате

Возвращаемое значение

Дата/время в указанном формате

Пример

{date(ymd; 2016-02-11)} Возвращаемое значение: 160211

now

Сигнатура

{now(формат)}

Параметры

формат: символ форматирования

Описание

Создание текущей даты/времени в указанном формате

Возвращаемое значение

Текущая дата/время в указанном формате

Пример

{now(Y-m-d H:i:s)} Возвращаемое значение: 2016-04-29 15:08:03

yesterday

Сигнатура

{yesterday(формат)}

Параметры

формат: символ форматирования

Описание

Создание вчерашней даты/времени в указанном формате

Возвращаемое значение

Дата/время в указанном формате

Пример

{yesterday(Y-m-d H:i:s)} Возвращаемое значение: 2016-04-28 15:08:03

tomorrow

Сигнатура

{tomorrow(формат)}

Параметры

формат: символ форматирования

Описание

Создание завтрашней даты/времени в указанном формате

Возвращаемое значение

Дата/время в указанном формате

Пример

{tomorrow(Y-m-d H:i:s)} Возвращаемое значение: 2016-04-30 15:08:03

datediff

Сигнатура

{datediff(отметка времени1; отметка времени2; элемент)}

Параметры

отметка времени1: значение даты/времени

отметка времени2: значение даты/времени

элемент: years/months/days/hours/minutes/seconds; по умолчанию: days

Описание

Вычитание отметки времени2 из отметки времени1

Возвращаемое значение

Разница между двумя элементами

Пример

{datediff(2016-02-01; 2016-04-22; days)} Возвращаемое значение: 81

addYears

Сигнатура

{addYears(формат; отметка времени; количество)}

Параметры

формат: символ форматирования

отметка времени: значение даты/времени

количество: цифровое значение

Описание

Добавление определённого количества лет к указанной дате

Возвращаемое значение

Дата/время в указанном формате

Пример

{addYears(Ymd; 2016-04-22; 1)} Возвращаемое значение: 20170422

addMonths

Сигнатура

{addMonths(формат; отметка времени; количество)}

Параметры

формат: символ форматирования

отметка времени: значение даты/времени

количество: цифровое значение

Описание

Добавление определённого количества месяцев к указанной дате

Возвращаемое значение

Дата/время в указанном формате

Пример

{addMonths(Y-m-d; 2016-04-22; 1)} Возвращаемое значение: 2016-05-22

addDays

Сигнатура

{addDays(формат; отметка времени; количество)}

Параметры

формат: символ форматирования

отметка времени: значение даты/времени

количество: цифровое значение

Описание

Добавление определённого количества дней к указанной дате

Возвращаемое значение

Дата/время в указанном формате

Пример

{addDays(d-m-Y; 2016-04-22; 1)} Возвращаемое значение: 23-04-2016

addHours

Сигнатура

{addHours(формат; отметка времени; количество)}

Параметры

формат: символ форматирования

отметка времени: значение даты/времени

количество: цифровое значение

Описание

Добавление определённого количества часов к указанной дате

Возвращаемое значение

Дата/время в указанном формате

Пример

{addHours(Ymd H:i:s; 2016-04-22 23:30; 5)} Возвращаемое значение: 20160423 04:30:00

addMinutes

Сигнатура

{addMinutes(формат; отметка времени; количество)}

Параметры

формат: символ форматирования

отметка времени: значение даты/времени

количество: цифровое значение

Описание

Добавление определённого количества минут к указанной дате

Возвращаемое значение

Дата/время в указанном формате

Пример

{addMinutes(Ymd H:i:s; 2016-04-22 22:58; 5)} Возвращаемое значение: 20160422 23:03:00

addSeconds

Сигнатура

{addSeconds(формат; отметка времени; количество)}

Параметры

формат: символ форматирования

отметка времени: значение даты/времени

количество: цифровое значение

Описание

Добавление определённого количества секунд к указанной дате

Возвращаемое значение

Дата/время в указанном формате

Пример

{addSeconds(Ymd H:i:s; 2016-04-22 22:58; 5)} Возвращаемое значение: 20160422 22:58:05

subtractYears

Сигнатура

{subtractYears(формат; отметка времени; количество)}

Параметры

формат: символ форматирования

отметка времени: значение даты/времени

количество: цифровое значение

Описание

Вычитание определённого количества лет из указанной даты

Возвращаемое значение

Дата/время в указанном формате

Пример

{subtractYears(Ymd; 2016-04-22; 5)} Возвращаемое значение: 20110422

subtractMonths

Сигнатура

{subtractMonths(формат; отметка времени; количество)}

Параметры

формат: символ форматирования

отметка времени: значение даты/времени

количество: цифровое значение

Описание

Вычитание определённого количества месяцев из указанной даты

Возвращаемое значение

Дата/время в указанном формате

Пример

{subtractMonths(Ymd; 2016-04-22; 5)} Возвращаемое значение: 20151122

subtractDays

Сигнатура

{subtractDays(формат; отметка времени; количество)}

Параметры

формат: символ форматирования

отметка времени: значение даты/времени

количество: цифровое значение

Описание

Вычитание определённого количества дней из указанной даты

Возвращаемое значение

Дата/время в указанном формате

Пример

{subtractDays(Ymd; 2016-04-22; 5)} Возвращаемое значение: 20160417

subtractHours

Сигнатура

{subtractHours(формат; отметка времени; количество)}

Параметры

формат: символ форматирования

отметка времени: значение даты/времени

количество: цифровое значение

Описание

Вычитание определённого количества часов из указанной даты

Возвращаемое значение

Дата/время в указанном формате

Пример

{subtractHours(Ymd H:i:s; 2016-04-22 12:37; 5)} Возвращаемое значение: 20160422 07:37:00

subtractMinutes

Сигнатура

{subtractMinutes(формат; отметка времени; количество)}

Параметры

формат: символ форматирования

отметка времени: значение даты/времени

количество: цифровое значение

Описание

Вычитание определённого количества минут из указанной даты

Возвращаемое значение

Дата/время в указанном формате

Пример

{subtractMinutes(Ymd H:i:s; 2016-04-22 12:37; 5)} Возвращаемое значение: 20160422 12:32:00

subtractSeconds

Сигнатура

{subtractSeconds(формат; отметка времени; количество)}

Параметры

формат: символ форматирования

отметка времени: значение даты/времени

количество: цифровое значение

Описание

Вычитание определённого количества секунд из указанной даты

Возвращаемое значение

Дата/время в указанном формате

Пример

{subtractSeconds(Ymd H:i:s; 2016-04-22 12:37; 5)} Возвращаемое значение: 20160422 12:36:55

Ветвление

Поскольку функции могут быть встроены друг в друга, можно описывать достаточно сложные алгоритмы со множеством ветвлений.

ifThenElse

Сигнатура

{ifThenElse(условие; еслиУсловиеИстинно; еслиУсловиеЛожно)}

Параметры

условие: логическое значение

еслиУсловиеИстинно: любое условие

еслиУсловиеЛожно: любое условие

Описание

Выполнение первой или второй ветви алгоритма в зависимости от выполнения условия

Возвращаемое значение

Выполнение ветви еслиУсловиеИстинно, если выполняется условие, иначе выполняется ветвь еслиУсловиеЛожно

Пример

{ifThenElse({equal(5; 7)}; 5 равно 7; 5 не равно 7)} Возвращаемое значение: 5 не равно 7

Счётчики

Счётчики можно разделить на две группы:

  1. Глобальные: Значение счётчика постоянно увеличивается при каждом вычислении формулы

  2. Ежедневные: Значение счётчика ежедневно сбрасывается. (Стартует с 1)

Для всех следующих примеров текущее значение счётчика равно 4. Таким образом, после срабатывания счётчика значение будет равно 5, но отображаться значение будет с указанным количеством разрядов.

GlobalCounter

Сигнатура

{GlobalCounter(названиеСчётчика; количествоРазрядовВСчётчике)}

Параметры

название: любой текст

количествоРазрядовВСчётчике: цифровое значение

Описание

Увеличивает на единицу значение счётчика с указанным названием и возвращает значение в указанном формате

Возвращаемое значение

Цифра с указанным количеством разрядов

Пример

{GlobalCounter(myName; 4)} Возвращаемое значение: 0005

GlobalCounterPerUser

Сигнатура

{GlobalCounterPerUser(названиеСчётчика; количествоРазрядовВСчётчике)}

Параметры

название: любой текст

количествоРазрядовВСчётчике: цифровое значение

Описание

Увеличивает на единицу значение счётчика с указанным названием для пользователя, создавшего запись, и возвращает значение в указанном формате

Возвращаемое значение

Цифра с указанным количеством разрядов

Пример

{GlobalCounterPerUser(myName; 3)} Возвращаемое значение: 005

GlobalCounterPerModule

Сигнатура

{GlobalCounterPerModule(названиеСчётчика; количествоРазрядовВСчётчике)}

Параметры

название: любой текст

количествоРазрядовВСчётчике: цифровое значение

Описание

Увеличивает на единицу значение счётчика с указанным названием для модуля, к которому принадлежит запись и возвращает значение в указанном формате

Возвращаемое значение

Цифра с указанным количеством разрядов

Пример

{GlobalCounterPerModule(myName; 2)} Возвращаемое значение: 05

GlobalCounterPerUserPerModule

Сигнатура

{GlobalCounterPerUserPerModule(названиеСчётчика; количествоРазрядовВСчётчике)}

Параметры

название: любой текст

количествоРазрядовВСчётчике: цифровое значение

Описание

Увеличивает на единицу значение счётчика с указанным названием для пользователя, создавшего запись, а также для модуля, к которому принадлежит запись и возвращает значение в указанном формате

Возвращаемое значение

Цифра с указанным количеством разрядов

Пример

{GlobalCounterPerUserPerModule(myName; 1)} Возвращаемое значение: 5

DailyCounter

Сигнатура

{DailyCounter(названиеСчётчика; количествоРазрядовВСчётчике)}

Параметры

название: любой текст

количествоРазрядовВСчётчике: цифровое значение

Описание

Увеличивает на единицу значение счётчика с указанным названием (либо возвращает 1, если счётчик был перед этим сброшен) и возвращает значение в указанном формате

Возвращаемое значение

Цифра с указанным количеством разрядов

Пример

{DailyCounter(myName; 1)} Возвращаемое значение: 5

DailyCounterPerUser

Сигнатура

{DailyCounterPerUser(названиеСчётчика; количествоРазрядовВСчётчике)}

Параметры

название: любой текст

количествоРазрядовВСчётчике: цифровое значение

Описание

Увеличивает на единицу значение счётчика с указанным названием (либо возвращает 1, если счётчик был перед этим сброшен) для пользователя, создавшего запись, и возвращает значение в указанном формате

Возвращаемое значение

Цифра с указанным количеством разрядов

Пример

{DailyCounter(myName; 1)} Возвращаемое значение: 5

DailyCounterPerModule

Сигнатура

{DailyCounterPerModule(названиеСчётчика; количествоРазрядовВСчётчике)}

Параметры

название: любой текст

количествоРазрядовВСчётчике: цифровое значение

Описание

Увеличивает на единицу значение счётчика с указанным названием (либо возвращает 1, если счётчик был перед этим сброшен) для модуля, к которому принадлежит запись и возвращает значение в указанном формате

Возвращаемое значение

Цифра с указанным количеством разрядов

Пример

{DailyCounterPerModule(myName; 1)} Возвращаемое значение: 5

DailyCounterPerUserPerModule

Сигнатура

{DailyCounterPerUserPerModule(названиеСчётчика; количествоРазрядовВСчётчике)}

Параметры

название: любой текст

количествоРазрядовВСчётчике: цифровое значение

Описание

Увеличивает на единицу значение счётчика с указанным названием (либо возвращает 1, если счётчик был перед этим сброшен) для пользователя, создавшего запись, а также для модуля, к которому принадлежит запись и возвращает значение в указанном формате

Возвращаемое значение

Цифра с указанным количеством разрядов

Пример

{DailyCounterPerUserPerModule(myName; 1)} Возвращаемое значение: 5

Решение возможных проблем

  1. Вместо желаемого результата отображается часть формулы или вся формула:

Возможно, часть формулы прописана неверно, проверьте синтаксис как это указано в разделе Встроенные функции.

  1. На месте желаемого результата ничего не отображается:

    • Возможно, попытка вычисления привела к исключению в PHP. В Форме просмотра процесса (Контроль процессов) обратите внимание на статус процесса, в этом случае он закончится неудачей. За детальной информацией обратитесь к файлу suitecrm.log.

    • Неверный формат вызова функций даты/времени. Убедитесь, что формат вызова соответствует тому, что указан в разделе Функции даты и времени.

  1. Формула вычисляется, но результат неверен:

    • В формуле указан неверный тип данных. Например, результат будет нулевым, если в числовом поле прописан текст, поскольку движок базы данных не может вставить текст в нетекстовое поле

    • Ошибка в формуле не синтаксическая, а семантическая. Например, формула извлечения подстроки (substring) считает символы, начиная с нуля (что может быть необычно для пользователей, не знакомых с программированием), и если вы укажете единицу в качестве стартового индекса, то извлечение начнётся со ВТОРОГО символа. Убедитесь, что формат вызова функции соответствует тому, что указан в разделе Встроенные функции.

Проверка синтаксиса формул

При написании формул соблюдайте следующие правила:

  • Все функции должны быть заключены в фигурные скобки: {функция}

  • Перечень параметров функции заключён в круглые скобки: (параметр1; параметр2…)

  • Параметры функции должны быть отделены друг от друга точкой с запятой

  • Проверяйте количество и порядок следования параметров в функциях, синтаксис функций можно проверить в разделе Встроенные функции.

  • Основные параметры в формуле должны выглядеть как {P0}, {P1} и т.д.; связанные параметры - как {R0}, {R1} и т.д., БЕЗ пробелов между символами.

Включение режима отладчика

Для включения режима отладчика в файл config_override.php необходимо добавить следующие строки:

$sugar_config['SweeterCalc']['DebugEnabled'] = 1;
$sugar_config['SweeterCalc']['DebugFileName'] = 'SweeterSyncDebug.log';

В качестве DebugFileName вы можете указать любое желаемое значение.

Все процессы вычислений будут записываться в указанный файл. Поскольку объем файла может быстро увеличиваться (особенно актуально для больших формул), рекомендуется использовать режим отладчика только в случае необходимости.

Примеры вычислений

Расчёт ежемесячных выплат

Сценарий

Допустим, необходимо рассчитать стоимость ежемесячных выплат по сделке. Для этого необходимо общую сумму сделки разделить на срок выплат. Сроки выплат представлены тремя вариантами: 6 месяцев, 1 год и 2 года.

Предварительная подготовка

Поскольку в стандартном модуле Сделки поле Сроки выплат отсутствует, необходимо предварительно создать и настроить необходимый функционал в редакторе комбобоксов. Создадим комбобокс с тремя элементами, в качестве ключа указывая необходимое количество месяцев:

Ключ Отображаемое значение

6

6 месяцев

12

1 год

24

2 года

В Студии настроим Форму просмотра модуля Сделки, добавив в неё поля Ежемесячный платёж типа «Currency» и Сроки выплат типа «Dropdown», созданное на основе ранее добавленного комбобокса.

В Форму редактирования добавим только комбобокс Сроки выплат (поле Ежемесячный платёж добавлять не будем, поскольку оно будет отображаться только при ПРОСМОТРЕ записи и его значение будет рассчитываться автоматически).

Детально работа с полями в Студии описана в разделе Создание и редактирование полей.

Настройка процесса

Настроим основные параметры процесса согласно таблице:

Процесс: Любое название

Контролируемый модуль: Сделки

Статус: Активен

Запускать: Только при сохранении записи

Запускать для: Всех записей

Многократный запуск: Да

Не будем добавлять в Процесс какие-либо условия, поскольку предполагается, что Процесс будет выполняться при любых условиях.

Нажмём на кнопку Добавить действия и из списка выберем пункт Выполнить вычисления в полях.

В основные параметры добавим два поля: Сумма сделки (отобразится с идентификатором {P0}) и Сроки выплат (отобразится с идентификатором {P1}), указав элемент Ключ при добавлении второго поля.

Связанные параметры не трогаем, они в данном примере не используются (пример использования связанных параметров рассматривается в следующем примере).

Для формулы выберем поле Ежемесячный платёж и в качестве самой формулы укажем следующее выражение:

{divide({P0}; {P1})}

В конечном итоге выполняемые действия будут выглядеть следующим образом:

Расчёт ежемесячных выплат-Добавление действий

Сохраните Процесс и создайте тестовую сделку для проверки созданного примера:

Форма редактирования тестовой сделки при расчёте ежемесячных выплат

При сохранении Сделки будет автоматически вычислена сумма ежемесячного платежа:

Форма просмотра тестовой сделки при расчёте ежемесячных выплат

Расчёт скидки по Договору в зависимости от типа Контакта

Сценарий

Допустим ваша компания предоставляет скидки определённым льготным категориям клиентов (студенты, пенсионеры и т.д.). Если в сохраняемом договоре указан Контакт, то необходимо автоматически рассчитывать скидку в зависимости от типа указанного Контакта.

Предварительная подготовка

Поскольку в стандартном модуле Контакты поле Льготная категория отсутствует, необходимо предварительно создать и настроить необходимый функционал в редакторе комбобоксов. Создадим комбобокс с тремя элементами, в качестве ключа указывая номер категории:

Ключ Отображаемое значение

1

Не льготник

2

Студент

3

Пенсионер

В Форму просмотра и Форму редактирования модуля Контакты добавим поле Льготная категория типа «DropDown», созданное на основе ранее добавленного комбобокса.

Также в Студии настроим Форму просмотра модуля Договоры, добавив в неё поле Предоставляемая скидка (%) типа «Integer».

Детально работа с полями в Студии описана в разделе Создание и редактирование полей.

Настройка процесса

Настроим основные параметры процесса согласно таблице:

Процесс: Любое название

Контролируемый модуль: Договоры

Статус: Активен

Запускать: Только при сохранении записи

Запускать для: Всех записей

Многократный запуск: Да

Не будем добавлять в Процесс какие-либо условия, поскольку предполагается, что Процесс будет выполняться для всех Договоров.

Нажмём на кнопку Добавить действия и из списка выберем пункт Выполнить вычисления в полях.

В связанных параметрах:

  • В левом комбобоксе выберем значение Контакты : Контакт

  • В среднем комбобоксе выберем добавленное поле Льготная категория

  • В правом комбобоксе выберем значение Ключ и нажмём на кнопку Добавить связанный параметр - параметр отобразится с идентификатором {R0}.

  • Для формулы выберем поле Предоставляемая скидка (%) и в качестве самой формулы укажем следующее выражение:

{ifThenElse({equal({R0}; 3)}; 50; {ifThenElse({equal({R0}; 2)}; 25; 0)})}

В конечном итоге выполняемые действия будут выглядеть следующим образом:

Расчёт скидки по Договору-Добавление действий

Сохраните Процесс и создайте тестовый Контакт:

Форма редактирования тестового контакта  при расчёте скидки по договору

При сохранении Договора будет автоматически указана предоставляемая скидка:

Форма просмотра тестового контакта  при расчёте скидки по договору

Добавление сообщения о преобразованном Предварительном контакте в список уведомлений

Сценарий

Допустим, после преобразования Предварительного контакта в Контрагента необходимо автоматически уведомлять об этом определённого пользователя SuiteCRM, но не по электронной почте, а через список пропущенных уведомлений.

Предварительная подготовка

В Студии для модуля Контрагенты добавляем новое текстовое поле, например - internal_link, в котором будет храниться ссылка на автоматически создаваемого Контрагента. Эта ссылка будет отображаться в окне уведомлений.

Добавление текстового поля в модуль Контрагенты

Настройка процесса

Настроим основные параметры процесса согласно таблице:

Процесс: Любое название

Контролируемый модуль: Предварит. контакты

Статус: Активен

Запускать: Всегда

Запускать для: Изменяемых записей

Многократный запуск: Нет

Процесс будет запускаться при изменении статуса Предварительного контакта на Преобразован.

Добавление условий

  1. В разделе условий выполнения процесса нажимаем кнопку Добавить условие.

  2. Выбираем модуль Предварит. контакты, в списке полей выбираем значение Преобразован.

  3. В качестве оператора сравнения оставляем значение Равно, в поле Тип выбираем Значение и отмечаем чекбокс.

Созданное условие должно выглядеть следующим образом:

Примеры процессов4-Добавление условий

Добавление действий

Добавим два действия: первое - создаёт ссылку на созданного Контрагента, второе - создаёт уведомление, добавляет в него созданную ссылку и дополнительные данные.

Нажмём на кнопку Добавить действия и из списка выберем пункт Выполнить вычисления в полях.

В поле Краткое описание действия вводим соответствующее название, например: «Создание ссылки на Контрагента».

В основных параметрах:

  • В разделе Основные параметры выбираем поле ID контрагента и нажимаем кнопку Добавить основной параметр.

  • В разделе Формулы выбираем созданное ранее поле internal_link и нажимаем кнопку Добавить формулу

В качестве текста формулы вводим: index.php?module=Accounts&action=DetailView&record={P0}.

В конечном итоге первое действие будет выглядеть следующим образом:

Расчёт скидки по Договору-Добавление действий

Ещё раз нажмём на кнопку Добавить действия и из списка выберем пункт Создать запись.

В поле Краткое описание действия вводим соответствующее название, например: «Добавление сообщения в Уведомления».

В списке Тип записи выбираем модуль Уведомления.

Добавим следующие поля согласно таблице:

Поле Тип Содержание

Ответственный(ая)

Значение

Выбор пользователя, у которого будет отображаться уведомление.

Описание

Значение

Текст описания.

Название

Поле

Контрагент

Прочитано

Значение

Нет

Тип (выбираем ПЕРВОЕ поле)

Значение

Текст заголовка уведомления.

Тип (выбираем ВТОРОЕ поле)

Значение

info или warn (один из двух типов уведомления)

Тип (выбираем ТРЕТЬЕ поле)

Поле

internal_link

В конечном итоге второе действие будет выглядеть следующим образом:

Примеры процессов4-Добавление действий

После преобразования Предварительного контакта в Контрагента у указанного в настройка Процесса ответственного появится новое уведомление, например:

Добавление нового уведомления со ссылкой на Контрагента

Нажав на заголовок сообщения, пользователь перейдёт к созданной записи.

При необходимости подобное уведомление можно создать программно, используя logic hooks.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.