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

    Как переиспользовать части кода в рамках одного кода?

    В кодах возможно вызвать строку, передав в нее и всем строкам дальше переменные. Это же является еще одним методом создания переменных и указания им стартовых значений.

    Например сравним 2 значения взятые одним селектом:


    =:
    if(condition: $sum{var: "num" = 1} = $sum{var: "num" = 2}; then: true; else: false) sum: listSum(list: $select) select: selectList(table: 'table'; field: 'field'; where: 'num' = $#num)

    Этот код в condition два раза вызывает один и тот-же select, но передает ему разные значения переменной и по результату это аналогично:


    =:
    if(condition: $sum_1 = $sum_2; then: true; else: false) sum_1: listSum(list: $select_1) select_1: select(table: 'table'; field: 'field'; where: 'num' = 1) sum_2: listSum(list: $select_2) select_2: select(table: 'table'; field: 'field'; where: 'num' = 2)

    В таком маленьком примере лучше не использовать {} тк они труднее читаются, но если переиспользуемая часть большая — это существенно упрощает код.

    Что такое exec?

    Функция exec позволяет выполнить код, содержащийся в другом поле или переданный в параметр code в виде текста.

    В каких случаях эффективно использовать exec?

    Если у вас несколько полей, выполняющих один и тот-же код с разными параметрами. Например у нас отчет за год, где каждое поле — это месяц.

    В первом поле пишем:


    =:
    listSum(list: $list) list: selectList(table: 'table'; field: 'sum'; where: 'date' >= $datestart; where: 'date' <= $dateend) datestart: var(name: "datestart"; default: "2021-01-01") dateend: var(name: "dateend"; default: "2021-01-31")

    Обратите внимание — мы здесь берем datestart и dateend через var, тк в первом поле эти переменные не будут определены и нам нужны будут default значения.

    В феврале пишем:


    =:
    exec(code: "name_first_field"; var: "datestart" = "2021-02-01"; var: "dateend" = "2021-02-28")

    Можно ли var передать один, а не несколько? Да, можно:


    =:
    exec(code: "name_first_field"; var: "dates" = $row) row: rowCreate(field: "datestart" = "2021-02-01"; field: "dateend" = "2021-02-28")

    Но тогда нам нужно модифицировать код в первой колонке:


    =:
    listSum(list: $list) list: selectList(table: 'table'; field: 'sum'; where: 'date' >= $dates[datestart]; where: 'date' <= $dates[dateend]) ~datestart: var(name: "dates"; default: $row) row: rowCreate(field: "datestart" = "2021-01-01"; field: "dateend" = "2021-01-31")

    Если мы запускаем exec из секции форматирования то как он будет выполнен?

    exec выполняет код того типа, из которого вызывается.

    Будет ли выполнен exec, если какой-то из параметров не будет передан?

    Нет, не будет. Для этого мы делали default.

    Еще вариант, если в каких-то случаях параметр нужен, а в каких-то нет, то передавать его пустым "", там где оне не нужен.

    Как можно хранить выполняемые по exec коды?

    Хорошей практикой является иметь скрытое поле в таблице, где в соответсвующей секции будет лежать исполняемый по exec код.

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