Перейти к содержанию

Гриды — Справочник фильтров

Справочник соответствия типов колонок грида и применяемых фильтров.

Справочник описывает, какой фильтр применяется для каждого типа колонки в гриде задач и в ДП Таблица: текстовые фильтры, фильтры по пользователям, по подзадачам и вопросам, по дополнительным параметрам, а также фильтры колонок ДП Таблица и особую обработку сквозных ДП (Through).

Два контекста фильтрации

Каждый фильтр работает в одном или обоих контекстах:

  • Грид задач — фильтрация списка задач категории;
  • ДП Таблица — фильтрация строк внутри табличного дополнительного параметра.

Фильтр колонки в ДП Таблица: операторы «Содержит», «Начинается с», «Пусто» и другие

Фильтры гридов задач

Требования к имени колонки

Имя колонки, по которой строится критерий отбора, проходит проверку на допустимость перед привязкой к SQL. Разрешены обычные идентификаторы (в том числе квалифицированные — до трёх частей через точку, в скобочной или кавычечной форме) длиной до 400 символов. Одиночные внутренние дефисы допустимы — их содержат имена ДП планировщика ресурсов.

Не проходят проверку: пробелы, скобки и прочие спецсимволы внутри имени, сдвоенные и хвостовые дефисы. Последствие зависит от пути: в критерии отбора невалидное имя приводит к тому, что критерий молча отбрасывается (фильтр перестаёт влиять на выборку), на пути получения безопасного имени колонки — к ошибке «Filter '…' has an invalid column name for SQL criteria».

Симптом для поддержки: фильтр настроен, но выборка его игнорирует, либо запрос падает с этой ошибкой — проверить имя колонки в настройке фильтра.

Текстовые и поисковые

Фильтры по текстовым полям задачи:

Колонки Тип фильтра Описание
TaskText, Description TextFilter Фильтр по тексту задачи. Поддерживает contains, startsWith, endsWith, equals. Также используется для быстрого фильтра.
SubcategoryName TextFilter Фильтр по названию категории.
PerformerOrgUnit PerformerOrgUnitFilter Фильтр по орг. единице исполнителя. Принимает текстовый фильтр с операциями «равно», «содержит», «начинается с», «заканчивается на», «не равно», «не содержит», «пусто», «не пусто». В хранимой процедуре колонке соответствует Tasks.DeptName.

Колонка «Орг. единица исполнителя» обслуживается отдельным билдером и сравнивает не значение колонки, а результат подзапроса по идентификаторам задач: от ответственных исполнителей берётся основное назначение в оргструктуре, от него — родительское подразделение, имя которого и сопоставляется с введённым значением (с учётом локализации на язык сессии). Для обычного фильтра колонки подзапрос добавляется в CustomFlex, то есть отбор выполняется до основного запроса ShowTasksFeed и в дереве FilterNode такой фильтр не отображается. В быстром и расширенном фильтрах подзапрос попадает в дерево как flex-выражение TaskID in (…), для отрицающих операций — not in. Пустое значение фильтра не применяется, операции вне перечисленного списка приводят к ошибке «Filter '…' not supported for performerOrgUnit».

Пользователи и роли

Фильтры по участникам задачи:

Колонки Тип фильтра Описание
Owner, OwnerName SetFilter Фильтр по заказчику задачи.
Performer SetFilter Фильтр по единственному исполнителю.
Performers SetFilter Фильтр по множественным исполнителям.
Acceptors SetFilter Фильтр по согласующим.
ExtParam{id} (SelectUsers type) SetFilter Фильтр для ДП "Выбор пользователей/групп".

Подзадачи и вопросы

Числовые фильтры по подзадачам и вопросам:

Колонки Тип фильтра Описание
Subtasks NumberFilter Фильтр по наличию подзадач.
ActiveSubtasks NumberFilter Количество активных подзадач.
TotalSubtasks NumberFilter Общее количество подзадач.
MyQuestions NumberFilter Мои вопросы в задаче.
QuestionsToMe NumberFilter Вопросы адресованные мне.
QuestionsFromMe NumberFilter Вопросы от меня.

ДП и специальные

Фильтры по дополнительным параметрам и специальные фильтры:

Колонки Тип фильтра Описание
ExtParam{id} (MultiSelect types) SetFilter Универсальный фильтр для ДП с множественным выбором (MultiSlctSubcatTasks, MultiCheckbox, etc.).
ExtParam{id} (LookUpField) SetFilter / TextFilter Фильтр для lookup ДП. Фильтрует по связанной задаче.
ExtParam{id} (LookUpField, MultiSlctSubcatTasks) в режиме «Выбор значений» TaskIdSetFilter Отбор по идентификаторам выбранных задач (SelectedTaskID), а не по отображаемому тексту. Клиент присылает filterType = taskIdSet и список taskIds. Подробнее — в разделе «Маппинг: тип ДП → фильтр».
Любая SmartFilter Фильтр через smart-выражение (ESQL).
Signatures* SetFilter Фильтры по подписям задач.
Custom AdvancedFilter Произвольный гибкий фильтр.
Table columns SetFilter Мультивыбор строк в ДП Таблица. Работает в обоих контекстах.

Фильтры колонок ДП Таблица

Эти фильтры работают только в контексте ДП Таблица:

