English Español Deutsch Italiano Polski Nederlands Português Français 中文 日本語 हिन्दी اللغة العربية Русский Українська עִברִית Ελληνικά Türk Latvietis Dansk Norsk Íslenska 한국어 Suomen Gaeilge Bahasa Melayu Svenska Čeština
Войти
Русский

Войти

 

Функции и скрипты (поле Формула)

Как использовать функции минимума/максимума, округления вверх и вниз (используя кратность), а также об использовании скриптов на языке Ruby

Содержание статьи

Функции "Минимум/Максимум"

Функции "Округлить вверх/вниз"

Скрипты на языке Ruby

 

Секреты и Подсказки:

Сортировка записей

Сложные расчеты

Скрипты и даты

 

Функции "Минимум/Максимум"

На примере таблицы "Сотрудники" рассмотрим работу функций.

Данная таблица содержит колонку с ФИО сотрудника, его должность и колонки с процентом КТУ (коэффициент трудового участия) за прошлый и текущий кварталы. 

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

Премия рассчитывается так: берется самый высокий показатель КТУ и умножается на сумму.

В первую очередь нужно добавить поле Формула на форму.

В первом выпадающем списке нужно выбрать "Функция":

Во втором выпадающем списке выбираем "Максимум":

Далее, нужно выбрать два поля для сравнения. В данном случае - это КТУ за прошлый и текущий кварталы.

Остается нажать на кнопку "Создать".

Теперь в нашей таблице появилось поле "Макс. КТУ", которое сравнивает два значения в записи и берет максимальное:

Функция "Минимум" работает с точностью до наоборот:

Функции "Округлить вверх и вниз"

Для демонстрации функции округления, создадим формулу следующего вида:

Получаем результат:

Чтобы округлить сумму, воспользуемся функцией округления. Для этого нужно:

- создать новое поле Формула и выбрать функцию "Округлить вверх" (или "Округлить вниз");

- выбрать нужное поле;

- указать точность округления.

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

Применение скриптов (Ruby script)

На примере все той же таблицы "Сотрудники", рассмотрим работу скриптов.

Создадим новое поле Формула, выберем опцию "Функция" и пункт "Script (Ruby)" в следующем списке.

В скриптах используются HTML названия полей в качестве операндов. Нажав на ссылку под полем функции «Как вставлять данные записи» появится список доступных полей:

Достаточно выбрать поле из списка и скопировать его HTML название. 

Обратите внимание, вы можете изменить HTML название поля прямо здесь. Достаточно указать новое название и нажать на кнопку "Обновить":

Доступны следующие арифметические операторы:

(+) сложение

(-) вычитание

(*) умножение

(/) деление

(>) true, если левый операнд больше правого

(<) true, если левый операнд меньше правого

(%) деление по модулю

(==) true, если значения двух операндов одинаковы.

 

Условные операторы:

(if) используется для проверки истинности условия. Значения условия false и nil являются ложными (false), тогда как все прочие — будут True.

(elsif) используется для дополнительных условий.

(||) используется для проверки несколько условий.

 

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

Создадим скрипт следующего вида:

if 'долж' == 'инженер 1 категории'

    максКТУ*650

где: if - условный оператор, 'долж' - HTML название поля "Должность", содержит значение 'инженер 1 категории'

Если условие соблюдается, то выполнить расчет: максКТУ*650

Создадим еще одно условие. Если должность - бухгалтер или секретарь, то коэффициент доплаты будет составлять - 500.

Записывается таким образом:

elsif 'долж' == 'бухгалтер' || 'долж' == 'секретарь'
   максКТУ*500

Для всех других условий, коэффициент будет равен - 450.5

else
   максКТУ*450.5

 

По завершению скрипта, нужно обязательно указать end

Для того, чтобы в результате получить круглое число, используем метод .round

 

Похожие методы Ruby, которые можно применить:

(round) - возвращает ближайшее целое число к вещественному числу

(ceil) - возвращает наименьшее целое число большее или равное числу.

(floor) - возвращает наибольшее целое, меньшее или равное.

(ceiling_up) - округлить вверх.

(ceiling_down) - округлить вниз.

 

В результате получаем скрипт:

Теперь в колонке "Премия" выполняются расчеты, которые отличаются в зависимости от должности.

