English
Italiano
Español
Français
Deutsch
Português
Ελληνικά
Nederlands
Polski
Čeština
中文
日本語
हिन्दी
اللغة العربية
Русский
Українська
עִברִית
Türk
Latvietis
Dansk
Norsk
Íslenska
한국어
Suomen
Gaeilge
Bahasa Melayu
Svenska
Українська
Як використовувати функції мінімуму/максимуму, округлення вгору та вниз (використовуючи кратність), а також про використання скриптів на мові 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|:

Таким чином, ви отримаєте посилання на запис у таблиці:

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