В версии 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 . При повторном открытии выпадающего списка строка поиска обнуляется.
- В реестре, над таблицей скрыты кнопки создания, копирования, редактирования и удаления записей. Добавлен флаг «Только выбранные» , который позволяет отфильтровать значения и оставить на экране только выбранные записи.
- Отображение списка значений для выпадающего списка теперь реализовано через ленивую пагинацию. Ранее такой подход применялся только при работе с реестром. При прокрутке (скроллинге) выполняется дополнительная загрузка записей из базы данных. Таким образом, при большом количестве записей в таблице-источнике список значений не запрашивает все записи сразу. Об этом ограничении важно помнить тем пользователям, которые привыкли работать с выборкой всех записей через горячие клавиши: выборка производится только из уже загруженного на клиент списка.
В заключение:
Новый параметр «Массив» закрывает частую потребность бизнес-пользователей в гибкой фильтрации по нескольким значениям без привлечения разработки и без усложнения структуры отчётов. Это особенно ценно для компаний с большой номенклатурой объектов учёта, разветвлённой оргструктурой или широкой партнёрской сетью, где анализ данных в разрезе групп объектов — ежедневная задача.















