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

    selects_table

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

    Да!

    Например, если в зависимости от параметра надо брать отображения из разных таблиц:


    =:
    if(condition: #condition_field = 1; then: $s1; else: $s2) s1: selectRowListForSelect(table: 'table_1'; field: 'name') s2: selectRowListForSelect(table: 'table_2'; field: 'name')

    Или разный набор значений:


    =:
    selectRowListForSelect(table: 'table'; field: 'name'; where: 'type' = #condition_field)

    Для того, что бы это работало — надо включить параметр индивидуальный расчет селекта для каждой строки.

    По умолчанию он выключен — это означает, что по умолчанию селект рассчитывается только для первой строки.

    Когда параметр включен, для каждой строки селект будет рассчитан заново.

    Этот же параметр обновляет зависимые селекты в хедере/футере/префильтре.

    Поэтому — если у вас в коде селекта есть if или есть where зависящий от поля в таблице — то включайте индивидуальный расчет селекта для каждой строки.

    Как влияет на нагрузку включенный Индивидуальный расчет селекта для каждой строки?

    Сильно повышает нагрузку на сервер! Очень сильно!

    Используйте только по необходимости!

    Индивидуальный расчет селекта используется только в строчной части?

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


    =:
    if(condition: $#nfv = 1; then: $v1; else: $if2) if2: if(condition: $#nfv = 2; then: $v2; else: $if3) if3: if(condition: $#nfv = 3; then: $v3) // Есть более изящный способ ветвления, но о нем будет потом :) v1: selectRowListForSelect(table: 'table'; field: 'name'; where: 'id' = json`[1,2]`) v2: selectRowListForSelect(table: 'table'; field: 'name'; where: 'id' = json`[2,3]`) v3: selectRowListForSelect(table: 'table'; field: 'name'; where: 'id' = json`[3]`) // с 1 только на 2 // с 2 только на 3 // с 3 никуда

    Тк if берет значение текущего поля, то нам нужно, что бы селект пересчитался, когда пользовател выберет например 2 — для этого необходимо включить индивидуальный расчет селекта для каждой строки.

    Можно ли кодом добавить в автоматически формируемый селект одно значение?

    Да. Селект может быть сформирован вручную по определенному шаблону:

    [
    {"value": 0, "is_del": false, "title":"Отображение 1"},
    {"value": 1, "is_del": false, "title":"Отображение 1"}
    {"value": 2, "is_del": false, "title":"Отображение 1"}
    ]
    
    

    Именно такую структуру создает selectRowListForSelect.

    Это список из строк. Поэтому, что бы добавить в него специальное значение, нам нужно создать строку по этому формату и добавить ее к автоматически сформированному selectRowListForSelect списку строк:


    =:
    listAdd(list: $sel; item: $spec) sel: selectRowListForSelect(table: 'table'; field: 'name') spec: rowCreate(field: "value" = "spec"; field: "is_del" = false; field: "title" = "Специальное отображение") // is_del — специальная отметка, которой можно отметить скрытую строку. Про это будет в последующих уроках. Пока ставьте false.