На странице редактирования настроек поля можно включить опцию "Показывать поле на форме":

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

Доступные методы и операторыto_f, to_i, to_s, round, floor, ceil, ceiling_up, ceiling_down, include?, if, elsif, else, end.

Также, вы можете использовать две переменные: a и b

 

Секреты и Подсказки

Рассмотрим еще несколько примеров, как упростить работу с использованием функций.

Перед вами таблица с отбором кандидатов на работу:

Задача разделить кандидатов на три группы: подходящий кандидат, резервный кандидат и неподходящий кандидат.

Для этого можно воспользоваться Формой поиска, но критериев довольно много, а может быть еще больше.

На помощь приходит поле с функцией. Создадим новую формулу "Отбор".

Разделим кандидатов на три условные группы.

Если кандидат имеет:

- Возраст до 45 лет;

- Высшее образование;

- Стаж работы больше 5 лет;

- Рекомендацию от предыдущего работодателя, то такой кандидат получает статус "Подходит".

Для "Резерва" кандидату достаточно иметь возраст до 50 лет, высшее или не полное высшее образование и стаж больше 5 лет.

Все другие кандидаты получают статус "Не подходит".

Такая функция в виде кода, выглядит следующим образом:

if возраст<45 && "образование" == "Высшее" && стаж>5 && "рекомендация" == "Есть"
   "Подходит"
elsif возраст<50 && "образование" == "Высшее" || "Высшее не полное" && стаж>5
   "Резерв"
else
   "Не подходит"
end

Обратите внимание: числовые значения (включая html-названия полей) не берутся в кавычки. Кавычки применяются только для строковых значений.

Как видно на следующем скриншоте, каждому кандидату присвоился статус исходя из критериев.

Согласитесь, гораздо легче выполнить поиск по одному полю, вместо нескольких критериев.

Тоже самое касается Форматирования в таблице:

Используем поле "Отбор" для форматирования записей в таблице:

После поиска или группировки по одному полю гораздо удобнее сформировать Отчет:

В котором окажутся все кандидаты по нужным критериям:

Не стоит забывать и про Действия по условию и поле Действие.

Например, создать кнопку с действием "Отправить емейл", которая  по условию доступна только в записи напротив "Подходящего" кандидата.

Посмотреть пример, как создать кнопку Действие, вы можете по этой ссылке.

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

Для этого нужно включить поле "Отбор" на форме:

Далее создадим новое поле "Поставить в очередь" (Радио кнопка) с выбором из двух значений:

Создаем правило.

Если значение поля "Отбор" состоит из "Резерв", то показать поле "Добавить в очередь":

Так это выглядит на форме:

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

Для примера рассмотрим таблицу с расчетом заработной платы.

Оклад данного сотрудника составляет 55 000 рублей. Вместо 24 рабочих дней он отработал 20 в этом месяце. Также ему была начислена премия в размере 6 800 рублей.

В первую очередь нужно рассчитать налог на доход данного работника по ставке 13 %.

Налог на доход считается так: (55000/24)*20*0.13, получается 5958,3 руб. 

Далее ЗП: ((55000/24)*20) + 6 800 - 5958,3 округлим результат и получим - 46 675 руб.

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

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

((оклад/24.0*дни)+премия-(оклад/24.0*дни*0.13)).round 

(Метод .round используется для округления результата).

Получаем результат:

Пожалуйста, обратите внимание: для корректного расчета необходимо использовать тип поля "Число с точкой".

 

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

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

Задача: определить, через сколько дней закончится договор.

Создаем скрипт следующего вида:

дата_окончания.mjd - DateTime.now

Где:

дата_окончания - html-названия поля,

метод .mjd - переводит дату в формат Юлианского календаря,

DateTime.now - объект, значение которого является текущим значением местной даты и времени.

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

Рассмотрим еще один пример использования функций и даты.

Задача: определить год рождения, имея только возраст пользователя.

Создаем скрипт следующего вида:

DateTime.year - возраст

Где:

возраст - html-названия числового поля,

DateTime.year - объект, значение которого является текущим годом.

В итоге получаем колонку с годом рождения для каждого.

 


Пожалуйста, войдите в QuintaDB чтобы иметь возможность оставлять комментарии
Поделиться обсуждением в социальных сетях: