VK Video
Какой блок кода отвечает за действия?
За действия отвечают коды действия. Из кода вчисляющего значения полей выполнить действие нельзя.
Помимо специальной секции кодов нужно использовать функции вполняющие действия, например 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')
Тотум автоматически будет отслеживать состав поля, и когда оно измениться по изменению одного или нескольких отслеживаемых значений — выполнит код-действия один раз.
Для простых таблиц тоже есть подобная хитрость — но о ней чуть позже.