Разработка кастомных отчетов CRM Битрикс24
Встроенный конструктор отчётов Битрикс24 не умеет: объединять данные из CRM с данными из 1С, строить когортный анализ клиентов, считать LTV или RFM-сегменты. Для этого нужна разработка — через BI-коннектор, REST API или собственные таблицы в PostgreSQL.
Пути разработки кастомных отчётов
BI-коннектор Битрикс24 — официальный способ подключить внешний BI-инструмент (Power BI, Tableau, Google Looker Studio) к данным Битрикс24. Данные отдаются через REST в виде плоских таблиц. Схема фиксирована, расширить нельзя.
REST API + собственная БД — через методы crm.deal.list, crm.contact.list, crm.lead.list данные выгружаются во внешнюю базу данных (PostgreSQL, ClickHouse). Там строятся произвольные отчёты. Полный контроль над структурой и обновлением данных.
Кастомный компонент внутри Битрикс24 — для коробочных версий: PHP-компонент в /local/components/ рендерит отчёт прямо в интерфейсе Битрикс24. Данные берутся напрямую из таблиц БД.
BI-коннектор: возможности и ограничения
Подключение: Битрикс24 → BI Аналитика → Подключить BI-инструмент. Генерируется URL с токеном для подключения из Power BI или Looker Studio.
Доступные наборы данных:
- Сделки с полями (включая UF_CRM_*)
- Лиды
- Контакты и компании
- Активности (звонки, письма, встречи)
- Пользователи
Ограничения: данные обновляются с задержкой (не realtime), нет связи с внешними системами, нельзя добавить вычисляемые поля на стороне Битрикс24.
Разработка через REST API + внешняя БД
Это наиболее мощный подход. Схема синхронизации:
Cron (каждые 15 мин) → REST API Битрикс24 → Парсинг → PostgreSQL
↓
BI-инструмент или веб-приложение
Пример выгрузки сделок с пагинацией:
$start = 0;
do {
$result = $client->call('crm.deal.list', [
'order' => ['DATE_MODIFY' => 'DESC'],
'filter' => ['>=DATE_MODIFY' => $lastSyncDate],
'select' => ['ID', 'TITLE', 'STAGE_ID', 'OPPORTUNITY', 'ASSIGNED_BY_ID',
'SOURCE_ID', 'DATE_CREATE', 'CLOSEDATE',
'UF_CRM_CUSTOM_FIELD1', 'UTM_SOURCE', 'UTM_CAMPAIGN'],
'start' => $start,
]);
foreach ($result['result'] as $deal) {
upsert_deal($pdo, $deal); // INSERT ON CONFLICT UPDATE
}
$start = $result['next'] ?? null;
} while ($start !== null);
Лимит REST API: 2 запроса/сек на облачных порталах. При большом объёме данных используют batch-метод: до 50 запросов в одном HTTP-вызове.
Когортный анализ клиентов
Задача: разбить клиентов по когортам (месяц первой покупки) и отследить их повторные покупки. В Битрикс24 «из коробки» это невозможно.
Решение через внешнюю БД:
-- Когортный анализ повторных покупок
WITH first_deal AS (
SELECT
contact_id,
DATE_TRUNC('month', MIN(closedate)) AS cohort_month
FROM deals
WHERE stage_id = 'WON'
GROUP BY contact_id
),
deals_with_cohort AS (
SELECT
d.contact_id,
f.cohort_month,
DATE_TRUNC('month', d.closedate) AS deal_month,
d.opportunity
FROM deals d
JOIN first_deal f ON d.contact_id = f.contact_id
WHERE d.stage_id = 'WON'
)
SELECT
cohort_month,
deal_month,
COUNT(DISTINCT contact_id) AS customers,
SUM(opportunity) AS revenue
FROM deals_with_cohort
GROUP BY cohort_month, deal_month
ORDER BY cohort_month, deal_month;
Результат подключается к Looker Studio или визуализируется в собственном веб-приложении.
Реальный кейс: аналитика B2B-продаж
Задача: дистрибьютор, 500+ активных клиентов. Нужен отчёт: топ-клиенты по выручке за квартал с динамикой к прошлому кварталу, сегментация по ABС-анализу, прогноз pipeline на следующий квартал на основе текущих открытых сделок.
Проблема: данные о выручке частично в Битрикс24 (сделки), частично в 1С (оплаты). Несоответствие: в сделке сумма КП, в 1С — фактически отгруженная сумма.
Решение:
- Синхронизация сделок из Битрикс24 в PostgreSQL через REST API (каждые 30 мин)
- Синхронизация реализаций из 1С через COM-объект (раз в час)
- Связка по полю
UF_CRM_1C_CONTRACT_ID— кастомное поле в сделке со ссылкой на договор 1С - Материализованные представления PostgreSQL для предагрегации по периодам
- Looker Studio подключён к PostgreSQL через коннектор
Результат: отчёты обновляются каждые 30 минут, руководство видит актуальную картину без ручной выгрузки из двух систем.
Техническое замечание: UF_CRM_* поля не возвращаются в crm.deal.list автоматически — их нужно явно указывать в select. Список всех UF-полей получают через crm.deal.fields.
Сроки разработки
| Задача | Время |
|---|---|
| Настройка BI-коннектора + дашборды в Looker Studio | 3–5 дней |
| REST API синхронизация + внешняя БД | 5–7 дней |
| Разработка SQL-аналитики (когорты, LTV, ABC) | 3–5 дней |
| Кастомный PHP-компонент внутри Битрикс24 | 5–10 дней |
Полный проект кастомной аналитики — 1–2 недели в зависимости от источников данных и сложности метрик.







