Кастомные фильтры Битрикс24: разработка под задачи бизнеса

Представьте: менеджеру нужно увидеть сделки, где сумма оплат за последние 30 дней меньше 50% от суммы сделки. Или компании, у которых есть хотя бы одна сделка на стадии «Переговоры» с суммой > 1 000 000. Стандартный фильтр Битрикс24 не умеет агрегировать данные из связанных сущностей и выполнять под
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Кастомные фильтры Битрикс24: разработка под задачи бизнеса
Средний
~1-2 недели

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1460
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1019
  • Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    764
  • Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    882
  • Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    810
  • Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1166

Представьте: менеджеру нужно увидеть сделки, где сумма оплат за последние 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-приложение из трёх слоёв:

  1. UI фильтра — ваш интерфейс в iframe (placement LEFT_MENU или CRM_*_LIST_TOOLBAR). Пользователь задаёт параметры: период, порог суммы, тип сущности.

  2. Backend-обработчик — ваш сервер, который принимает параметры, выполняет сложную выборку и возвращает список ID подходящих элементов.

  3. Отображение результатов — отфильтрованные данные показываются в кастомном списке или передаются обратно в стандартный список через предустановленный фильтр.

Сравнение подходов к фильтрации

Критерий Стандартный фильтр Кастомный фильтр
Агрегация по связанным сущностям Нет Да (на бэкенде)
Подзапросы Нет Да (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, недоступные стандартными средствами. Свяжитесь с нами для оценки вашего проекта. Получите консультацию.