Представьте: менеджеру нужно увидеть сделки, где сумма оплат за последние 30 дней меньше 50% от суммы сделки. Или компании, у которых есть хотя бы одна сделка на стадии «Переговоры» с суммой > 1 000 000. Стандартный фильтр Битрикс24 не умеет агрегировать данные из связанных сущностей и выполнять подзапросы. Мы разрабатываем кастомные фильтры, которые решают такие задачи — от фильтрации по агрегатам до интеграции с 1С. Оценим ваш проект за 1 день, напишите нам.
Как устроен стандартный фильтр в Битрикс24?
В Битрикс24 за фильтрацию отвечает JS-компонент BX.Main.Filter. Он рендерит панель, собирает пользовательский ввод и передаёт его в backend-обработчик. В коробочной версии фильтр оперирует ORM-классами: \Bitrix\Crm\DealTable, \Bitrix\Crm\ContactTable. Каждое поле маппится на колонку ORM-сущности. В облачной версии фильтрация идёт через REST API — параметр filter в методах crm.deal.list, crm.item.list. Поддерживаются операторы: =, !, <, >, <=, >=, %, массив значений (IN). Не поддерживаются: группировка условий AND/OR на уровне фильтра, агрегатные функции, подзапросы.
Почему стандартного фильтра недостаточно?
Бизнес-процессы требуют отбора по метрикам: «просроченные более 7 дней», «клиенты без активности за месяц», «сделки с дебиторской задолженностью в 1С». Без кастомного фильтра менеджеры вручную выгружают данные в Excel или тратят часы на batch-запросы. Кастомный фильтр автоматизирует эту работу и сокращает время поиска до секунд.
Архитектура кастомного фильтра
Кастомный фильтр — это REST-приложение из трёх слоёв:
-
UI фильтра — ваш интерфейс в iframe (placement
LEFT_MENUилиCRM_*_LIST_TOOLBAR). Пользователь задаёт параметры: период, порог суммы, тип сущности. -
Backend-обработчик — ваш сервер, который принимает параметры, выполняет сложную выборку и возвращает список ID подходящих элементов.
-
Отображение результатов — отфильтрованные данные показываются в кастомном списке или передаются обратно в стандартный список через предустановленный фильтр.
Сравнение подходов к фильтрации
| Критерий | Стандартный фильтр | Кастомный фильтр |
|---|---|---|
| Агрегация по связанным сущностям | Нет | Да (на бэкенде) |
| Подзапросы | Нет | Да (SQL или REST-цепочка) |
| Кэширование | Только на уровне базы | Redis / серверный с TTL |
| Интеграция с внешними системами | Нет | Через REST API или прямой SQL |
| Производительность на 10 000 записей | ~100 сек (batch) | <1 сек (с кэшем) |
Кастомный фильтр лучше стандартного в 50 раз по скорости выполнения при больших объёмах.
Глубокое погружение: фильтрация по агрегатам
Задача: отобрать сделки, по которым сумма оплат за последние 30 дней меньше 50% от суммы сделки.
Шаг 1. Сбор данных. Backend запрашивает активные сделки через crm.deal.list с фильтром STAGE_SEMANTIC_ID=P. Для каждой — товарные позиции и историю оплат через crm.timeline.list или кастомное поле с суммой оплат.
Шаг 2. Агрегация на бэкенде. Вычисления на вашем сервере:
процент_оплаты = сумма_оплат_30дней / сумма_сделки * 100 если процент_оплаты < 50 → включить в результат Шаг 3. Кэширование. Результат кэшируется (Redis, TTL 15–30 минут). Повторное открытие фильтра не вызывает пересчёт.
Шаг 4. Отображение. Список ID отфильтрованных сделок передаётся в UI или формируется предустановленный фильтр ID в стандартном списке:
BX24.openPath('/crm/deal/list/?apply_filter=Y&ID[]=' + filteredIds.join('&ID[]=')); Фильтрация по связанным сущностям
Сценарий: найти компании, у которых есть хотя бы одна сделка на стадии «Переговоры» с суммой > 1 000 000. В стандартном фильтре компаний нет полей сделок. Решение: 1) запрос crm.deal.list с фильтром по стадии и сумме → получаем COMPANY_ID; 2) уникальные ID → массив для фильтра компаний; 3) запрос crm.company.list с filter: {ID: uniqueCompanyIds}. На бэкенде это один SQL-запрос с JOIN, через REST — цепочка из 2–3 запросов.
Кастомные пресеты фильтров
Пресеты сохраняют часто используемые условия: «Просроченные > 7 дней», «VIP-клиенты без активности», «Сделки без задач». В REST API нет метода для программного создания пресетов стандартного фильтра, поэтому реализуем кастомный UI с кнопками:
var presets = { overdue_7: {'>DATE_CLOSE': formatDate(-7), 'STAGE_SEMANTIC_ID': 'P'}, vip_inactive: {'UF_CRM_VIP': 1, '<DATE_MODIFY': formatDate(-30)}, no_tasks: {} // серверная логика }; function applyPreset(name) { loadFilteredData(presets[name]); } Пресет «Сделки без задач» требует batch-запроса tasks.task.list с фильтром UF_CRM_TASK для каждой сделки — решается серверной агрегацией.
Производительность и лимиты
REST API ограничивает: 2 запроса в секунду, 50 команд в batch. Для фильтра на 10 000 сделок:
| Подход | Запросов | Время |
|---|---|---|
| Последовательные запросы по 50 | 200 | ~100 сек |
| Batch по 50 команд | 4 batch-запроса | ~8 сек |
| Серверный кэш + инкрементальное обновление | 1–2 запроса | <1 сек |
Детали серверного кэша
Серверный кэш с периодической синхронизацией через вебхуки (`onCrmDealUpdate`) или по расписанию — единственный рабочий подход для production. Данные обновляются инкрементально: при изменении сделки вебхук инвалидирует кэш, и следующий запрос пересчитывает только изменившиеся записи. Это снижает нагрузку на API и ускоряет фильтрацию.Коробочная версия: фильтры через ORM
В коробочной Б24 кастомный фильтр реализуется на уровне PHP — расширение стандартного фильтра новыми полями через событие onBuildFilterFields. Обработчик onBuildFilterQuery модифицирует SQL-запрос. Это производительнее REST, но требует доступа к серверу.
Что входит в работу
- Аналитика: изучение бизнес-логики и требований к фильтрации.
- Проектирование: архитектура UI/backend, схема кэширования.
- Разработка: серверная логика, интеграция с REST API / ORM, реализация пресетов.
- Тестирование: нагрузочное тестирование на ваших данных, проверка точности отбора.
- Документация: описание фильтров, инструкция для администраторов.
- Поддержка: 1 месяц после сдачи — доработки и консультации.
Сроки — от 5 до 20 дней в зависимости от сложности. У нас 10+ лет опыта в Битрикс24 и сертифицированные специалисты — гарантируем качество и соблюдение сроков. Без кастомного фильтра вы теряете значительное время на ручной обработке — разработка окупается в течение нескольких месяцев. Это позволяет строить сложные отчёты Битрикс24, недоступные стандартными средствами. Свяжитесь с нами для оценки вашего проекта. Получите консультацию.







