VK Video
Можно ли вычислять разные наборы отображений в зависимости от строки или значений в других полях?
Да!
Например, если в зависимости от параметра надо брать отображения из разных таблиц:
=: 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.