Сигнатура
Раздел актуален для версий системы 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(параметр1; параметр2)} |
Параметры |
параметр1: любое значение |
параметр2: любое значение |
|
Описание |
Определяет равенство параметра1 параметру2 |
Возвращаемое значение |
1 (если параметры равны) или 0 (если параметры не равны) |
Пример |
{equal(1; 2)} Возвращаемое значение: 0 |
Сигнатура |
{notEqual(параметр1; параметр2)} |
Параметры |
параметр1: любое значение |
параметр2: любое значение |
|
Описание |
Определяет неравенство параметра1 параметру2 |
Возвращаемое значение |
0 (если параметры равны) или 1 (если параметры не равны) |
Пример |
{notEqual (1; 2)} Возвращаемое значение: 1 |
Сигнатура |
{greaterThan(параметр1; параметр2)} |
Параметры |
параметр1: любое значение |
параметр2: любое значение |
|
Описание |
Определяет, что параметр1 больше параметра2 |
Возвращаемое значение |
1, если параметр1 больше параметра2, в противном случае - 0 |
Пример |
{greaterThan(3; 3)} Возвращаемое значение: 0 |
Сигнатура |
{greaterThanOrEqual(параметр1; параметр2)} |
Параметры |
параметр1: любое значение |
параметр2: любое значение |
|
Описание |
Определяет, что параметр1 больше или равен параметру2 |
Возвращаемое значение |
1, если параметр1 больше или равен параметру2, в противном случае - 0 |
Пример |
{greaterThanOrEqual(3; 3)} Возвращаемое значение: 1 |
Сигнатура |
{lessThan(параметр1; параметр2)} |
Параметры |
параметр1: любое значение |
параметр2: любое значение |
|
Описание |
Определяет, что параметр1 меньше параметра2 |
Возвращаемое значение |
1, если параметр1 меньше параметра2, в противном случае - 0 |
Пример |
{lessThan(3; 3)} Возвращаемое значение: 0 |
Сигнатура |
{lessThanOrEqual(параметр1; параметр2)} |
Параметры |
параметр1: любое значение |
параметр2: любое значение |
|
Описание |
Определяет, что параметр1 меньше или равен параметру2 |
Возвращаемое значение |
1, если параметр1 меньше или равен параметру2, в противном случае - 0 |
Пример |
{lessThanOrEqual(3; 3)} Возвращаемое значение: 1 |
Сигнатура |
{empty(параметр)} |
Параметры |
параметр: текстовое значение |
Описание |
Определяет, что параметр пуст |
Возвращаемое значение |
1, если параметр пуст, в противном случае - 0 |
Пример |
{empty(Любой-ТеКсТ)} Возвращаемое значение: 0 |
Сигнатура |
{notEmpty(параметр)} |
Параметры |
параметр: текстовое значение |
Описание |
Определяет, что параметр пуст |
Возвращаемое значение |
1, если параметр не пуст, в противном случае - 0 |
Пример |
{notEmpty(Любой-ТеКсТ)} Возвращаемое значение: 1 |
Сигнатура |
{not(параметр)} |
Параметры |
параметр: логическое значение |
Описание |
Логическое отрицание параметра |
Возвращаемое значение |
1, если параметр равен 0, 0 если параметр равен 1 |
Пример |
{not(0)} Возвращаемое значение: 1 |
Сигнатура |
{and(параметр1; параметр2)} |
Параметры |
параметр1: логическое значение |
параметр2: логическое значение |
|
Описание |
Применяет логический оператор И к двум логическим значениям |
Возвращаемое значение |
1, если параметр1 И параметр2 равен 1 и 0, если любой из параметров равен нулю |
Пример |
{and(1; 0)} Возвращаемое значение: 0 |
Сигнатура |
{or(параметр1; параметр2)} |
Параметры |
параметр1: логическое значение |
параметр2: логическое значение |
|
Описание |
Применяет логический оператор ИЛИ к двум логическим значениям |
Возвращаемое значение |
1, если параметр1 ИЛИ параметр2 равен 1 и 0, если оба параметра равны нулю |
Пример |
{or(1; 0)} Возвращаемое значение: 1 |
Функции используются для обработки текста. Все перечисленные функции полностью поддерживают кодировку UTF-8.
Сигнатура |
{substring(text; start; length)} |
Параметры |
text: текстовое значение |
start: целочисленное значение |
|
length [необязательный параметр]: целочисленное значение |
|
Описание |
Возвращает подстроку указанной строки, начиная с символа start. Если параметр length опущен, то возвращаются все символы от позиции start до конца строки, в противном случае возвращается подстрока длинной length символов. Обратите внимание: индексация символов указанной строки начинается с 0. |
Возвращаемое значение |
Подстрока указанной строки |
Пример |
{substring(Ойра-Ойра; 4)} Возвращаемое значение: -Ойра |
Сигнатура |
{length(параметр)} |
Параметры |
параметр: текстовое значение |
Описание |
Возвращает количество символов в указанной строке. |
Возвращаемое значение |
Количество символов в указанной строке. |
Пример |
{length(зав. магистр-академик Морис-Иоганн-Лаврентий Пупков-Задний)} Возвращаемое значение: 58 |
Сигнатура |
{replace(search; replace; text)} |
Параметры |
search: текстовое значение |
replace: текстовое значение |
|
subject: текстовое значение |
|
Описание |
Производит замену всех вхождений подстроки search на подстроку replace в строке text. |
Возвращаемое значение |
Текст с заменёнными значениями подстрок. |
Пример |
{replace(кадров; вечной молодости; Отдел кадров)} Возвращаемое значение: Отдел вечной молодости |
Сигнатура |
{position(subject; search)} |
Параметры |
subject: текстовое значение |
search: текстовое значение |
|
Описание |
Возвращает позицию первого вхождения подстроки search строки subject. |
Возвращаемое значение |
Целочисленное значение первого вхождения подстроки, либо -1, если подстрока не обнаружена. |
Пример |
{position(Познание бесконечности требует бесконечного времени; времени)} Возвращаемое значение: 45 |
Сигнатура |
{lowercase(параметр)} |
Параметры |
параметр: текстовое значение |
Описание |
Перевод текста в нижний регистр |
Возвращаемое значение |
Текст в нижнем регистре |
Пример |
{lowercase(ДиваН-ТраНсляТоР)} Возвращаемое значение: диван-транслятор |
Сигнатура |
{uppercase(параметр)} |
Параметры |
параметр: текстовое значение |
Описание |
Перевод текста в верхний регистр |
Возвращаемое значение |
Текст в верхнем регистре |
Пример |
{uppercase(ДиваН-ТраНсляТоР)} Возвращаемое значение: ДИВАН-ТРАНСЛЯТОР |
Сигнатура |
{add(параметр1; параметр2)} |
Параметры |
параметр1: цифровое значение |
параметр2: цифровое значение |
|
Описание |
Сложение параметров параметр1 и параметр2 |
Возвращаемое значение |
Сумма параметров параметр1 и параметр2 |
Пример |
{add(3.12; 4.83)} Возвращаемое значение: 7.95 |
Сигнатура |
{subtract(параметр1; параметр2)} |
Параметры |
параметр1: цифровое значение |
параметр2: цифровое значение |
|
Описание |
Вычитание параметра2 из параметра1 |
Возвращаемое значение |
Разница между параметром2 и параметром1 |
Пример |
{subtract(8; 3)} Возвращаемое значение: 5 |
Сигнатура |
{multiply(параметр1; параметр2)} |
Параметры |
параметр1: цифровое значение |
параметр2: цифровое значение |
|
Описание |
Умножение параметра1 на параметр2 |
Возвращаемое значение |
Результат умножения параметра1 на параметр2 |
Пример |
{multiply(2; 4)} Возвращаемое значение: 8 |
Сигнатура |
{divide(параметр1; параметр2)} |
Параметры |
параметр1: цифровое значение |
параметр2: цифровое значение |
|
Описание |
Деление параметра1 на параметр2 |
Возвращаемое значение |
Результат деления параметра1 на параметр2 |
Пример |
{divide(8; 2)} Возвращаемое значение: 4 |
Сигнатура |
{power(параметр1; параметр2)} |
Параметры |
параметр1: цифровое значение |
параметр2: цифровое значение |
|
Описание |
Возведение параметра1 в степень параметр2 |
Возвращаемое значение |
Результат возведения параметра1 в степень параметр2 |
Пример |
{power(2; 7)} Возвращаемое значение: 128 |
Сигнатура |
{squareRoot(параметр)} |
Параметры |
параметр: цифровое значение |
Описание |
Вычисление квадратного корня из параметра |
Возвращаемое значение |
Квадратный корень параметра |
Пример |
{squareRoot(9)} Возвращаемое значение: 3 |
Сигнатура |
{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(ymd; 2016-02-11)} Возвращаемое значение: 160211 |
Сигнатура |
{now(формат)} |
Параметры |
формат: символ форматирования |
Описание |
Создание текущей даты/времени в указанном формате |
Возвращаемое значение |
Текущая дата/время в указанном формате |
Пример |
{now(Y-m-d H:i:s)} Возвращаемое значение: 2016-04-29 15:08:03 |
Сигнатура |
{yesterday(формат)} |
Параметры |
формат: символ форматирования |
Описание |
Создание вчерашней даты/времени в указанном формате |
Возвращаемое значение |
Дата/время в указанном формате |
Пример |
{yesterday(Y-m-d H:i:s)} Возвращаемое значение: 2016-04-28 15:08:03 |
Сигнатура |
{tomorrow(формат)} |
Параметры |
формат: символ форматирования |
Описание |
Создание завтрашней даты/времени в указанном формате |
Возвращаемое значение |
Дата/время в указанном формате |
Пример |
{tomorrow(Y-m-d H:i:s)} Возвращаемое значение: 2016-04-30 15:08:03 |
Сигнатура |
{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(Ymd; 2016-04-22; 1)} Возвращаемое значение: 20170422 |
Сигнатура |
{addMonths(формат; отметка времени; количество)} |
Параметры |
формат: символ форматирования |
отметка времени: значение даты/времени |
|
количество: цифровое значение |
|
Описание |
Добавление определённого количества месяцев к указанной дате |
Возвращаемое значение |
Дата/время в указанном формате |
Пример |
{addMonths(Y-m-d; 2016-04-22; 1)} Возвращаемое значение: 2016-05-22 |
Сигнатура |
{addDays(формат; отметка времени; количество)} |
Параметры |
формат: символ форматирования |
отметка времени: значение даты/времени |
|
количество: цифровое значение |
|
Описание |
Добавление определённого количества дней к указанной дате |
Возвращаемое значение |
Дата/время в указанном формате |
Пример |
{addDays(d-m-Y; 2016-04-22; 1)} Возвращаемое значение: 23-04-2016 |
Сигнатура |
{addHours(формат; отметка времени; количество)} |
Параметры |
формат: символ форматирования |
отметка времени: значение даты/времени |
|
количество: цифровое значение |
|
Описание |
Добавление определённого количества часов к указанной дате |
Возвращаемое значение |
Дата/время в указанном формате |
Пример |
{addHours(Ymd H:i:s; 2016-04-22 23:30; 5)} Возвращаемое значение: 20160423 04:30:00 |
Сигнатура |
{addMinutes(формат; отметка времени; количество)} |
Параметры |
формат: символ форматирования |
отметка времени: значение даты/времени |
|
количество: цифровое значение |
|
Описание |
Добавление определённого количества минут к указанной дате |
Возвращаемое значение |
Дата/время в указанном формате |
Пример |
{addMinutes(Ymd H:i:s; 2016-04-22 22:58; 5)} Возвращаемое значение: 20160422 23:03:00 |
Сигнатура |
{addSeconds(формат; отметка времени; количество)} |
Параметры |
формат: символ форматирования |
отметка времени: значение даты/времени |
|
количество: цифровое значение |
|
Описание |
Добавление определённого количества секунд к указанной дате |
Возвращаемое значение |
Дата/время в указанном формате |
Пример |
{addSeconds(Ymd H:i:s; 2016-04-22 22:58; 5)} Возвращаемое значение: 20160422 22:58:05 |
Сигнатура |
{subtractYears(формат; отметка времени; количество)} |
Параметры |
формат: символ форматирования |
отметка времени: значение даты/времени |
|
количество: цифровое значение |
|
Описание |
Вычитание определённого количества лет из указанной даты |
Возвращаемое значение |
Дата/время в указанном формате |
Пример |
{subtractYears(Ymd; 2016-04-22; 5)} Возвращаемое значение: 20110422 |
Сигнатура |
{subtractMonths(формат; отметка времени; количество)} |
Параметры |
формат: символ форматирования |
отметка времени: значение даты/времени |
|
количество: цифровое значение |
|
Описание |
Вычитание определённого количества месяцев из указанной даты |
Возвращаемое значение |
Дата/время в указанном формате |
Пример |
{subtractMonths(Ymd; 2016-04-22; 5)} Возвращаемое значение: 20151122 |
Сигнатура |
{subtractDays(формат; отметка времени; количество)} |
Параметры |
формат: символ форматирования |
отметка времени: значение даты/времени |
|
количество: цифровое значение |
|
Описание |
Вычитание определённого количества дней из указанной даты |
Возвращаемое значение |
Дата/время в указанном формате |
Пример |
{subtractDays(Ymd; 2016-04-22; 5)} Возвращаемое значение: 20160417 |
Сигнатура |
{subtractHours(формат; отметка времени; количество)} |
Параметры |
формат: символ форматирования |
отметка времени: значение даты/времени |
|
количество: цифровое значение |
|
Описание |
Вычитание определённого количества часов из указанной даты |
Возвращаемое значение |
Дата/время в указанном формате |
Пример |
{subtractHours(Ymd H:i:s; 2016-04-22 12:37; 5)} Возвращаемое значение: 20160422 07:37:00 |
Сигнатура |
{subtractMinutes(формат; отметка времени; количество)} |
Параметры |
формат: символ форматирования |
отметка времени: значение даты/времени |
|
количество: цифровое значение |
|
Описание |
Вычитание определённого количества минут из указанной даты |
Возвращаемое значение |
Дата/время в указанном формате |
Пример |
{subtractMinutes(Ymd H:i:s; 2016-04-22 12:37; 5)} Возвращаемое значение: 20160422 12:32:00 |
Сигнатура |
{subtractSeconds(формат; отметка времени; количество)} |
Параметры |
формат: символ форматирования |
отметка времени: значение даты/времени |
|
количество: цифровое значение |
|
Описание |
Вычитание определённого количества секунд из указанной даты |
Возвращаемое значение |
Дата/время в указанном формате |
Пример |
{subtractSeconds(Ymd H:i:s; 2016-04-22 12:37; 5)} Возвращаемое значение: 20160422 12:36:55 |
Поскольку функции могут быть встроены друг в друга, можно описывать достаточно сложные алгоритмы со множеством ветвлений.
Сигнатура |
{ifThenElse(условие; еслиУсловиеИстинно; еслиУсловиеЛожно)} |
Параметры |
условие: логическое значение |
еслиУсловиеИстинно: любое условие |
|
еслиУсловиеЛожно: любое условие |
|
Описание |
Выполнение первой или второй ветви алгоритма в зависимости от выполнения условия |
Возвращаемое значение |
Выполнение ветви еслиУсловиеИстинно, если выполняется условие, иначе выполняется ветвь еслиУсловиеЛожно |
Пример |
{ifThenElse({equal(5; 7)}; 5 равно 7; 5 не равно 7)} Возвращаемое значение: 5 не равно 7 |
Счётчики можно разделить на две группы:
Глобальные: Значение счётчика постоянно увеличивается при каждом вычислении формулы
Ежедневные: Значение счётчика ежедневно сбрасывается. (Стартует с 1)
Для всех следующих примеров текущее значение счётчика равно 4. Таким образом, после срабатывания счётчика значение будет равно 5, но отображаться значение будет с указанным количеством разрядов.
Сигнатура |
{GlobalCounter(названиеСчётчика; количествоРазрядовВСчётчике)} |
Параметры |
название: любой текст |
количествоРазрядовВСчётчике: цифровое значение |
|
Описание |
Увеличивает на единицу значение счётчика с указанным названием и возвращает значение в указанном формате |
Возвращаемое значение |
Цифра с указанным количеством разрядов |
Пример |
{GlobalCounter(myName; 4)} Возвращаемое значение: 0005 |
Сигнатура |
{GlobalCounterPerUser(названиеСчётчика; количествоРазрядовВСчётчике)} |
Параметры |
название: любой текст |
количествоРазрядовВСчётчике: цифровое значение |
|
Описание |
Увеличивает на единицу значение счётчика с указанным названием для пользователя, создавшего запись, и возвращает значение в указанном формате |
Возвращаемое значение |
Цифра с указанным количеством разрядов |
Пример |
{GlobalCounterPerUser(myName; 3)} Возвращаемое значение: 005 |
Сигнатура |
{GlobalCounterPerModule(названиеСчётчика; количествоРазрядовВСчётчике)} |
Параметры |
название: любой текст |
количествоРазрядовВСчётчике: цифровое значение |
|
Описание |
Увеличивает на единицу значение счётчика с указанным названием для модуля, к которому принадлежит запись и возвращает значение в указанном формате |
Возвращаемое значение |
Цифра с указанным количеством разрядов |
Пример |
{GlobalCounterPerModule(myName; 2)} Возвращаемое значение: 05 |
Сигнатура |
{GlobalCounterPerUserPerModule(названиеСчётчика; количествоРазрядовВСчётчике)} |
Параметры |
название: любой текст |
количествоРазрядовВСчётчике: цифровое значение |
|
Описание |
Увеличивает на единицу значение счётчика с указанным названием для пользователя, создавшего запись, а также для модуля, к которому принадлежит запись и возвращает значение в указанном формате |
Возвращаемое значение |
Цифра с указанным количеством разрядов |
Пример |
{GlobalCounterPerUserPerModule(myName; 1)} Возвращаемое значение: 5 |
Сигнатура |
{DailyCounter(названиеСчётчика; количествоРазрядовВСчётчике)} |
Параметры |
название: любой текст |
количествоРазрядовВСчётчике: цифровое значение |
|
Описание |
Увеличивает на единицу значение счётчика с указанным названием (либо возвращает 1, если счётчик был перед этим сброшен) и возвращает значение в указанном формате |
Возвращаемое значение |
Цифра с указанным количеством разрядов |
Пример |
{DailyCounter(myName; 1)} Возвращаемое значение: 5 |
Сигнатура |
{DailyCounterPerUser(названиеСчётчика; количествоРазрядовВСчётчике)} |
Параметры |
название: любой текст |
количествоРазрядовВСчётчике: цифровое значение |
|
Описание |
Увеличивает на единицу значение счётчика с указанным названием (либо возвращает 1, если счётчик был перед этим сброшен) для пользователя, создавшего запись, и возвращает значение в указанном формате |
Возвращаемое значение |
Цифра с указанным количеством разрядов |
Пример |
{DailyCounter(myName; 1)} Возвращаемое значение: 5 |
Сигнатура |
{DailyCounterPerModule(названиеСчётчика; количествоРазрядовВСчётчике)} |
Параметры |
название: любой текст |
количествоРазрядовВСчётчике: цифровое значение |
|
Описание |
Увеличивает на единицу значение счётчика с указанным названием (либо возвращает 1, если счётчик был перед этим сброшен) для модуля, к которому принадлежит запись и возвращает значение в указанном формате |
Возвращаемое значение |
Цифра с указанным количеством разрядов |
Пример |
{DailyCounterPerModule(myName; 1)} Возвращаемое значение: 5 |
Сигнатура |
{DailyCounterPerUserPerModule(названиеСчётчика; количествоРазрядовВСчётчике)} |
Параметры |
название: любой текст |
количествоРазрядовВСчётчике: цифровое значение |
|
Описание |
Увеличивает на единицу значение счётчика с указанным названием (либо возвращает 1, если счётчик был перед этим сброшен) для пользователя, создавшего запись, а также для модуля, к которому принадлежит запись и возвращает значение в указанном формате |
Возвращаемое значение |
Цифра с указанным количеством разрядов |
Пример |
{DailyCounterPerUserPerModule(myName; 1)} Возвращаемое значение: 5 |
Вместо желаемого результата отображается часть формулы или вся формула:
Возможно, часть формулы прописана неверно, проверьте синтаксис как это указано в разделе Встроенные функции.
На месте желаемого результата ничего не отображается:
Возможно, попытка вычисления привела к исключению в PHP. В Форме просмотра процесса (Контроль процессов) обратите внимание на статус процесса, в этом случае он закончится неудачей. За детальной информацией обратитесь к файлу suitecrm.log.
Неверный формат вызова функций даты/времени. Убедитесь, что формат вызова соответствует тому, что указан в разделе Функции даты и времени.
Формула вычисляется, но результат неверен:
В формуле указан неверный тип данных. Например, результат будет нулевым, если в числовом поле прописан текст, поскольку движок базы данных не может вставить текст в нетекстовое поле
Ошибка в формуле не синтаксическая, а семантическая. Например, формула извлечения подстроки (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, в котором будет храниться ссылка на автоматически создаваемого Контрагента. Эта ссылка будет отображаться в окне уведомлений.
Настройка процесса
Настроим основные параметры процесса согласно таблице:
Процесс: Любое название |
Контролируемый модуль: Предварит. контакты |
Статус: Активен |
Запускать: Всегда |
Запускать для: Изменяемых записей |
Многократный запуск: Нет |
Процесс будет запускаться при изменении статуса Предварительного контакта на Преобразован.
В разделе условий выполнения процесса нажимаем кнопку Добавить условие.
Выбираем модуль Предварит. контакты, в списке полей выбираем значение Преобразован.
В качестве оператора сравнения оставляем значение Равно, в поле Тип выбираем Значение и отмечаем чекбокс.
Созданное условие должно выглядеть следующим образом:
Добавим два действия: первое - создаёт ссылку на созданного Контрагента, второе - создаёт уведомление, добавляет в него созданную ссылку и дополнительные данные.
Нажмём на кнопку Добавить действия и из списка выберем пункт Выполнить вычисления в полях.
В поле Краткое описание действия вводим соответствующее название, например: «Создание ссылки на Контрагента».
В основных параметрах:
В разделе Основные параметры выбираем поле ID контрагента и нажимаем кнопку Добавить основной параметр.
В разделе Формулы выбираем созданное ранее поле internal_link и нажимаем кнопку Добавить формулу
В качестве текста формулы вводим: index.php?module=Accounts&action=DetailView&record={P0}.
В конечном итоге первое действие будет выглядеть следующим образом:
Ещё раз нажмём на кнопку Добавить действия и из списка выберем пункт Создать запись.
В поле Краткое описание действия вводим соответствующее название, например: «Добавление сообщения в Уведомления».
В списке Тип записи выбираем модуль Уведомления.
Добавим следующие поля согласно таблице:
Поле | Тип | Содержание |
---|---|---|
Ответственный(ая) |
Значение |
Выбор пользователя, у которого будет отображаться уведомление. |
Описание |
Значение |
Текст описания. |
Название |
Поле |
Контрагент |
Прочитано |
Значение |
Нет |
Тип (выбираем ПЕРВОЕ поле) |
Значение |
Текст заголовка уведомления. |
Тип (выбираем ВТОРОЕ поле) |
Значение |
info или warn (один из двух типов уведомления) |
Тип (выбираем ТРЕТЬЕ поле) |
Поле |
internal_link |
В конечном итоге второе действие будет выглядеть следующим образом:
После преобразования Предварительного контакта в Контрагента у указанного в настройка Процесса ответственного появится новое уведомление, например:
Нажав на заголовок сообщения, пользователь перейдёт к созданной записи.
При необходимости подобное уведомление можно создать программно, используя logic hooks.
Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.