⟵ сюдатуда ⟶
  • Учебный курс
  • Создание простых таблиц и полей
  • Коды базовый уровень
  • Вычисление значения кодом
  • Порядок вычисления и ошибка порядка вычисления, как показать поле в месте отличном от порядка вычисления
  • Единица пересчета таблиц, пересчет строк и их порядок
  • Хедер в простых и расчетных таблицах
  • Использование функций
  • На примере функции if и select
  • Работа параметра where и order на примере select
  • Разница между одним значением и списком, операции над списками (sum, min, max, count)
  • Использование math для математических операций
  • Использование str для комбинации текста
  • Фиксация вычисления при выполнении кодов
  • Ручные значения
  • Исполнять код только при добавлении
  • Быстрые переменные $#nd, $#ndt и $#ntn
  • Обработка дат
  • Ошибки расчета и информация по ним
  • Селекты и связь между таблицами
  • Настройки таблиц базовый уровень
  • Префильтры базовый уровень
  • Условное форматирование базовый уровень
  • Коды действия базовый уровень
  • Использование всплывающих окон
  • Циклы базовый уровень
  • Роли и пользователи в web
  • Коды продвинутый уровень
  • Коды действий продвинутый уровень
  • Префильтры продвинутый уровень
  • Настройки полей и таблиц продвинутый уровень
  • Циклы продвинутый уровень
  • Форматирование продвинутый уровень
  • Селект-дерево
  • Выполнения кода действия по расписанию
  • Печать и отправка email
  • Нотификации
  • Взаимодействие по API
  • Адаптивность и секции
  • Графики
  • Вид таблицы панелями и поворот строчной части
  • Анонимные таблицы для неавторизованного доступа
  • Внешние формы для сбора информации
  • Обновление и бэкапирование
  • Дублирование схем и перенос таблиц между базами
  • Консольная утилита bin/totum
  • Фиксация вычисления при выполнении кодов

    table_recalc

    Сколько раз будет вычислена строка кода если в коде на нее есть 3 ссылки?

    3 (три)! Но только если строка не зафиксирована.

    Что это значит. Если у нас есть такой код:


    =:
    if(condition: $calc < 0; then: 0; else: $calc) calc // И дальше в calc вычисление на 40 строк

    то при его вычислении машина дойдя до первого calc пойдет и вычислит его, потом она дойдет до второго вызова calc в строке с if и снова пойдет и вычислит его!

    Что бы сказать, что второй раз вычислять не надо — используется ~:


    =:
    if(condition: $calc < 0; then: 0; else: $calc) ~calc // И дальше в calc вычисление на 40 строк

    В этом случае, когда calc вычислится первый раз, он будет запомнен (зафиксирован) в пределах выполнения этого кода и повторное обращение к нему в else не приведет к повторному вычислению.

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

    Надо поставить ~ перед названием строки:


    =:
    if(condition: $select != ""; then: $select; else: 0) ~select: select(table: 'table_name'; field: 'field_name'; where: 'id' = #number)

    В каких случаях это может привести к ошибке вычисления?

    Например в while или listReplace. То-есть там, где есть итерации. Если зафиксировать строку на первой итерации, то последующие не будут вычеслены:

    = : while(action: $set; limit: 30; iterator: "iter1")
        set: var(name: "count"; value: $plus)
            plus: listAdd(list: $var; item: $i)
                var: var(name: "count"; default: $#lc)
                i: dateAdd(date: $#nd; days: $days; format: "Y-m-d")
                    days: $#iter1 * -1
    
    // Этот код создает список из 30 дат, начиная с текущей и на 30 дней назад.
    
    // Тильда (~) в любом месте его поломает!