---
title: "Query Builder в List Filter Online: условия, группы и CAML-запрос, который за ними стоит"
description: "Справочник по конструктору запросов (Query Builder) веб-части Vitextra List Filter Online: где его найти, как работают условия и группы И/ИЛИ, какие операторы доступны для каждого типа столбца, как вычисляются динамические условия «Текущий пользователь» и «Последние X Лет», как предустановленный фильтр сочетается с фильтрами пользователя и как посмотреть сгенерированный CAML-запрос."
url: https://vitextra.com/ru/support/kb/10320
language: ru
published: 2026-10-21
modified: 2026-10-21
products:
  - "List Filter Online"
author: "Lidija Reising"
tags: ["List Filter Online Query Builder", "конструктор CAML-запросов SharePoint", "предустановленный фильтр веб-части списка SharePoint", "группы условий И ИЛИ SharePoint", "динамический фильтр текущий пользователь", "фильтр последние X месяцев", "вложенные условия фильтра SharePoint Online", "просмотр CAML-запроса", "Vitextra List Filter Online"]
---

# Query Builder в List Filter Online: условия, группы и CAML-запрос, который за ними стоит

Справочник по конструктору запросов (Query Builder) веб-части Vitextra List Filter Online: где его найти, как работают условия и группы И/ИЛИ, какие операторы доступны для каждого типа столбца, как вычисляются динамические условия «Текущий пользователь» и «Последние X Лет», как предустановленный фильтр сочетается с фильтрами пользователя и как посмотреть сгенерированный CAML-запрос.

## Обзор

**Query Builder** — это часть веб-части Vitextra List Filter Online, в которой редактор страницы задаёт **предустановленный фильтр**: набор условий, которым должен удовлетворять каждый элемент, прежде чем он появится в веб-части. Пользователи не видят этот фильтр и не могут его снять — они лишь сужают результат с помощью области фильтра и фильтров в заголовках столбцов.

Предустановленный фильтр хранится в виде дерева условий и групп и преобразуется в **CAML-запрос**, который SharePoint выполняет на сервере. Ничего не загружается в браузер для последующей фильтрации: список возвращает только подходящие элементы, постранично, — именно поэтому веб-часть остаётся быстрой на больших списках.

Типичные сценарии предустановленного фильтра:

- Показывать только документы, **созданные или изменённые текущим пользователем**.
- Показывать на странице-дашборде только записи **за последние 12 месяцев**.
- Показывать только **утверждённые** элементы, элементы **с вложениями** или элементы, у которых **Статус** не равен *Закрыто*.
- Собрать по странице на каждый отдел из одного списка, не создавая отдельное представление для каждого отдела.

