В каких типах таблиц можно использовать в коде значения всей предыдущей колонки?
На самом деле во всех, но подходы разные.
С табличной единицей пересчета (расчетные и временные)
В расчетных и временных можно включить параметр поколоночный пересчет — он меняет порядок расчета полей.
Отключен — считаются строки слева направо.
Включен — считаются колонки сверху вниз (по возрастанию id
или n
).
Также меняется порядок расчета футера у полей привязанных к колонкам:
Отключен — поля считаются по возрастанию sort
и все после строчной части.
Включен — сначала считаются поля привязанные к колонкам по возрастанию sort
колонки, а потом по возрастанию sort
полей привязанных к колонке сразу после окончания расчета всех полей в строчной части колонки (не дожидаясь пока вся строчная часть посчитается!).
Зачем это может быть нужно. Например: нам нужно во второй колонке строчной части посчитать долю значения из первой колонки.
Код такой:
=: #first_column_value / #summ_first_column
#summ_first_column
мы считаем в футере первой колонки как:
=: listSum(list: $list)
list: selectList(table: $#ntn; field: 'first_column_value')
Это будет работать только если включен поколоночный пересчет, тк #summ_first_column
должен быть посчитан до того, как начнется расчет полей строчной части второй колонки!
Если поколоночный пересчет отключен, то вот так в коде второй колонки сделать нельзя:
=: #first_column_value / $summ
summ: listSum(list: $list)
list: selectList(table: $#ntn; field: 'first_column_value')
Тк строки считаются сверху вниз и в момент, когда будет браться selectList
, строк находящихся ниже еще нет!
Со строчной единицей пересчета (простые и циклов)
Для таблиц со строчной единицей пересчета когда вы берете selectList
— это ограничение не действует тк строки в таблице существуют.
Но есть особенности связанные с текущей строкой. Если эта строка добавления, то ее значения еще не записаны в базу данных и в selectList
не попадут. Если она уже существует и пересчитывается, то попадут старые значения.
Поэтому текущая строка из select
исключается, а ее значение плюсуется или добавляется в список отдельным действием:
=: #first_column_value / $summ
summ: listSum(list: $list) + #first_column_value
list: selectList(table: $#ntn; field: 'first_column_value'; where: 'id' != #id)
// Это будет работать и для строки добавления тк != #id который получается != "" в этом случает тоже дает нужный результат
Какой параметр должен быть включен в расчетных и временных, для того, что бы получить корректные значения?
Что надо учитывать при выполнении такого расчета в строке добавления?
С табличной единицей пересчета (расчетные и временные)
Когда включен Поколоночный пересчет, значение из строки добавления будет включено в select
автоматически, несмотря на то, что строка еще не сохранена в базу данных.
Со строчной единицей пересчета (простые и циклов)
Этого не происходит, поэтому значение текущей строки исключается из select
и добавляется отдельно:
=: #first_column_value / $summ
summ: listSum(list: $list) + #first_column_value
list: selectList(table: $#ntn; field: 'first_column_value'; where: 'id' != #id)
Как меняется порядок обработки полей футера при переключении расчетной и временной на поколоночный режим рассчета?
Также меняется порядок расчета футера у полей привязанных к колонкам:
Отключен — поля считаются по возрастанию sort
и все после строчной части.
Включен — сначала считаются поля привязанные к колонкам по возрастанию sort
колонки, а потом по возрастанию sort
полей привязанных к колонке сразу после окончания расчета всех полей в строчной части колонки (не дожидаясь пока вся строчная часть посчитается!).