Як використовувати функції мінімуму/максимуму, округлення вгору та вниз (використовуючи кратність), а також про використання скриптів на мові Ruby
Зміст статті
Функції "Мінімум/Максимум"
Функції "Округлити вгору/вниз"
Скрипти мовою Ruby
Aрифметичні та умовні оператори
Математичні функції
Секрети та Підказки:
Сортування записів
Складні розрахунки
Скрипти та дати
Посилання на запис
На прикладі таблиці "Співробітники" розглянемо роботу функцій. Дана таблиця містить колонку з ПІБ співробітника, його посаду та колонки з відсотком КТУ (коефіцієнт трудової участі) за минулий та поточний квартали.
Використовуючи дві останні колонки, розрахуємо розмір премії, яка належить співробітнику.
Премія розраховується так: береться найвищий показник КТУ та множиться на суму.
Насамперед потрібно додати поле Формула на форму. У першому списку потрібно вибрати "Функція". У другому списку вибираємо "Максимум". Далі потрібно вибрати два поля для порівняння. В даному випадку – це КТУ за минулий та поточний квартали. Залишається натиснути кнопку "Створити".
Тепер у нашій таблиці з'явилося поле "Макс. КТУ", яке порівнює два значення у записі та бере максимальне:
Функція "Мінімум" працює з точністю до навпаки.
Для демонстрації функції округлення створимо формулу наступного виду:
Отримуємо результат:
Щоб округлити суму, скористаємося функцією округлення. Для цього потрібно:
- створити нове поле Формула та вибрати функцію "Округлити вгору" (або "Округлити вниз");
- вибрати потрібне поле;
- вказати точність округлення.
В результаті одержуємо колонку з круглим числом:
На прикладі тієї ж таблиці "Співробітники", розглянемо роботу скриптів.
Створимо нове поле Формула, виберемо опцію "Функція" та пункт "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.
Щоб перевірити, чи містить поле певне значення, ви також можете використовувати елемент [ ].
Приклад використання:
if 'продукти' ['склад']
в наявності
else
відсутні
end
Також, ви можете використовувати дві змінні: a та b
Окрім арифметичних операторів, ви можете користуватись основними тригонометричними, логарифмічними і трансцендентними функціями, а також добувати корені. Функції записуються наступним чином: Math::функція(Field_name). Наприклад, Math::acos(Field_csIfon). Детальний перелік математичних функцій:
Тригонометричні функції
(::cos) повертає косинус заданого аргументу.
(::sin) повертає синус заданого аргументу.
(::tan) повертає тангенс заданого аргументу.
Зворотні тригонометричні функції
(::acos) повертає арккосинус заданого аргументу.
(::asin) повертає арксинус заданого аргументу.
(::atan) повертає арктангенс заданого аргументу.
(::atan2) повертає тангенс двох заданих аргументів.
Гіперболічні тригонометричні функції
(::cosh) повертає гіперболічний косинус заданого аргументу.
(::sinh) повертає гіперболічний синус заданого аргументу.
(::tanh) повертає гіперболічний тангенс заданого аргументу.
Зворотні гіперболічні тригонометричні функції
(::acosh) повертає аркгіперболічний косинус заданого аргументу.
(::asinh) повертає аркгіперболічний синус заданого аргументу.
(::atanh) повертає аркгіперболічний тангенс заданого аргументу.
Зведення в ступінь та логарифмічні функції
(::exp) повертає значення заданого значення, зведеного в заданий ступінь.
(::log) повертає логарифм заданого значення за заданою основою.
(::log10) повертає логарифм на підставі 10 заданого аргументу.
(::log2) повертає логарифм на підставі 2 заданого аргументу.
Функції дробу та експоненти
(::frexp) повертає дріб та показник ступеня заданого аргументу.
(::ldexp) повертає значення для заданого дробу та показника ступеня.
Кореневі функції
(::cbrt) повертає кубічний корінь заданого аргументу.
(::sqrt) повертає квадратний корінь заданого аргументу.
Функції помилок
(::erf) повертає значення функції помилок Гауса для цього аргументу.
(::erfc) повертає значення додаткової функції помилок даного аргументу.
Гамма-функції
(::gamma) повертає значення гамма-функції даного аргументу.
(::lgamma) повертає значення логарифмічної гамма-функції для даного аргументу.
Функція гіпотенузи
(::hypot) повертає sqrt(a**2 + b**2)для цього aі b.
Розглянемо ще кілька прикладів, як спростити роботу використовуючи функції. Перед вами таблиця з відбором кандидатів на роботу:
Завдання розділити кандидатів на три групи: відповідний кандидат, резервний кандидат та невідповідний кандидат.
Для цього можна скористатися Формою пошуку, але критеріїв досить багато, а може бути ще більше.
На допомогу приходить поле із функцією. Створимо нову формулу "Відбір".
Розділимо кандидатів на три умовні групи.
Якщо кандидат має:
- Вік до 50 років;
- Вищу освіту;
- Стаж роботи більше 5 років;
- Рекомендацію від попереднього роботодавця, то такий кандидат набуває статусу "Підходить".
Для "Резерву" кандидату достатньо мати вік до 50 років, вищу чи не повну вищу освіту та стаж більше 5 років. Усі інші кандидати набувають статусу "Не підходить".
Така функція у вигляді коду виглядає так:
if вік<45 && "освіта" == "Вища" && стаж>5 && "рекомендація" == "Є"
"Підходить"
elsif вік<50 && "освіта" == "Вища" || "Вища не повна" && стаж>5
"Резерв"
else
"Не підходить"
end
Зверніть увагу: числові значення (включаючи html-назви полів) не беруться у лапки. Лапки застосовуються тільки для строкових значень.
Як видно з наступного скріншоту, кожному кандидату надався статус виходячи з критеріїв.
Погодьтесь, набагато легше виконати пошук по одному полю, замість кількох критеріїв.
Те саме стосується Форматування в таблиці:
Після пошуку або групування по одному полю набагато зручніше сформувати звіт:
У якому опиняться всі кандидати за потрібними критеріями:
Не варто забувати і про Дії за умовою та поле Дія. Наприклад, створити кнопку з дією "Надіслати емейл", яка за умовою доступна тільки в записі навпроти "Підходящого" кандидата. Подивитися приклад, як створити кнопку Дії, ви можете за цим посиланням.
Поле з функцією можна використовувати як критерій у правилах для полів.
Для цього потрібно увімкнути поле "Відбір" на формі (опція "Показувати поле на формі) та створити нове поле "Поставити в чергу" (Радіо кнопка) з вибором із двох значень:
Створюємо правило.
Якщо значення поля "Відбір" складається з "Резерв", то показати поле "Додати до черги":
Так це виглядає на формі:
Застосування функцій дозволить ефективніше управляти даними і проводити складніші розрахунки.
Наприклад, розглянемо таблицю з розрахунком заробітної плати.
Оклад цього співробітника становить 55 000 грн. Замість 24 робочих днів він відпрацював цього місяця лише 20. Також йому було нараховано премію у вигляді 6 800 грн. Насамперед потрібно розрахувати податок на дохід даного працівника за ставкою 18%. Податок на доходи розраховується так:(55000/24)*20*0.18, виходить 5958,3 грн. Далі ЗП: ((55000/24) * 20) + 6800 - 5958,3 і отримаємо - 46675 грн (результат округлено). Якщо проводити такий розрахунок стандартними формулами, то нам довелося б ділити розрахунок на кілька проміжних формул.
За допомогою Ruby функцій можна провести такий розрахунок в одному полі:
((оклад/24.0*дні)+премія-(оклад/24.0*дні*0.18)).round
(Метод .round використовується для округлення результату).
Результат розрахунків:
Будь ласка, зверніть увагу: для коректного розрахунку необхідно використовувати тип поля "Число з крапкою".
Приклад: використовуємо таблицю із угодами.
Завдання: визначити, за скільки днів закінчиться термін дії угоди.
Створюємо скрипт наступного виду: дата_закінчення.mjd - DateTime.now
Де:
дата_закінчення - html-назви поля,
метод .mjd - переводить дату у формат Юліанського календаря,
DateTime.now - об'єкт, значення якого є поточним значенням місцевої дати та часу.
У результаті отримуємо стовпчик з кількістю днів до закінчення договору.
Розглянемо ще один приклад використання функцій і дати. Завдання: визначити рік народження, маючи лише вік користувача.
Створюємо скрипт наступного виду: DateTime.year - вік
Де:
вік - html-назви числового поля,
DateTime.year - об'єкт, значення якого є поточним роком.
У результаті отримуємо стовпчик з роком народження для кожного окремо.
За допомогою скрипта можна створити посилання для перегляду запису. Перейдіть до меню Записи і відкрийте перегляд запису.
Скопіюйте посилання в адресному рядку:
Створіть поле Формула. Виберіть Скрипт (Ruby) зі списку. Вам потрібно використовувати змінну "a" та посилання на запис з попереднього кроку (записується в лапках). Замініть ідентифікатор запису на "Ідентифікатор запису (внутрішній)" зі списку зі значенням - |internal_id|:
Таким чином, ви отримаєте посилання на запис у таблиці:
Ви також можете використовувати посилання на Віджет запису: