Тип данных «Массив» для множественного выбора в параметрах отчётов, форм и бизнес-объектов

В версии 5.10.0 продукта Alpha BI реализована поддержка параметра с типом данных «Массив» и типом элемента «Ссылка на объект» (в текущей версии — только этот тип) для возможности множественного выбора значений. Параметр доступен в реестрах бизнес-объектов, формах, отчётах и в виджетах аналитических панелей с источником данных «Бизнес-объект».

В данной статье мы покажем, как настроить такой параметр, и объясним, какие синтаксические конструкции использовать для него в запросах к разным базам данных.

Поскольку параметр доступен в объектах системы с источником данных «Бизнес-объект», основная часть настройки выполняется в модуле «Типы бизнес-объектов».

Настройка параметра

Параметр доступен в выпадающем списке при добавлении параметра «Массив значений» или при определении типа значения «Массив».


Обратите внимание: при выборе типа значения «Массив» создаётся дополнительный атрибут настройки параметра — «Тип элемента», который в текущей версии принимает значение «Ссылка на объект». В будущих версиях планируется расширение поддерживаемых типов элементов.

Атрибуты поля («Поле обязательно для заполнения», «Скрывать по условию», «Надпись пустого поля» и другие) для настройки параметра соответствуют выбранному типу элемента.

Настройка фильтрации данных

Тип хранилища «Таблица»

Для фильтрации данных в бизнес-объектах с типом хранилища «Таблица» (независимо от типа СУБД) в конфигурации «Фильтр» доступны два блока для работы с параметром-массивом: TOARRAY() и ARRAYCONTAINS(). Оба блока относятся к группе «Множества и сортировка».

Пример настройки блока с конструкцией ARRAYCONTAINS()

OR(ISEMPTY([let_objects]), ARRAYCONTAINS([let_objects], FIELD("field_object")))

где:

  • let_objects – код переменной с типом «Массив»,
  • field_object – поле типа «Ссылка на объект», значения которого нужно сравнить с выбранными значениями в параметре.

Для проверки параметра на пустоту используется блок ISEMPTY() .

Тип хранилища «SQL-запрос»

Для бизнес-объектов с типом хранилища «SQL-запрос» фильтрация данных возможна двумя способами: через конфигурацию «Фильтр» (аналогично хранилищу «Таблица») либо путём передачи значения параметра непосредственно в теле запроса. Во втором случае потребуется добавить функцию обработки массива, синтаксис которой зависит от конкретной СУБД, куда направляется запрос.

1. PostgreSQL

Обработка массива выполняется через функцию ANY() . Проверка параметра на пустоту – через IS NULL .

Пример:

(field_object = ANY(@let_objects) OR @let_objects IS NULL)

где:

  • field_object – код поля источника данных,
  • let_objects – код параметра типа «Массив».

2. ClickHouse

Обработка массива выполняется через функцию has() . Проверка на пустоту – через empty() = 1 или length() = 0.

Пример:

(has(@let_objects, field_object) OR empty(@let_objects) = 1)

где:

  • field_object – код поля источника данных,
  • let_objects – код параметра типа «Массив».

3. Другие СУБД

При сохранении изменений бизнес-объекта с источником данных, отличным от PostgreSQL и ClickHouse, система выдаст сообщение валидации о том, что выбранный тип параметра не поддерживается для указанного соединения.

Работа с параметром

Параметр типа «Массив» доступен для работы двумя способами: выпадающий список и реестр. Для каждой записи отображается интерактивный флаг для выбора нескольких значений. По нажатию на флаг происходит выбор записи и наполнение массива значений. При нажатии на строку (не на флаг), ранее выбранный массив значений обнуляется, и выбранной остаётся только эта запись.

Количество выбранных значений отображается в поле параметра в формате «Выбрано элементов: X». Количество выбранных элементов дублируется в правом нижнем углу окна реестра.

В отчете выбранные значения параметра формируют список с разделителем “,” (запятая)

Пример:
= 'Значение параметра типа массив: ' & ${let_objects}?
где:

  • ${let_objects} - код параметра типа «Массив»


Дополнительные улучшения (версия 5.10.0):

  • Появилась строка поиска, позволяющая отфильтровать список значений. Поиск выполняется по вхождению подстроки и применяется после нажатия клавиши Enter . При повторном открытии выпадающего списка строка поиска обнуляется.

  • В реестре, над таблицей скрыты кнопки создания, копирования, редактирования и удаления записей. Добавлен флаг «Только выбранные» , который позволяет отфильтровать значения и оставить на экране только выбранные записи.

  • Отображение списка значений для выпадающего списка теперь реализовано через ленивую пагинацию. Ранее такой подход применялся только при работе с реестром. При прокрутке (скроллинге) выполняется дополнительная загрузка записей из базы данных. Таким образом, при большом количестве записей в таблице-источнике список значений не запрашивает все записи сразу. Об этом ограничении важно помнить тем пользователям, которые привыкли работать с выборкой всех записей через горячие клавиши: выборка производится только из уже загруженного на клиент списка.

В заключение:

Новый параметр «Массив» закрывает частую потребность бизнес-пользователей в гибкой фильтрации по нескольким значениям без привлечения разработки и без усложнения структуры отчётов. Это особенно ценно для компаний с большой номенклатурой объектов учёта, разветвлённой оргструктурой или широкой партнёрской сетью, где анализ данных в разрезе групп объектов — ежедневная задача.

2 лайка