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

Увійти

 

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

Як використовувати функції мінімуму/максимуму, округлення вгору та вниз (використовуючи кратність), а також про використання скриптів на мові Ruby

Зміст статті

Функції "Мінімум/Максимум"
Функції "Округлити вгору/вниз"

Скрипти мовою Ruby

Aрифметичні та умовні оператори
Математичні функції

Секрети та Підказки:

Сортування записів
Складні розрахунки
Скрипти та дати
Посилання на запис

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

На прикладі таблиці "Співробітники" розглянемо роботу функцій. Дана таблиця містить колонку з ПІБ співробітника, його посаду та колонки з відсотком КТУ (коефіцієнт трудової участі) за минулий та поточний квартали.
Використовуючи дві останні колонки, розрахуємо розмір премії, яка належить співробітнику.

таблиця "Співробітники"

Премія розраховується так: береться найвищий показник КТУ та множиться на суму.
Насамперед потрібно додати поле Формула на форму. 
У першому списку потрібно вибрати "Функція". У другому списку вибираємо "Максимум". Далі потрібно вибрати два поля для порівняння. В даному випадку – це КТУ за минулий та поточний квартали. Залишається натиснути кнопку "Створити".

Створення функції Максимум

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

Визначення максимального значення серед двух стовпчиків

Функція "Мінімум" працює з точністю до навпаки.

Опції "Округлити вгору та вниз"

Для демонстрації функції округлення створимо формулу наступного виду:

Формула "Коефіцієнт КТУ"

Отримуємо результат:

Розрахувати коефіцієнт кту

Щоб округлити суму, скористаємося функцією округлення. Для цього потрібно:

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

- вибрати потрібне поле;

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

Функція округлення

В результаті одержуємо колонку з круглим числом:

Округлене значення у таблиці

Застосування скриптів (Ruby script)

На прикладі тієї ж таблиці "Співробітники", розглянемо роботу скриптів.
Створимо нове поле Формула, виберемо опцію "Функція" та пункт "Script (Ruby)" у наступному списку.
У скриптах використовуються HTML назви полів як операнди. Натиснувши посилання під полем функції "Як вставляти дані записи" з'явиться список доступних полів:

Створити 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|:
Заміна id запису
Таким чином, ви отримаєте посилання на запис у таблиці:
Посилання на запис у таблиці
Ви також можете використовувати посилання на Віджет запису:

Посилання на віджет запису