Динамические поля позволяют сформировать произвольное количество колонок строчной части при открытии таблицы:
Это виртуальное отображение — внутри базы данных существует одно поле, содержащее список или массив, значения которого преобразуются в отображение колонок.
Ширина виртуальных колонок, а также их форматирование будет соответствовать родительскому полю.
Обрабатывается только при загрузке таблицы. Невозможно динамически перерисовывать колонки в зависимости от заданного селектора. Если вам необходимо использовать динамический селектор, то можно задать ему код-действия на изменения, открывающий эту же таблицу.
Для того, чтобы перевести поле в динамический режим необходимо включить у него параметр PRO Динамическое поле. Доступно для трех типов полей — Строка
, Число
, Данные
.
После этого, независимо от типа поля – оно будет отображаться как поле с типом Данные и будет отмечено как техническое поле видимое только роли Создатель.
Поле ожидает list
или rowList
одинаковой размерности в каждой строке, каждый элемент которого будет преобразован в значение соответствующей виртуальной колонки.
Для того, чтобы это произошло, необходимо указать управляющие параметры для поля в Форматировании таблицы.
Для этого используется специальная управляющая секция dn=:
, выполняющуюся только в момент открытия таблицы:
dn=: rowCreate(field: "d_field" = $inner)
inner: rowCreate(field: "titles" = $limit; field: "order" = json`[0,1,2]`)
limit: listFilter(list: $format_date; key: "key" < #h_days)
format_date: dateFormat(date: $uniq; format: "d M")
uniq: listUniq(list: $sel)
sel: selectList(table: 'sales_statistics'; field: 'date'; order: 'date' asc)
dn=:
ожидает row
, в ключах которого указаны name
динамических полей, а в значениях содержатся row
с одним из двух обязательных ключей:
titles
— список из отображаемых заголовков полей или row
из соответствия ключей и заголовков.
order
— список ключей, порядок в котором будут выведены виртуальные колонки.
row
— в случайном порядке.Чтобы получить в коде форматирования информацию о ключе виртуальной колонки, необходимо использовать переменную $#nfd
Name
виртуальных колонок формируются как base_field/key
и могут управляться из форматирования таблицы:
f1=: setTableFormat(condition: #h_show = false; fieldhide: "d_field/1" = "force"; fieldhide: "d_field/0" = "force"; fieldhide: "d_field/2" = "force")
f2=: setTableFormat(condition: #h_show = true; fieldhide: "d_field/1" = false; fieldhide: "d_field/0" = false; fieldhide: "d_field/2" = false)
Но доступ к ним из кода по этим путям для получения значения — невозможен, так как этих полей не существует в базе данных! Для получения значения — необходимо обращаться к родительскому полю.