Тип колонки Тип фильтра Описание
Lookup-колонка в таблице TextFilter Текстовый поиск по значению lookup-связи внутри ДП Таблица (по тексту связанной задачи и отображаемым полям справочника), как в гриде списка задач; не ограничен числом записей справочника. Зависит от LookupParamSettings.
Виртуальная (вычисляемая) колонка TextFilter / NumberFilter Текстовые операции ищут по отображаемому значению колонки — тому, что видно в таблице, а не по идентификатору связанной задачи. Может не поддерживать все операции.
"Выбор пользователей" в таблице SetFilter Фильтр по пользователям/группам внутри ДП Таблица.

Маппинг: тип ДП → фильтр

Какой фильтр применяется для каждого типа дополнительного параметра:

Тип ДП Грид задач ДП Таблица Примечание
String, MultiLineString TaskTextFilter (или стандартный) стандартный Текстовый
Number, Decimal, Money стандартный стандартный Числовой
DateTime DatetimeFilter DatetimeFilter Дата и время: в фильтре можно указать время, тогда операторы сравнивают дату вместе с ним; если время не указано — сравнение по дате. Сравнение с временем идёт с точностью до минуты: секунды в сохранённых значениях не учитываются, условие «18:29» находит и значение 18:29:37. Для колонок «только дата» применяется стандартный фильтр по дате
Boolean стандартный стандартный Чекбокс
LookUpField LookupFilter LookupColumnFilter Lookup
MultiSlctSubcatTasks MultiSelectFilter стандартный Мультилукап
SelectUsersType, SelectGroupsType, SelectOrgUnit SelectUsersExtParamFilters SelectUsersColumnFilter Выбор пользователей
MultiCheckbox, DropDown MultiSelectFilter стандартный Множественный выбор
Table Ограничено (не через ShowTasksFeed) N/A (Table — это сам грид) Фильтрация задач возможна через HTML-представление при настройке шаблона. См. support-guide §1.3
Through Особая обработка N/A Сквозной ДП: система определяет целевой ДП, но передаёт тип Through — хранимая процедура сама определяет целевой тип и применяет правильную логику. Замена на SelectUsersOrgUnits/SelectUsersGroups происходит только при группировке, не при фильтрации. Типичные применения: Through → ДП «Выбор пользователей» (Менеджер клиента, РП, BDM и др.)
File ИСКЛЮЧЁН N/A Файловый ДП
Numerator стандартный стандартный Нумератор
Virtual (колонка таблицы) N/A VirtualColumnFilter Только внутри ДП Таблица

Если у колонки Лукап или Мультилукап выбран тип фильтра «Выбор значений» (для обоих типов он же и по умолчанию, второй возможный — «Текстовый»), отбор идёт по самим выбранным задачам, а не по их отображаемому тексту. Клиент присылает фильтр с дискриминатором filterType = taskIdSet; в DTO TaskIdSetFilter помимо общих полей ColumnFilter есть единственное собственное поле taskIds — список числовых идентификаторов задач. Сервер строит из него один узел фильтра: операция =, в ParamType — обозначение типа колонки, которое понимает хранимая функция: LookupValue для Лукапа и MultiSlctSubcatTasks для Мультилукапа (в кэше ДП тип Лукапа называется LookUpField; ColumnFilterService.GetFilter переименовывает его в LookupValue до разбора фильтра, поэтому в разборе taskIdSet встречается уже переименованное значение), в DecimalValue — набор идентификаторов через запятую с префиксом any: для Лукапа и all: для Мультилукапа, текстовое значение (RawValue) не заполняется. Хранимая функция сопоставляет набор с SelectedTaskID в таблице выбранных задач ExtParamValueSelectedTasks: any — подходит любой из выбранных идентификаторов (объединение по «или»), all — в значении должны присутствовать все (по «и»).

Перед построением набор нормализуется: повторы схлопываются, нулевые и отрицательные идентификаторы отбрасываются. Остальные случаи дают ошибку запроса (HTTP 400), а не молчаливый показ неотфильтрованного грида:

  • taskIds не передан — ошибка «Фильтр taskIdSet требует список TaskIds». Такой фильтр не отбрасывается при разборе (в том числе при открытии вида), а доходит до этой проверки;
  • тип ДП колонки не Лукап и не Мультилукап — ошибка «Фильтр taskIdSet не поддерживается для типа ДП …»; тип проверяется раньше содержимого набора;
  • после нормализации не осталось ни одного положительного идентификатора — ошибка «Фильтр taskIdSet требует хотя бы один положительный TaskID». Из интерфейса такой запрос не приходит: при пустом выборе фильтр не отправляется вовсе;
  • идентификаторов больше предела — тело ответа содержит код taskIdSetLimitExceeded и предельное число в maxAllowed; набор не усекается. Предел задаёт настройка TaskIdSetFilterMaxItems, при отсутствии или неположительном значении он равен 1000.

Дерево FilterNode

Фильтры строят дерево FilterNode:

GeneralFilter (root, AND)
├── FilterNode (column=State, operand=IN, values=[1,3])
├── FilterNode (column=ExtParam42, operand=CONTAINS, value="test")
└── GeneralFilter (OR)
    ├── FilterNode (column=Owner, operand=EQUALS, value=123)
    └── FilterNode (column=Performer, operand=EQUALS, value=456)

Дерево передаётся в SP ShowTasksFeed / ShowExtParamTableData и транслируется в WHERE-clause.