Нужно, чтобы в пользовательством представлении по текущим данным из базы высчитывалось какое-то бизнес-значение.
При изменении данных в базе, значение автоматически пересчитывается.
Предположим, нужно считать количество работающих сотрудников в конкретном подразделении.
Отображать это количество в списке подразделений в поле "Количество сотрудников" и на форме каждого подразделения в поле "Количество сотрудников".
Предположим, Люди(Сотрудники)
с Подразделениями
связаны через Должности
. Архитектура базы данных схемотично выглядит так:
SELECT
units.name,
units.short_name,
units.notes,
units.status,
employees.amount @{
column_width = 150,
caption = 'Количество сотрудников'
}
FROM
hrm.units
LEFT JOIN
(
SELECT
COUNT(posts_for_people.id) as amount,
posts.unit
FROM
hrm.posts_for_people
LEFT JOIN
hrm.posts
ON
posts.id = posts_for_people.post
WHERE
NOT posts_for_people.is_deleted
GROUP BY
posts.unit
) as employees
ON
employees.unit = units.id
WHERE
NOT units.is_deleted
FOR INSERT INTO
hrm.units
В employees
содержится количество людей в подразделениях. Присоединив эту таблицу к таблице подразделений можем вывести значение employees.amount
как столбец таблицы в пользовательском представлении.
На форме нужно посчитать количество для конкретного подразделения, поэтому тут можно упростить подсчет используя идентификатор Подразделения из параметра $id
{
$id reference(hrm.units)
}:
SELECT
@type = 'form',
@title = '🏫 ' || (SELECT name FROM hrm.units WHERE id = $id),
@block_sizes = [
6, 6
],
name @{
form_block = 0
},
short_name @{
form_block = 0
},
notes @{
form_block = 0,
text_type = 'multiline'
},
(
SELECT
COUNT(id) as amount
FROM
hrm.posts_for_people
WHERE
NOT is_deleted
AND post=>unit = $id
) || ' сотрудников(а)' as employees_count @{
caption = 'Количество сотрудников',
form_block = 1
},
FROM
hrm.units
WHERE
id = $id
FOR INSERT INTO
hrm.units
Получаем
Можно написать автоматику (триггер), который будет инкрементить и декрементить значение поля с количеством сотрудников при каждом действии, связанном с сотрудниками и подразделениями.
Можно дать пользователю самому редактировать количество пользователей, чтобы он актуализировал значение руками (но зачем???)
Планируется возможность писать в вычислимых полях (calculated fields) выражения, где можно будет использовать JOIN-ы и значения полей текущей записи. А потом просто отображать значения этого поля на формах и в таблицах вместе со значениями обычных полей (column_fields).