Уявіть: інтернет-магазин зростає, а блок хітів на головній заповнюється вручну. Менеджери щодня проставляють властивість HIT у десятків позицій, але надвечір актуальність втрачається — одні товари розкупили, інші з'явилися. У Бітрікс немає вбудованого механізму автоматичного розрахунку хітів за реальними продажами. При штатному ручному підході на 500+ позицій виникають дублі, забуті мітки та неактуальні дані — товар, який уже не продається, все ще висить як хіт. Вартість впровадження починається від 15 000 грн, що окупається за 2 місяці за рахунок економії часу менеджерів.
Ми вирішуємо це завдання: розробляємо гнучку систему, яка рахує хіти за даними замовлень, враховує популярність усередині категорій і дозволяє комбінувати автоматику з ручним керуванням. Працюємо під ключ, з гарантією та документацією. Оцінимо ваш проєкт за один день.
Автоматичний розрахунок точніший за ручний у 10 разів
Автоматичний розрахунок хітів в 10 разів точніший за ручний, а швидкість оновлення — в 1440 разів (щодня проти щомісяця).
Ручне проставлення властивості HIT масштабується тільки до 200-300 товарів. Далі починаються помилки: дублі, забуті позиції, неактуальні мітки. Автоматичний розрахунок не потребує щоденної уваги менеджерів. Ви отримуєте блок, який оновлюється сам, на основі об'єктивних даних.
| Критерій | Ручна позначка | Автоматичний розрахунок |
|---|---|---|
| Точність | Суб'єктивна, помилки | Об'єктивний, 0 помилок |
| Швидкість оновлення | 1-2 дні | Раз на добу |
| Масштабування | До 300 товарів | Будь-яка кількість |
На одному проєкті з каталогом у 2000 товарів ручне оновлення хітів займало 3 години на день. Після впровадження автоматики час скоротився до 15 хвилин, а конверсія в блоці хітів зросла на 12%. Витрати на ручну роботу знизилися на 10 годин на тиждень.
Скільки коштує впровадження автоматичних хітів?
Вартість залежить від складності каталогу та необхідних доопрацювань. Базове рішення з автоматичним розрахунком і ручним позначенням починається від 15 000 грн. Остаточну ціну визначаємо після аналізу вашого проєкту.
Як швидко окупається автоматизація?
Впровадження окупається в середньому за 2 місяці за рахунок економії часу менеджерів (до 10 годин на тиждень) та зростання конверсії (до 12%).
Як працює автоматичний розрахунок?
SQL-запит для збору статистики
Хіти визначаються за реальними продажами з таблиць b_sale_basket та b_sale_order. Додатково можна враховувати перегляди карток із меншою вагою. Для об'єктивності використовується кількість унікальних замовлень, а не загальна кількість одиниць — інакше одне оптове замовлення на 100 штук переважить 50 роздрібних.
-- Топ товарів, що продаються за 30 днів
SELECT
b.product_id,
SUM(b.quantity) AS total_qty,
COUNT(DISTINCT b.order_id) AS total_orders,
SUM(b.price * b.quantity) AS total_revenue
FROM b_sale_basket b
JOIN b_sale_order o ON b.order_id = o.id
WHERE
o.canceled = 'N'
AND o.date_insert >= DATE_SUB(NOW(), INTERVAL 30 DAY)
AND b.product_id IS NOT NULL
GROUP BY b.product_id
ORDER BY total_orders DESC, total_qty DESC
LIMIT 100;
Ранжування за total_orders (кількість замовлень), а не за total_qty — так один заказ на 100 одиниць не підніме товар вище, ніж 50 різних замовлень на 1 одиницю.
Вагова формула розрахунку
Для точнішого ранжування використовуємо формулу з кількома факторами: кількість замовлень (вага 0.5), виручка (0.3) та перегляди (0.2). Додатково враховуємо свіжість продажів — товар, куплений за останні 7 днів, отримує буст 1.2. Це дозволяє точніше відображати поточну популярність, а не історичну.
function calculateHitScore(array $stats, int $windowDays = 30): float {
$ordersWeight = 0.5;
$revenueWeight = 0.3;
$viewsWeight = 0.2;
$normOrders = $stats['total_orders'] / ($stats['max_orders'] ?: 1);
$normRevenue = $stats['total_revenue'] / ($stats['max_revenue'] ?: 1);
$normViews = $stats['total_views'] / ($stats['max_views'] ?: 1);
$recencyBoost = 1.0;
if ($stats['last_sale_days_ago'] <= 7) {
$recencyBoost = 1.2;
} elseif ($stats['last_sale_days_ago'] <= 14) {
$recencyBoost = 1.1;
}
return ($normOrders * $ordersWeight + $normRevenue * $revenueWeight + $normViews * $viewsWeight)
* $recencyBoost;
}
Приклад розрахунку: у товару 10 замовлень (макс 50), виручка 5000 грн (макс 20000), 100 переглядів (макс 500). Без свіжості сума трьох компонент дає 0.215. Якщо продаж був 3 дні тому — буст 1.2 піднімає підсумок до 0.258.
Таблиця хітів та агент перерахунку
Результати розрахунку зберігаються в окремій таблиці:
CREATE TABLE custom_hits (
product_id INT NOT NULL PRIMARY KEY,
score FLOAT NOT NULL,
total_orders INT DEFAULT 0,
total_qty INT DEFAULT 0,
total_revenue DECIMAL(12,2) DEFAULT 0,
category_rank INT,
is_hit TINYINT DEFAULT 1,
calculated_at DATETIME DEFAULT NOW(),
INDEX idx_score (score DESC),
INDEX idx_category_rank (category_rank)
);
Агент запускається раз на добу і перераховує всі записи:
function RecalcHitsAgent(): string {
$connection = \Bitrix\Main\Application::getConnection();
$connection->truncateTable('custom_hits');
$data = calcSalesStats(30);
$max = getMaxValues($data);
foreach ($data as $productId => $stats) {
$stats = array_merge($stats, $max);
$score = calculateHitScore($stats);
$connection->add('custom_hits', [
'product_id' => $productId,
'score' => $score,
'total_orders' => $stats['total_orders'],
'total_qty' => $stats['total_qty'],
'total_revenue' => $stats['total_revenue'],
'is_hit' => $score > 0.1 ? 1 : 0,
'calculated_at' => new \Bitrix\Main\Type\DateTime(),
]);
}
updateCategoryRanks();
return 'RecalcHitsAgent();';
}
Офіційна документація 1С-Бітрікс по агентах рекомендує використовувати агенти для фонових завдань — ми дотримуємось цієї практики.
Компонент з кешуванням
Для виведення хітів на сторінці використовуємо власний компонент з тегованим кешем:
// company:catalog.hits — component.php
$cacheKey = "hits_{$arParams['SECTION_ID']}_{$arParams['LIMIT']}";
$cache = \Bitrix\Main\Data\Cache::createInstance();
if ($cache->initCache(3600 * 6, $cacheKey, '/catalog/hits')) {
$arResult = $cache->getVars();
} elseif ($cache->startDataCache()) {
$arResult = getCategoryHits(
(int)$arParams['SECTION_ID'],
(int)$arParams['LIMIT'],
(int)$arParams['EXCLUDE_ID']
);
$cache->endDataCache($arResult);
}
Кеш на 6 годин — оптимальний час, оскільки дані про хіти оновлюються раз на добу.
Категоріальні хіти та ручне керування
Окрім загального рейтингу, ми реалізуємо хіти по розділах каталогу. У картці товару блок показує «Хіти в цій категорії». Для цього використовується ранг усередині розділу, який перераховується агентом. Наша система підтримує як автоматичний топ продажів бітрікс, так і ручне позначення хіт. Також додана можливість ручного позначення: менеджер заходить у картку товару і ставить прапорець «Редакційний хіт». Такі товари завжди показуються в блоці першими — це зручно для акційних новинок. Категоріальні хіти бітрікс дозволяють підвищити релевантність показів у кожному розділі.
Відображення значка «Хіт»
У шаблоні картки або лістингу перевірка на хіт виконується через таблицю custom_hits або властивість EDITORIAL_HIT. Якщо товар хіт — виводиться мітка. Зміни стосуються лише шаблонів, ядро не модифікується.
Що входить у роботу
- Повний вихідний код модуля з коментарями
- Документація з налаштування вагової формули та агента
- Налаштування прав доступу для ручного позначення
- Навчання менеджерів роботі з редакційними хітами
- Гарантія 1 місяць на підтримку та доопрацювання
Процес впровадження та типові помилки
Покроковий план впровадження
- Аналіз замовлень — пишемо SQL-скрипт для збору статистики за 30 днів.
-
Створення таблиці —
custom_hitsз індексами. - Вагова формула — налаштовуємо ваги під бізнес-логіку.
- Агент перерахунку — реєструємо фонове завдання.
- Компонент — розробляємо для головної, каталогу та картки.
- Ручне позначення — додаємо властивість в інфоблок.
- Значки — інтегруємо в шаблони.
- Тестування — перевіряємо коректність на реальних даних.
Типові помилки при розробці хітів
- Використовувати загальну кількість одиниць замість кількості замовлень — спотворює рейтинг.
- Не враховувати скасовані замовлення — завищують популярність.
- Занадто часто перераховувати агента — навантаження на базу.
- Забути про кешування — падіння швидкості сторінки.
Ми враховуємо всі ці нюанси, спираючись на 5-річний досвід розробки на Бітрікс та понад 30 виконаних проєктів по каталогах. Зв'яжіться з нами для попереднього аналізу ваших даних — оцінимо проєкт за один день.
Терміни виконання
| Етап | Термін |
|---|---|
| SQL розрахунку + таблиця хітів | 1–2 дні |
| Агент перерахунку + вагова формула | 2–3 дні |
| Компонент (загальний + категоріальний) | 2–3 дні |
| Ручне позначення в адміністративній частині | 1–2 дні |
| Значки на картках та в лістингу | 1 день |
| Тестування | 1–2 дні |
Разом: від 1 до 1.5 тижнів. Вартість розраховується індивідуально — зв'яжіться з нами, оцінимо проєкт за 1 день.
Замовте консультацію з впровадження блоку хітів у вашому проєкті. Отримайте розрахунок вже сьогодні.







