Пример случаев, в которых это может привести к разным результатам кодов при добавлении и последующего пересчета
Строка добавления еще не записана в базу данных — поэтому у нее нет #id
. Это важно тк если вы в строке добавления используете код ссылающийся на #id
вы можете столкнутся с непредвиденным для себя поведением:
Если поле вычисляется кодом и редактируется в строке добавления и отключен код только при добавлении
— значение в добавленной строке встанет в зафиксированное, тк после добавления оно пересчитается и будет отличаться от рассчитанного при добавлении.
Если поле вычисляется кодом и редактируется в строке добавления и включен код только при добавлении
— значение в добавленной строке будет добавлено с учетом того, что #id
был равен ""
:
= : str`"NUM -" ++ #id`)
// Без код только при добавлении
// Результат в строке добавления: NUM -
// Результат после добавления: NUM - [hand]
// С кодом только при добавлении
// Результат в строке добавления: NUM -
// Результат после добавления: NUM -
Поэтому не рекомендуется использовать привязку к id
для кодов в таблицах в которых пользователи могут добавлять строки вручную.
Когда вы добавляете строку через функцию insert
это также актуально — если вы используете код только при добавлении
то при его выполнении id
будет пустым!.
Если все-таки нужна и строка добавления и id
после добавления, то надо добавить действие на добавление строки:
Если включен код только при добавлении
:
=: recalculate(table: $#ntn; where: 'id' = #id; field: $#nf)
// Код-действия выполняется после создания id
Если выключен код только при добавлении
и поле редактируемое при добавлении
:
=: clear(table: $#ntn; where: 'id' = #id; field: $#nf)
// Код-действия выполняется после создания id
Эти варианты не решают проблему если у вас на этом поле завязаны коды последующих полей.
Поэтому лучшим вариантом будет сконструировать код без привязки к
id
добавляемой строки!