Какой блок кода отвечает за действия?
За действия отвечают коды действия. Из кода вчисляющего значения полей выполнить действие нельзя.
Помимо специальной секции кодов нужно использовать функции вполняющие действия, например set — функция изменяющая значение в поле.
Что отслеживает система, что может являться условием выполнения действия?
Тотум отслеживает несколько триггеров — которые могут служить сигналом к запуску действия:
изменение значения в поле
добавление строки
удаление строки
двойной клик в заблокированном поле
Будет ли исполнен код действия если выключены все триггеры?
Нет, активность хотя бы одного триггера обязательна.
Коды действия подсвечиваются в заголовке поля звездочкой
— если звездочка пустая
, значит нет ни одного активного триггера.
В какой момент исполняются коды действий?
Коды действий исполняются после кодов. Те сначала рассчитываются все значения изменяемых строк и далее срабатывают триггеры и выполняются действия.
В каком порядке выполняются коды действий?
В таком же, в каком вычисляются коды. В таком же порядке плейсментов и sort
внутри плейсмента.
Хедер
— Строчная часть
— футер
Строки по возрастанию id
или n
, а внутир по возрастанию sort
.
В случае поколоночного пересчета то поколоночно по возрастанию id
или n
.
Какова разница между set и setList?
set изменяет одно значение, даже если под условия подходят несколько строк.
setList изменяет все значения подходящие под условия.
В Totum все функции действий изменяющие значения разделены на единичный и множественный вариант.
Можно назначить значение только одному полю или нескольким сразу?
set позволяет за одно действие указать несколько изменяемых полей в одной строке:
=: set(table: 'table'; field: 'field_1' = "value_1"; field: 'field_2' = "value_2"; where: 'condition_field' = #condition)
Могут ли функции действий использоваться из кодов или кодов форматирования?
Нет — не могут. Функции действия выполняют действие только из кода действия.
Вызывает ли код действия пересчет таблицы в которой выполняется действие?
Да.
Для простых таблиц — это пересчет изменяемых строк и хедера.
Для расчетных и временных — вся таблица.
При set в расчетную таблицу будет пересчитана вся таблица или только строка в которой производится изменение?
Вся таблица.
Что произойдет, если в изменяемом поле тоже есть код-действия?
Если там включен триггер на изменение — сработает триггер и запустится код действия того поля.
Если в таблице изменяется несколько строк, то код действия будет выполнен на каждую строку отдельно или будет выполнен один общий?
Код действия запустится на каждую измененную строку. Иногда это ведет к огромному перепробегу.
Особенно это важно для таблиц расчитывающихся целиком - для них есть хитрость:
Например, нам нужно пересчитать какую-то таблицу по результатам изменения нескольких полей, но сделать это только один раз:
=: selectList(table: $#ntn; field: 'field'; order: 'field' asc)
//Использование order важно!
=: recalculate(table: 'table_to_recalc')
Тотум автоматически будет отслеживать состав поля, и когда оно измениться по изменению одного или нескольких отслеживаемых значений — выполнит код-действия один раз.
Для простых таблиц тоже есть подобная хитрость — но о ней чуть позже.