Разработка кастомных дашбордов проектов Битрикс24
Встроенная аналитика проектов в Битрикс24 показывает базовые метрики: количество задач, статусы, диаграмму Ганта. Для операционного контроля на уровне руководителя проектного офиса или портфельного менеджера этого недостаточно — нужна сводная картина по всем проектам с кастомными метриками, трендами и сигналами отклонений.
Что не показывает стандартная аналитика
Типичные пробелы встроенных отчётов Битрикс24 по проектам:
- Нет сравнения планового и фактического прогресса по времени
- Нет метрики burndown/burnup для спринтов
- Нет визуализации распределения нагрузки по сотрудникам
- Нет сводного дашборда по нескольким проектам одновременно
- Нет алертов при отклонении от плана
Источники данных для кастомного дашборда
Данные о проектах и задачах Битрикс24 доступны через REST API:
// Список задач проекта с детализацией
$tasks = CRest::call('tasks.task.list', [
'filter' => [
'GROUP_ID' => $projectId,
'!STATUS' => 5, // исключить отменённые
],
'select' => [
'ID', 'TITLE', 'STATUS', 'DEADLINE',
'CREATED_DATE', 'CLOSED_DATE',
'RESPONSIBLE_ID', 'TIME_SPENT_IN_LOGS',
'UF_AUTO_PLANNED_HOURS', // кастомное поле плановых часов
],
'limit' => 500,
]);
// Трудозатраты по задачам
$timeLogs = CRest::call('task.elapseditem.getlist', [
'TASKID' => $taskId,
'select' => ['SECONDS', 'USER_ID', 'CREATED_DATE'],
]);
Для портфельного дашборда по нескольким проектам используйте batch-запросы:
$batch = [];
foreach ($projectIds as $id) {
$batch["project_$id"] = ['method' => 'tasks.task.list',
'params' => ['filter' => ['GROUP_ID' => $id], 'select' => [...]]];
}
$results = CRest::call('batch', ['cmd' => $batch]);
Архитектура кастомного дашборда
Два архитектурных подхода в зависимости от требований:
Встроенная страница (Placement). Дашборд живёт внутри Битрикс24 как вкладка в проекте. Данные запрашиваются через JS SDK в реальном времени. Плюс — всё в одном интерфейсе. Минус — производительность при большом объёме данных.
Внешняя BI-система. Данные из Битрикс24 экспортируются в PostgreSQL или ClickHouse, дашборд строится в Grafana, Metabase или Power BI. Плюс — масштабируемость, сложная аналитика, исторические данные. Минус — отдельный инструмент, требует поддержки ETL-pipeline.
Для большинства клиентов оптимален гибридный подход: оперативный дашборд (данные за последние 30 дней) — внутри Битрикс24 через Placement; стратегический анализ (тренды, ретроспектива) — во внешней BI.
Кейс: дашборд проектного офиса IT-компании
Задача: 8 параллельных проектов, 35 разработчиков, портфельный менеджер хочет видеть отклонения от плана в реальном времени.
Метрики дашборда:
| Метрика | Источник | Расчёт |
|---|---|---|
| Прогресс проекта (%) | tasks.task.list | closed_tasks / total_tasks |
| Отклонение от дедлайна | task.deadline | (fact_date - planned_date) в днях |
| Burndown | task + timelog | planned_hours_remaining vs actual |
| Нагрузка по людям | task.responsible + timelog | часы/неделю на сотрудника |
| Риск срыва | задачи без дедлайна + просроченные | кастомный индекс |
Реализация burndown:
// Расчёт burndown для проекта
function calculateBurndown(tasks, startDate, endDate) {
const totalPoints = tasks.reduce((sum, t) =>
sum + (t.plannedHours || 1), 0);
const dailyBurndown = [];
let currentDate = new Date(startDate);
while (currentDate <= endDate) {
const completedByDate = tasks
.filter(t => t.closedDate && new Date(t.closedDate) <= currentDate)
.reduce((sum, t) => sum + (t.plannedHours || 1), 0);
dailyBurndown.push({
date: currentDate.toISOString().split('T')[0],
remaining: totalPoints - completedByDate,
ideal: totalPoints * (1 - daysDiff(startDate, currentDate) /
daysDiff(startDate, endDate))
});
currentDate.setDate(currentDate.getDate() + 1);
}
return dailyBurndown;
}
Визуализация через Chart.js в React-компоненте внутри placement-приложения.
ETL для исторических данных:
Данные из Битрикс24 ежечасно выгружаются в PostgreSQL через cron-агент. Это позволяет строить тренды за 6–12 месяцев — что REST API в реальном времени сделать нельзя (лимиты запросов и производительность).
-- Таблица снимков состояния проектов
CREATE TABLE project_snapshots (
snapshot_date DATE,
project_id INT,
total_tasks INT,
closed_tasks INT,
overdue_tasks INT,
total_hours_planned NUMERIC,
total_hours_spent NUMERIC
);
Результат: портфельный менеджер видит за 30 секунд утреннего review, какой из 8 проектов отстаёт от графика и где критический bottleneck по конкретному разработчику. Время на подготовку статусного отчёта сократилось с 2 часов до 15 минут.
Обновление и поддержка дашборда
Кастомный дашборд требует поддержки при обновлениях Битрикс24 — REST API иногда меняется, поля переименовываются. Закладывайте 2–4 часа на проверку после каждого мажорного обновления платформы. Покрытие ключевых API-методов автотестами экономит время при таких проверках.







