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

    code_action

    Зачем нужно пересчитывать строки?

    Что бы обновить в них данные. Например:

    У вас две таблицы привязанные к третей — стартовой. Все это простые таблицы.

    Привязаны через указание в поле key в ведомых id строки из ведущей.

    Эти ведомые таблицы берут какие-то данные кодами из стартовой.

    Если м изменим что-то в ведущей таблице — данные в строках ведомых не обновятся пока мы их не пересчитаем:

    a1=: recalculate(table: 'slave_1'; where: 'key' = #id)
    
    a2=: recalculate(table: 'slave_2'; where: 'key' = #id)
    
    

    Почему при пересчете данных в расчетной таблице она будет пересчитана вся независимо от where?

    Она всегда рассчитывается целиком, поэтому расчетные таблицы можно пересчитывать так:


    =:
    recalculate(table: 'table')

    Как пересчитать только хэдер простой таблицы?

    Так же как и расчетную таблицу, без указания where:


    =:
    recalculate(table: 'table')

    Как пересчитать все строки в простой таблице?

    Все строки у который id неравен 0:


    =:
    recalculate(table: 'table'; where: 'id' != 0)

    Как пересчитать строки и заново выполнить поля с кодами только при добавлении?

    Если у кодов стоит исполнять только при добавлении, то при пересчете они не будут выполнять код заново.

    Например это нужно если вы добавляете товар в заказ и берете ео цену кодом из прайса и эта цена должна остаться неизменной в этом заказе навсегда.

    Но иногда требуется сделать так, что бы такие коды выполнились повторно.

    В этом случае используется параметр field функции recalculate — он сообщает, что код в поле должен быть выполнен при этом пересчете, даже если он только при добавлении.

    =: recalculate(table: 'table'; where: 'id' = $#nfv; field: 'code_only_on_add_field_1'; field: 'code_only_on_add_field_1')
    
    

    Зачем функция recalculate работает из кода?

    Да — функция recalculate работает из кода, несмотря на то, что это функция действия. Сделано это для того, чтобы в очень редких случаях пересчитать таблицу-источник перед тем, как брать из нее данные:

    =: while(action: $rec; action: $select)
    
    rec: recalculate(table: 'table'; where: 'id' = $#nfv)
    
    select: select(table: 'table'; field: 'field'; where: 'id' = $#nfv)
    
    

    while тоже работает в коде и в качестве значения возвращает последний action или postaction.