⟵ сюдатуда ⟶
  • Quick start
  • Установка MIT
  • Установка PRO
  • Обновления
  • Оптимизация
  • Обновление v4-v5
  • Бэкапы
  • Консольная утилита bin/totum
  • Основы для пользователей
  • Интерфейс и компоновка
  • Таблицы и их параметры
  • Префильтр
  • Поля и их параметры
  • Синтаксис
  • Код, действия, форматирование
  • Реляционные взаимосвязи
  • Порядок расчета и единицы пересчета
  • Автозаполнение расчетных и временных
  • Дублирование строк и циклов
  • Сравнения
  • Функции
  • Отладка
  • Печать и CSV
  • API
  • Роли и пользователи
  • Нотификации
  • Действия по расписанию
  • Системные таблицы
  • [PRO] Деревья
  • [PRO] Анонимные таблицы
  • [PRO] Внешние формы
  • [PRO] Экспорт и импорт таблиц
  • [PRO] MeiliSearch
  • [PRO] Базы данных
  • [PRO] Настройка CSS
  • [PRO] Custom docs
  • [PRO] LDAP AD
  • [PRO] Версии файлов
  • [PRO] List-unsubscribe
  • [PRO] Динамические поля
  • Описание
  • Включение
  • Именование виртуальных колонок
  • [PRO] Only Office
  • [PRO] Auth Tokens
  • [PRO] 2FA
  • [PRO] Superlang
  • [PRO] Daemons
  • [PRO] Profiler
  • [PRO] Подключение функций
  • [SRV] Установка и подключение
  • [SRV] Экспорт, pdf, загрузка и предпросмотр
  • [SRV] XLSX/DOCX генераторы
  • PRO Динамические поля

    Описание

    Динамические поля позволяют сформировать произвольное количество колонок строчной части при открытии таблицы:

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

    Ширина виртуальных колонок, а также их форматирование будет соответствовать родительскому полю.

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

    Включение

    Для того, чтобы перевести поле в динамический режим необходимо включить у него параметр 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)
    
    

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