Замовлені звіти для інтернет-магазину на 1С-Бітрікс
Штатні звіти модуля sale дають фіксований набір метрик: виручка, кількість замовлень, конверсія. Коли потрібна сегментація клієнтів за менеджерами з урахуванням повернень або розбивка маржинальності за категоріями, доводиться вручну вивантажувати дані в Excel. На кожному другому проєкті клієнт спочатку витрачає тижні на ручну аналітику, а потім просить автоматизувати.
Ми розробляємо замовлені звіти на D7 ORM, які дають повний контроль над даними: довільне групування, крос-таблиці, автоматичний експорт. Після впровадження такого звіту один з клієнтів скоротив час на підготовку щомісячного звіту з двох днів до однієї години — і перестав помилятися в цифрах. Економія склала понад 1500 доларів на місяць.
Які завдання вирішують замовлені звіти?
Штатні звіти модуля sale не підтримують крос-таблиці. Для магазинів з обігом від кількох тисяч замовлень на місяць їх недостатньо. Замовлені звіти на D7 ORM дають гнучкість, недоступну в стандартному функціоналі.
Штатні звіти: що є і чого не вистачає
Модуль sale надає кілька вбудованих звітів через компонент bitrix:sale.report.construct. Їхні обмеження:
- Фіксований набір групувань — не можна додати довільне поле
- Немає крос-таблиць (pivot) — неможливо побудувати матрицю «товар × регіон»
- Відсутній когортний аналіз та RFM-аналіз
- Експорт лише в CSV з обмеженим форматуванням
- Немає складових метрик (LTV, середній чек з урахуванням повернень)
ORM-запити через OrderTable та суміжні сутності
Основа замовлених звітів — D7 ORM Бітрікса. Ключові таблиці:
| Клас ORM | Призначення | Ключові поля |
|---|---|---|
\Bitrix\Sale\Internals\OrderTable |
Замовлення | ID, DATE_INSERT, USER_ID, PRICE, STATUS_ID, RESPONSIBLE_ID |
\Bitrix\Sale\Internals\BasketTable |
Кошик | ORDER_ID, PRODUCT_ID, QUANTITY, PRICE, DISCOUNT_PRICE |
\Bitrix\Sale\Internals\ShipmentTable |
Відвантаження | ORDER_ID, DELIVERY_ID, STATUS_ID, DATE_DEDUCTED |
\Bitrix\Sale\Internals\PaymentTable |
Оплати | ORDER_ID, PAY_SYSTEM_ID, SUM, PAID, DATE_PAID |
\Bitrix\Sale\Internals\OrderPropsValueTable |
Властивості замовлення | ORDER_ID, ORDER_PROPS_ID, VALUE |
ORM дозволяє будувати запити з JOIN-ами, групуванням та агрегатними функціями без сирого SQL. Замовлений звіт на D7 ORM обробляє зведення по 100 000 замовлень у 3 рази швидше, ніж аналогічний звіт на агентах.
Приклад ORM-запиту з групуванням
$result = OrderTable::getList([
'select' => [
'MONTH' => new ExpressionField('MONTH', "DATE_TRUNC('month', %s)", ['DATE_INSERT']),
'RESPONSIBLE_ID',
'TOTAL' => new ExpressionField('TOTAL', 'SUM(%s)', ['PRICE']),
'CNT' => new ExpressionField('CNT', 'COUNT(%s)', ['ID']),
],
'filter' => [
'>=DATE_INSERT' => DateTime::createFromPhp(new \DateTime('last year')),
'!STATUS_ID' => 'F',
],
'group' => ['MONTH', 'RESPONSIBLE_ID'],
'order' => ['MONTH' => 'ASC'],
]);
Чому ORM ефективніший за штатні звіти?
ORM-запити дають довільне групування: за періодами, товарами, менеджерами, регіонами. Для складних запитів з підзапитами використовуємо $DB->Query() напряму.
Візуалізація та експорт
Типовий набір візуалізацій: line chart для динаміки, bar chart для порівняння, doughnut для часток, heatmap для активності. Експорт в Excel через PhpSpreadsheet:
cd /home/bitrix/www/local
composer require phpoffice/phpspreadsheet
PhpSpreadsheet формує файли з форматуванням, формулами та кількома аркушами — бухгалтерія використовує їх без доопрацювань.
Deep-dive: звіт RFM-аналізу клієнтів
RFM-аналіз сегментує клієнтів за трьома параметрами: Recency, Frequency, Monetary. Кожен параметр оцінюється від 1 до 5 (квінтилі). 125 сегментів групуються в категорії: «лояльні», «засинаючі», «втрачені», «нові перспективні».
Алгоритм:
- Вибірка клієнтів з завершеними замовленнями за 12 місяців.
- Для кожного розраховуємо дату останнього замовлення, кількість замовлень, загальну суму.
- Розподіляємо по квінтилях через
NTILE(5) OVER (ORDER BY ...). - Присвоюємо сегмент за комбінацією R-F-M.
SQL-запит для метрик:
SELECT
o.USER_ID,
MAX(o.DATE_INSERT) AS last_order_date,
EXTRACT(DAY FROM NOW() - MAX(o.DATE_INSERT)) AS recency_days,
COUNT(o.ID) AS frequency,
SUM(o.PRICE) AS monetary
FROM b_sale_order o
WHERE o.STATUS_ID NOT IN ('F', 'CA')
AND o.DATE_INSERT >= NOW() - INTERVAL '12 months'
AND o.PAYED = 'Y'
GROUP BY o.USER_ID
Мапінг сегментів:
| Сегмент | R | F | M | Дія |
|---|---|---|---|---|
| Чемпіони | 5 | 5 | 5 | Програма лояльності |
| Лояльні | 3-5 | 3-5 | 3-5 | Upsell, реферали |
| Перспективні новачки | 5 | 1 | 1-3 | Онбординг |
| Засинаючі | 2-3 | 2-3 | 2-3 | Реактивація |
| Під загрозою | 1-2 | 3-5 | 3-5 | Термінова реактивація |
| Втрачені | 1 | 1-2 | 1-2 | Win-back |
RFM-звіт виводиться у вигляді таблиці з фільтрацією та treemap-візуалізацією. Дані кешуються — перерахунок на 50 000 клієнтів займає 10-15 секунд. RFM-звіт скорочує час аналізу клієнтів у 5 разів порівняно з ручним методом.
Що входить в роботу
Після узгодження макету та метрик ми:
- Проєктуємо запити та оптимізуємо індекси.
- Реалізуємо дашборд з фільтрами та візуалізацією.
- Налаштовуємо експорт в Excel/CSV.
- Готуємо документацію по структурі даних та алгоритмах.
- Проводимо навчання співробітників роботі зі звітами.
- Надаємо 30 днів безкоштовної підтримки після запуску.
Етапи розробки
| Етап | Зміст | Термін |
|---|---|---|
| Аналітика | Визначення метрик, розрізів, макет дашборду | 2-3 дні |
| Проєктування запитів | ORM-запити, оптимізація індексів | 3-5 днів |
| Візуалізація | Верстка дашборду, графіки Chart.js, фільтри | 3-4 дні |
| Експорт | PhpSpreadsheet, форматування | 1-2 дні |
| Тестування | Перевірка на великих обсягах, навантаження | 2-3 дні |
Терміни та вартість
Терміни — від 5 робочих днів для одного простого звіту, від 15 днів для комплексного дашборду з RFM та когортами. Вартість розраховується індивідуально після аналізу вашої бази та вимог, але простий звіт коштує від 300 доларів. Економія часу на підготовку звітності окупає розробку вже за пару місяців. Усі роботи виконують сертифіковані фахівці з 10-річним досвідом роботи з 1С-Бітрікс. Надаємо гарантію якості на всі рішення. Зв'яжіться з нами — ми спроєктуємо звіт під ваше завдання.







