Розробка кастомних дашбордів проектів Бітрікс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-методів автотестами економить час при таких перевірках.







