Документация для разработчиков
Темная тема

Сложная логика в фильтре

В некоторых полях фильтров в основном, текстовых или символьных можно вводить запросы.


Использование запросов

Запрос представляет из себя логическое выражение. Например, выборка пользователей по полю ФИО пользователя. Если ввести

Пётр & Иванов

то отфильтруются все пользователи, у которых в поле ФИО встречаются оба эти слова, либо полностью, либо частично. Такого же результата можно добиться, написав эти слова через пробел: Пётр Иванов.

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

Пётр | Иванов

Когда необходимо использовать отрицание, предусмотрен логический оператор "~". Например: 

(Пётр | Иванов) & ~Сидоров.

Данный запрос означает: вывести всех пользователей, у которых в поле ФИО встречаются сочетания букв Пётр или Иванов и в то же время не встречаются Сидоров.

В последнем запросе были использованы круглые скобки. Это обусловлено тем, что оператор "|" имеет более низкий приоритет, чем оператор "&" (см. таблицу Приоритеты логических операторов). В противном случае, если бы мы не указали круглых скобок, запрос Пётр | Иванов & ~Сидоров имел бы следующее значение: вывести всех пользователей, у которых в поле ФИО встречаются сочетания букв Иванов и не встречаются Сидоров, либо всех пользователей, у которых в поле ФИО встречается Пётр.

Вы можете использовать скобки и для построения более сложных запросов.

Помимо вышеописанных операторов, возможно использование операторов для задания масок. Например, вы не помните ФИО нужного вам человека, но точно знаете что фамилия начинается на "Пе" и заканчивается на "ова", при этом имя этого человека "Ирина" либо "Ирэна". Для описания данных условий необходимо использовать следующий запрос: Пе%ова & Ир_на. В данном запросе были использованы два оператора: "%", означающий "ноль, либо более любых символов" и оператор "_", означающий "один любой символ".

В случае, если вам необходимо использовать поиск слов, содержащих зарезервированные символы, воспользуйтесь двойными либо одинарными кавычками, например: "~NICK~" | '&Leon&'. Если вам необходимо найти фразу содержащую пробелы, выделите ее двойными либо одинарными кавычками, например: "Microsoft Internet Explorer" | 'Netscape Navigator'.

Во всех выражениях запроса регистр символов значения не имеет.

Операторы в запросах. Приоритет операторов

Оператор Описание
& Логический оператор "и" можно опускать: запрос Пётр & Иванов полностью эквивалентен запросу Пётр Иванов.
| Логический оператор "или" позволяет искать записи, содержащие хотя бы один из операндов.
~ Логический оператор "не" позволяет искать записи, не содержащие слово, указанное сразу после оператора, либо означает отрицание выражения, следующего сразу за этим оператором.
( ) Круглые скобки задают порядок действия логических операторов.
% Оператор задания маски. Означает "0 или более любых символов".
_ Оператор задания маски. Означает "1 любой символ".

Приоритеты логических операторов

Оператор Приоритет
~ 1
& 2
| 3


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх