⟵ сюдатуда ⟶
  • Учебный курс
  • Создание простых таблиц и полей
  • Коды базовый уровень
  • Селекты и связь между таблицами
  • Настройки таблиц базовый уровень
  • Префильтры базовый уровень
  • Условное форматирование базовый уровень
  • Коды действия базовый уровень
  • Использование всплывающих окон
  • Циклы базовый уровень
  • Роли и пользователи в web
  • Коды продвинутый уровень
  • Как работают сравнения в кодах?
  • Как проверить вхождение одного списка в другой?
  • Как по условиям выключить where
  • У строки добавления нет id
  • Как быстро создавать списки
  • Как взять строку из таблицы и потом получить из нее данные?
  • Что такое списки ассоциированных массивов?
  • Определение названия поля кодом, определение строки кода кодом?
  • Список списков и превращение его в список?
  • Как последовательно перебрать список и дополнить его или перезаписать значения?
  • Как отфильтровать и сортировать список или список ассоциированных массивов?
  • Получение информации о ручных значениях, уровне дерева, селектах
  • Как работает while и var? Замена на listReplace
  • Как оптимизировать выполнение одного и того же кода с передачей в него переменных?
  • Как использовать cond для condition?
  • Как использовать значение предыдущей строки для расчета текущей?
  • Зачем нужен поколоночный пересчет в расчетных и временных таблицах?
  • Как использовать предыдущее значение в кодах и комбинировать ручной ввод и код?
  • Операции над row и rowList
  • Коды действий продвинутый уровень
  • Префильтры продвинутый уровень
  • Настройки полей и таблиц продвинутый уровень
  • Циклы продвинутый уровень
  • Форматирование продвинутый уровень
  • Селект-дерево
  • Выполнения кода действия по расписанию
  • Печать и отправка email
  • Нотификации
  • Взаимодействие по API
  • Адаптивность и секции
  • Графики
  • Вид таблицы панелями и поворот строчной части
  • Анонимные таблицы для неавторизованного доступа
  • Внешние формы для сбора информации
  • Обновление и бэкапирование
  • Дублирование схем и перенос таблиц между базами
  • Консольная утилита bin/totum
  • Зачем нужен поколоночный пересчет в расчетных и временных таблицах?

    В каких типах таблиц можно использовать в коде значения всей предыдущей колонки?

    На самом деле во всех, но подходы разные.

    С табличной единицей пересчета (расчетные и временные)

    В расчетных и временных можно включить параметр поколоночный пересчет — он меняет порядок расчета полей.

    • Отключен — считаются строки слева направо.

    • Включен — считаются колонки сверху вниз (по возрастанию 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 полей привязанных к колонке сразу после окончания расчета всех полей в строчной части колонки (не дожидаясь пока вся строчная часть посчитается!).