Для работы с математическими вычислениями в программе Руководитель предусмотрено два типа полей: “MySql Формула” и “JS Формула”. По аналогии с ячейкой таблицы Excel, в этом поле будет отображаться результат заданных арифметических действий. При создании такого поля, вы указываете поля, значения которых необходимо использовать, и вычисления, которые нужно произвести.

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

Простые вычисления

([36]+[54])/2

где 36 и 54 — идентификаторы числовых полей.

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

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

FLOOR(([36]+[54])/2)

Расчет по формуле с условием

Для добавления условия в формулу нужно использовать оператор IF

if(expr1,expr2,expr3)

Если expr1 равно значению ИСТИНА (expr1 <> 0 и expr1 <> NULL), то функция IF() возвращает expr2, в противном случае — expr3. В зависимости от контекста, функция IF() может возвращать либо числовое, либо строковое значение:

if([36]>0,([36]+[54])/2,0)

В данном примере, если значение поля 36 больше 0, то мы производим расчеты, в противном случае, возвращаем ноль.

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

if([36]>0,([36]+[54])/2,'нет данных')

Проверка списка в операторе IF

Очень часто возникает необходимость производить расчеты только в том случае, если, к примеру, поле «Статус проекта» имеет тип поля «Раскрывающийся список» и значение «Закрыт». В таком случае, условие будет следующее:

if([11]=15,([36]+[54])/2,0)

где 11 — идентификатор поля «Статус», а 15 — это идентификатор значения «Закрыт».

Теперь давайте рассмотрим пример, когда нам нужно проверить несколько значений из списка:

if([11] in (15,16,17),([36]+[54])/2,0)

где 15,16,17 — это идентификаторы значений списка.

Для проверки значения из логического списка используйте ‘true’ или ‘false’, например:

if([20]='true',([36]+[54])/2,0)

где 20 — идентификатор поля «Логическое поле»

Проверка списка в операторе CASE

Оператор CASE — это аналог оператора switch в PHP. Его конструкция выглядит следующим образом:

case  
   when [11] =15 then ([36]+[54])/2) 
   when [11] =16 then ([36]+[54])/3)   
end

Расчет разницы времени

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

([300]-[159])/86400

где 300 — идентификатор поля «Дата завершения», 159 — идентификатор поля «Дата начала», 86400 — количество секунд в сутках.

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

if([300]>0 and [159]>0 and [300]>[159],([300]-[159])/86400,0)

Примечание: вы можете использовать [TODAY] для текущей даты.

Вывести формат даты используя FROM_UNIXTIME

FROM_UNIXTIME([12],'%Y-%m-%d')

где 12 — это идентификатор для поля даты

Работа с функциями даты

В поле с типом MySQL формула можно выполнять расчеты и вывод данных, используя серверные функции для дат. Например, можно получить число дня месяца из указанной даты в поле с типом Дата. Если в поле с типом Дата [10] указано значение «21.12.2018», то выражение в поле с типом MySQL формула

DAYOFMONTH(FROM_UNIXTIME([10],'%Y-%m-%d'))

отразит результат функции в виде числа «21», т.е. укажет число месяца, которое можно использовать в дальнейших вычислениях. Также, используя данный формат, можно выводить любые другие значения функций даты. Более подробно с функциями даты в MySQL можно ознакомиться тут https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

Объединение нескольких полей

С помощью функции CONCAT вы сможете объединить несколько полей в строку.

CONCAT([11],' - ',[36],' - ',id)

MySQL запрос

В поле MySQL формула можно встраивать собственный MySQL запрос. Например следующий запрос отобразит email пользователя, который создал запись.

SELECT app_entity_1.field_9 FROM app_entity_1 WHERE app_entity_1.id = e.created_by

Внутренние переменные

[TODAY] - текущая дата в UNIXTIME.
[id] - id текущей записи.
[date_added] - дата добавления записи UNIXTIME.
[created_by] - id пользователя, который создал запись.
[parent_item_id] - id родительской записи.
[current_user_id] - id текущего пользователя в системе.

 

get_value()

Для полей типа Список, вы можете устанавливать значения каждой опции, и с помощью встроенной функции get_value() использовать эти значения в полях формулы.

[36]+[54]+get_value([15])

где 15 — идентификатор поля типа Список. Если поле 15 не является обязательным и может быть пустым, в математических выражениях необходимо проверять проверку на NULL.

[36]+[54]+IFNULL(get_value([15]),0)

 

parent_entity_item_value() 

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

parent_entity_item_value(22,173)

где 22 - идентификатор родительской сущности, 173 - идентификатор поля в родительской сущности.

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

Также эта функция создает несколько вложенных SQL-запросов, которые нагружают сервер. Если вам нужно получить несколько значений из родительского элемента, лучше сохранить их в поле «статический текстовый шаблон» и выбрать только одно поле, чем использовать функцию parent_entity_item_value () несколько раз.

entity_item_value()Новая функция в 3.0

Используйте эту функцию для получения значения из связанной сущности по полю "Сущность".

entity_item_value(13,17)

13 - тип поля сущность, 17 - id поля, значение которого нужно использовать в формуле.

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

Функции

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

{12}+[5]

где 12 — это идентификатор функции, 5 идентификатор числового поля.

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

{12}+{13}

Так же функции можно применять в условиях:

if([5]>0,{12},0)

if({1}={2},'<span color="green">на складе</span>','нет')

Работа с значениями NULL

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

IFNULL({12},0)+[5]