Show/Hide Toolbars

Руководство администратора

Множественный выбор по ID в фильтрах

Ссылки Назад Вверх Вперед

Если параметр выбирается в фильтре как значение выпадающего списка с включенным признаком множественного выбора или как значение типа "Пользователь", "Орг.единица", "Группа" или "Категория", то такой параметр передается в отчет в виде строки со списком ID выбранных значений, разделенных запятыми:

123,456,789

warning_icon  Если ни одно значение не выбрано в выпадающем списке, то в отчет передается null, а если в значении типа "Пользователь", "Орг.единица", "Группа" или "Категория", то пустая строка.

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

1.Для каждого параметра, поддерживающего множественный выбор, дополнить строку со списком значений запятыми в начале и в конце.

fr_tips_param_string

Дополнение значения параметра запятыми в начале и в конце.

Результатом будет преобразование строки со списком значений к виду:

,123,456,789,

Если же в фильтре не было выбрано ни одно значение, т.е. изначально была передана пустая строка или null, то в параметре будет строка вида

,,

2.Теперь каждое значение в строке выделено запятыми с обеих сторон. Для проверки, входит ли ID в список выбранных в фильтре и переданных в параметр значений, достаточно дополнить значение самого проверяемого ID запятыми слева и справа и проверить, входит ли такая подстрока в строку со списком значений. Например, входит ли в строку ',123,456,789,' подстрока ',456,' где 456 — это проверяемый ID.

В SQL-запросе для проверки такого параметра можно использовать выражение вида:

WHERE ((@subcat = ',,') OR (CHARINDEX(','+CAST(T.SubcatID as varchar(max))+',', @subcat) > 0))

или

WHERE ((@subcat = ',,') OR (@subcat like '%,'+CAST(T.SubcatID as varchar(max))+',%'))

или функцию GetMultiValues:

WHERE ((@subcat = ',,') OR (CAST(T.SubcatID as varchar(max)) IN (SELECT [Value] FROM [dbo].[GetMultiValues](@subcat, ',')))

В этом случае выражение будет возвращать "истина" если в фильтре не выбрано ни одно значение (т.е.  в параметр передана пустая строка, которую мы в п.1 дополнили двумя запятыми в начале и в конце) или если выбран проверяемый ID, т.е. подстрока входит в строку.

В шапке отчета, как правило, выводится список значений, выбранных в фильтре:

fr_tips_list

Список значений, преобразованный в строку.

Для формирования такого списка можно использовать дополнительную таблицу, создаваемую запросом (выводится полное название категории):

SELECT
 (select REPLACE(S.FullPath, '\u2044','\') +';  '
     FROM Subcategories S
     WHERE CHARINDEX(','+CAST(S.SubcatID as varchar(max))+',', @subcat) > 0
     FOR XML PATH('')
  ) as SubcatNames
FROM Subcategories

В примере таблица называется SubcatSelected. В шапке отчета текст может формироваться, например, следующим образом:

для пользователей в группах: [[FilterSubcat]==",,"?" — ":[SubcatSelected.SubcatNames]]

Примеры аналогичных таблиц и выражений для фильтра по пользователям и по категориям:

hmtoggle_arrow0по пользователям

hmtoggle_arrow0по группам

Если проверку вхождения значения в список выбранных в фильтре нужно добавить в код, можно использовать выражение вида:

// если в списке отображаемых показателей отмечен показатель "план"
if (Report.GetParameterValue("FilterColumns").ToString().Contains("план"))

warning_icon  Чтобы каждый элемент списка выводился с новой строки, для более удобного восприятия, используйте тег переноса строки.