пример с последовательной нумерацией
У Тотум есть последовательня уникальная сортировка строк — id
, но иногда нужна дополнительная, например если в таблице включено не только добавление, но и удаление строк или случаются перезапуски/отмены транзакций.
id
не переиспользуются, поэтому получаются пробелы.
Чаще всего это бывает нужно в расчетных таблицах внутри цикла — например для того, что бы передавать в бухгалтерию или на печать чеков последовательные номера.
Сооздаем поле номер и делаем в нем Код, который будет его вычислять:
= : if(condition: $sel = ""; then: 1; else: $calc)
~sel: select(table: $#ntn; field: $#nf; where: 'id' < $id; order: 'id' desc)
id: if(condition: #id = ""; then: "*ALL*"; else: #id)
calc: $sel + 1
В этом примере мы проверяем существование предыдущего номера и еще мы проверяем id
на строку добавления
. Если это строка добавления
, то мы берем последнюю строку по id
в таблице, если нет, то первую строку, у которой id
меньше.
пример с n-сортировкой
Если включен параметр сортировать по полю порядок
, то тоже самое нужно сделать по n
вместо id
:
= : if(condition: $sel = ""; then: 1; else: $calc)
~sel: select(table: $#ntn; field: $#nf; where: 'n' < $n; order: 'n' desc)
n: if(condition: #n = ""; then: "*ALL*"; else: #n)
calc: $sel + 1