📝 **Заметка**  
Query Builder задаёт фильтр, который применяется всегда. Элементы управления, которые пользователи видят в области фильтра, настраиваются отдельно — см. [KB10255. Элементы управления области фильтра и поддерживаемые типы столбцов в List Filter Online](https://vitextra.com/ru/support/kb/10255).

---

## Где найти Query Builder

1. Откройте страницу в режиме редактирования и выберите **Изменить веб-часть** на веб-части List Filter Online.
2. В панели свойств перейдите к группе **Фильтр**. Под подписью **Фильтровать представление по:** отображается предварительный просмотр текущего фильтра — **Фильтр не применен.**, если фильтр ещё не задан.
3. Нажмите **Изменить фильтр**. Query Builder откроется в большой боковой панели.
4. Соберите запрос и нажмите **Сохранить**, чтобы применить его, или **Отмена**, чтобы отменить изменения. Веб-часть сразу перерисовывается с новым фильтром.

![Группа «Фильтр» панели свойств с предварительным просмотром фильтра и кнопкой «Изменить фильтр»](https://static.vitextra.com/articles/10320/filter-group-property-pane-ru.png)
*Группа «Фильтр» панели свойств с предварительным просмотром фильтра и кнопкой «Изменить фильтр»*

Query Builder доступен только после того, как в группе **Источник данных** выбраны **сайт** и **список или библиотека**: перечень полей и их типы берутся из выбранного списка.

---

## Условия и группы

Запрос состоит из строительных блоков двух видов.

- **Условие** — это одно сравнение: *поле* — *оператор* — *значение*, например `Amount` — *Больше* — `5000`. Некоторым операторам значение не нужно (*Содержит данные*, *Текущий пользователь*, *Сегодня*).
- **Группа** содержит условия и другие группы и объединяет их одним логическим оператором — **И** (должны выполняться все члены группы) или **ИЛИ** (должен выполняться хотя бы один). Переключатель у левого края группы меняет оператор.

В панели всегда есть одна **корневая группа**; удалить её нельзя. Внутри любой группы кнопка **Добавить** предлагает две команды:

- **Условие** — добавляет в текущую группу пустую строку;
- **Группа** — добавляет вложенную группу (по умолчанию И), которую вы заполняете точно так же.

Группы можно вкладывать друг в друга до **десяти уровней**. У каждой строки и каждой вложенной группы справа есть значок удаления; при удалении группы удаляется всё её содержимое.

![Запрос с вложенными группами И/ИЛИ в Query Builder](https://static.vitextra.com/articles/10320/query-builder-nested-groups-ru.png)
*Запрос с вложенными группами И/ИЛИ в Query Builder*

Запрос на рисунке читается так: *Название заполнено и начинается с «C»* **и** *(создано мной или изменено мной)* **и** *(создано за последний год или изменено за последний год)* **и** *(есть вложения, или заполнен Клиент и Сумма больше 5 000)*.

💡 **Совет**  
Оставляйте корневую группу с оператором **И**, а каждый альтернативный набор условий выносите в отдельную группу **ИЛИ**. Такой запрос легко читается в предварительном просмотре и легко расширяется в дальнейшем.

---

## Операторы по типам столбцов

Список **операторов** в строке зависит от типа выбранного поля. В таблице перечислены операторы, которые Query Builder предлагает для каждого поддерживаемого типа столбца.

| Тип столбца | Операторы |
|:---|:---|
| **Однострочный текст**, **Многострочный текст**, **Гиперссылка или рисунок** | Равно, Не равно, Начинается с, Содержит, Содержит данные, Не содержит данных |
| **Выбор** | Равно, Не равно, Начинается с, Содержит, Содержит данные, Не содержит данных |
| **Выбор (несколько значений)**, **Подстановка**, **Вычисляемый** (текстовый результат) | Равно, Не равно, Содержит данные, Не содержит данных (для вычисляемого столбца также Начинается с и Содержит) |
| **Число**, **Валюта**, **ИД** | Равно, Не равно, Больше, Больше или равно, Меньше, Меньше или равно (для столбца «Число» также Содержит данные, Не содержит данных) |
| **Дата и время** | Равно, Не равно, Не Ранее, После, Не Позднее, До, Между, Сегодня, Последние X Дней, Последние X Недель, Последние X Месяцев, Последние X Лет, Следующие X Дней, Следующие X Недель, Следующие X Месяцев, Следующие X Лет, Содержит данные, Не содержит данных |
| **Да/Нет** | Равно, Не равно, Содержит данные, Не содержит данных |
| **Вложения** | Равно, Не равно (значение: Да / Нет) |
| **Пользователь или группа** | Равно, Не равно, Текущий пользователь, Не Является Текущим Пользователем, Содержит данные, Не содержит данных |
| **Управляемые метаданные** (одно и несколько значений) | Равно, Не равно, Содержит, Не содержит, Содержит данные, Не содержит данных |
| **Статус утверждения** | Равно, Не равно (значение — список статусов) |
| **Оценка**, **Отметки «Нравится»** | Равно, Не равно, Содержит данные, Не содержит данных (для отметок «Нравится» — только Содержит данные, Не содержит данных) |

*Содержит данные* и *Не содержит данных* проверяют, есть ли в столбце какое-либо значение, — так же, как **IsNotNull** и **IsNull** в CAML.

Редактор **значения** тоже зависит от типа столбца: выбор даты для дат (для оператора *Между* — два поля выбора даты), числовое поле для чисел и валюты, выбор пользователей для столбца **Пользователь или группа**, выбор терминов для **Управляемых метаданных**, список *Да / Нет* для столбцов «Да/Нет» и «Вложения», список статусов для столбца **Статус утверждения** и текстовое поле для текстовых столбцов, столбцов выбора и подстановки.

❗ **Важно**  
Системные столбцы и столбцы только для чтения (например, *ИД типа контента*, *Уникальный идентификатор*, *Версия* или *Извлёк*) в списке полей не предлагаются. Столбцы типов, которые нельзя сравнивать в CAML, — например, *Изображение*, *Расположение* или *Повторение* — также не предлагаются.

---

## Статические и динамические условия

**Статическое** условие сравнивает столбец с фиксированным значением, которое вы ввели: датой, числом, текстом, пользователем. Значение записывается в запрос как есть. Оператор *Между* включает обе даты, с точностью до календарного дня; если задана только одна из дат, условие превращается в открытое *Не Ранее* или *Не Позднее*.

**Динамическое** условие SharePoint вычисляет **в момент выполнения запроса**, поэтому одна и та же страница показывает разные элементы разным пользователям и в разные дни:

| Оператор | Как вычисляется |
|:---|:---|
| **Текущий пользователь** / **Не Является Текущим Пользователем** | Сравнивает столбец пользователя с идентификатором вошедшего пользователя (`<UserID />` в CAML). |
| **Сегодня** | Сравнивает столбец даты с текущей датой (`<Today />`). |
| **Последние X Дней / Недель / Месяцев / Лет** | Диапазон от *сегодня минус X* (дней, недель, месяцев или лет) до *сегодня*. |
| **Следующие X Дней / Недель / Месяцев / Лет** | Диапазон от *сегодня* до *сегодня плюс X*. |

Число для *Последние X* и *Следующие X* вводится в поле значения строки. **Последние X Месяцев** и **Последние X Лет** преобразуются в начальную дату при формировании запроса, поэтому страница с условием *Изменён — Последние X Лет — 1* всегда охватывает последние двенадцать месяцев, и никому не нужно править фильтр.

📝 **Заметка**  
Динамические условия вычисляются на сервере, в часовом поясе сайта. Поэтому документ, изменённый поздно вечером, может попасть в другой день, чем показывают ваши локальные часы.

---

## Как предустановленный фильтр сочетается с фильтрами пользователя

Когда пользователь применяет фильтр в области фильтра или в заголовке столбца, веб-часть не заменяет предустановленный фильтр. Она формирует новый запрос, в котором **предустановленный фильтр и фильтры пользователя объединены оператором И**:

```
<Where>
  <And>
    <!-- предустановленный фильтр из Query Builder -->
    <!-- условия, выбранные пользователем в области фильтра -->
  </And>
</Where>
```

Следствия, о которых стоит знать:

- Пользователи могут сузить результат, но никогда не расширят его за пределы предустановленного фильтра. Страница с фильтром *Кем создано — Текущий пользователь* никогда не покажет чужие элементы, что бы пользователь ни выбрал в области фильтра.
- Сортировка, группировка, итоги и экспорт в Excel работают с объединённым результатом.
- Сохранённые фильтры и ссылки на фильтр (см. [KB10253. Сохранение фильтров и ссылка на отфильтрованное представление в List Filter Online](https://vitextra.com/ru/support/kb/10253)) хранят только пользовательскую часть запроса. Предустановленный фильтр — часть конфигурации страницы и перемещается вместе с ней.

---

## От дерева к CAML

CAML — язык запросов к спискам SharePoint — допускает внутри `<And>` и `<Or>` **ровно два операнда**. Поэтому группу из трёх и более членов нельзя записать одним элементом: её приходится сворачивать в цепочку вложенных пар. Query Builder делает это за вас, а заодно учитывает детали, зависящие от типа: атрибут `Type` у каждого значения, `LookupId` для столбцов подстановки и `IncludeTimeValue` для сравнения дат.

Запрос с рисунка выше даёт предложение `<Where>` примерно в 70 строк. Его скелет — с сокращёнными сравнениями — выглядит так:

```
<Where>
  <And>
    <Or>  <!-- создано мной ИЛИ изменено мной -->
      <Eq><FieldRef Name="Author" /><Value Type="Integer"><UserID /></Value></Eq>
      <Eq><FieldRef Name="Editor" /><Value Type="Integer"><UserID /></Value></Eq>
    </Or>
    <And>
      <Or>  <!-- создано за последний год ИЛИ изменено за последний год -->
        <And> <Geq Created 2025-10-21 /> <Leq Created <Today /> /> </And>
        <And> <Geq Modified 2025-10-21 /> <Leq Modified <Today /> /> </And>
      </Or>
      <And>
        <Or>  <!-- (клиент заполнен И сумма > 5000) ИЛИ есть вложения -->
          <And> <IsNotNull Customer /> <Gt Amount 5000 /> </And>
          <Eq Attachments 1 />
        </Or>
        <And> <IsNotNull Title /> <BeginsWith Title "C" /> </And>
      </And>
    </And>
  </And>
</Where>
```

Каждая строка *Последние X Лет* превратилась в `<And>` из двух сравнений дат, каждая группа ИЛИ — в элемент `<Or>`, а четыре члена корневой группы И — в три вложенных элемента `<And>`.

### Просмотр сгенерированного запроса

Чтобы увидеть точный CAML, который отправляет веб-часть, — включая предустановленный фильтр, текущие фильтры пользователя, поля представления, ограничение строк и группировку:

1. В панели свойств разверните группу **Средства разработчика** и включите параметр **Включение режима разработчика**.
2. Сохраните страницу. В правой части панели команд веб-части появится меню средств разработчика.
3. Выберите **Запрос CAML**. Запрос откроется в диалоговом окне, откуда его можно скопировать.

![Диалоговое окно «Запрос CAML» показывает точный запрос, отправляемый в SharePoint](https://static.vitextra.com/articles/10320/caml-query-dialog-ru.png)
*Диалоговое окно «Запрос CAML» показывает точный запрос, отправляемый в SharePoint*

💡 **Совет**  
Когда фильтр готов, снова выключите режим разработчика. Меню видно всем, кто видит веб-часть.

---

## Предустановленные фильтры на больших списках

На списках с более чем 5 000 элементов SharePoint выполняет запрос только в том случае, если **первое** условие, сужающее результат, использует **индексированный** столбец. Предустановленный фильтр выполняется первым, поэтому именно он решает, откроется ли страница вообще.

- Начинайте корневую группу с условия по индексированному столбцу (*Создан*, *Изменён*, *Кем создано*, *Кем изменено* и *ИД* индексированы по умолчанию; остальные можно проиндексировать в параметрах списка).
- Предпочитайте И в корне: ИЛИ между двумя неиндексированными столбцами не может использовать ни один индекс.
- Динамические условия по дате (*Последние X Месяцев*, *Сегодня*) — хорошие первые условия, если столбец даты проиндексирован.

Подробности, предупреждение об индексе в конфигураторе фильтра и создание индекса одним щелчком описаны в статье [KB10257. Фильтрация больших списков: индексированные столбцы и порог в 5 000 элементов](https://vitextra.com/ru/support/kb/10257).

---

## Ограничения

- Query Builder работает со столбцами **одного списка или библиотеки** — того, что выбран в источнике данных. Условия по столбцам других списков невозможны.
- Значения подстановки и выбора сопоставляются по **введённому тексту**; отдельного средства выбора для них в Query Builder нет.
- Вложенная группа без условий игнорируется при формировании запроса.
- Максимальная глубина вложенности — десять уровней. На практике двух-трёх уровней хватает почти для любого сценария; более глубокое дерево трудно читать в предварительном просмотре.
- Предустановленный фильтр пользователям не показывается. Если пользователям нужно понимать, почему каких-то элементов нет, скажите об этом в заголовке веб-части или на странице.

---

## Связанные статьи

💡 **Совет**  
Остальные параметры панели свойств описаны в статье [KB10201. Настройка веб-части List Filter Online](https://vitextra.com/ru/support/kb/10201); элементы управления области фильтра — в [KB10255. Элементы управления области фильтра и поддерживаемые типы столбцов в List Filter Online](https://vitextra.com/ru/support/kb/10255); каскадные раскрывающиеся списки — в [KB10256. Каскадные фильтры: сужение вариантов раскрывающегося списка по другим выбранным фильтрам](https://vitextra.com/ru/support/kb/10256). Сравнение со встроенной веб-частью List см. в статье [KB10321. List Filter Online и встроенная веб-часть List: в чём разница?](https://vitextra.com/ru/support/kb/10321).
