Как обратиться к предыдущему значению поля?
Не путать со значением предыдущей строки!
Предыдущее значение поля можно получить через быструю переменную $#onfv
(old now field value) и через пристаку old
при обращении к значению поля — #old.field_name
.
Возможно ли обращение к предыдущему значению поля из кода?
Да, в кодах тоже можно получить предыдущее значение поля. Где еще — в кодах действия.
пример как можно оставить значение поля без изменения по условиям
Задача. При выполнении каких-то условий оставить значение поля без изменения, а если условия не выполняются — рассчитать:
=: if(condition: #type = 1; then: $#onfv; else: $calc)
calc: #value_1 * #value_2
пример, изменение значения поля чекбокс на противоположное при пересчете
= : if(condition: $#onfv = true; then: false; else: true)
Например для того, чтобы отслеживать любое изменение в строке. Изменение любого поля приведет к пересчету строки, а пересчет строки приведет к изменению чекбокса.
Таким образом можно повесить код действия отслеживающий любое изменение.
Как в поле, рассчитываемом кодом, вводить значения вручную и избежать фиксации значения?
Достаточно часто бывает, что поле рассчитываемое кодом на основе другого поля может быть изменено и это изменение должно вести к изменению основного поля и не должно приводить к фиксированию значения текущего:
Например код:
=: select(table: 'table'; field: 'field'; where: 'id' = #num)
Код действия на изменение этого поля:
=: set(table: 'table'; field: 'field' = $#nfv; where: 'id' = #num)
Но это приводит к pin
текущего поля и появлению руки.
Руку можно скрыть исключительно косметически в форматировании:
f1=: setFormat(showhand: false)
Но это не приведет к откреплению значения в поле. Для того, что бы работало корректно надо вторым действием сделать clear
:
a1=: set(table: 'table'; field: 'field' = $#nfv; where: 'id' = #num)
a2=: clear(table: $#ntn; field: $#nf; where: 'id' = #id)
// Не забудьте указать where по текущему id
Как убрать индикацию ручного значения?
Руку можно скрыть исключительно косметически в форматировании:
f1=: setFormat(showhand: false)