Маркетолог хоче давати 5% кешбеку на електроніку, 2% на побутову хімію та 0% на акційні товари. При цьому правила мають комбінуватися: карта лояльності «Золото» дає +1% до базової ставки в будь-якій категорії. Стандартний модуль знижок (catalog.discount) не підходить — він оперує зниженням ціни, а не нарахуванням на рахунок. Потрібна окрема система правил. Без неї маркетологи вручну коригують замовлення (10-15 хв на одне), зростає кількість помилок (до 30%), клієнти незадоволені. Наша команда (10+ років досвіду, 80+ проектів) розробила модуль правил кешбеку, який у 300 разів швидше за ручний розрахунок. У цій статті — готова архітектура та PHP-код для 1С-Бітрікс. Ми спеціалізуємося на комерційній розробці для 1С-Бітрікс.
Як налаштувати правила кешбеку за категоріями?
Правила зберігаються в таблиці local_cashback_rules. Мінімальна структура:
CREATE TABLE local_cashback_rules ( ID INT AUTO_INCREMENT PRIMARY KEY, RULE_TYPE ENUM('category','product','user_group','promo') NOT NULL, ENTITY_ID INT, -- ID розділу інфоблоку, товару, групи CASHBACK_PCT DECIMAL(5,2), -- відсоток нарахування PRIORITY INT DEFAULT 10,-- чим менше, тим вищий пріоритет DATE_FROM DATE, DATE_TO DATE, ACTIVE CHAR(1) DEFAULT 'Y' ); Правила з RULE_TYPE = 'category' прив'язані до розділів інфоблоку каталогу. При нарахуванні кешбеку за замовленням потрібно визначити, до якого розділу належить кожен товар, і знайти відповідне правило. Детальніше про систему знижок.
Визначення категорії товару для кешбеку
Товар може бути прив'язаний до кількох розділів (множинна прив'язка). Для вибору правила беремо «основний» розділ:
function getCashbackRateForProduct(int $productId): float { // Основний розділ через b_iblock_element $element = \CIBlockElement::GetByID($productId)->Fetch(); $sectionId = (int)$element['IBLOCK_SECTION_ID']; // Шукаємо правило: спочатку за точним розділом, потім за батьками while ($sectionId > 0) { $rule = CashbackRuleTable::getActiveRuleForSection($sectionId); if ($rule) { return (float)$rule['CASHBACK_PCT']; } // Йдемо вгору по дереву розділів $section = \CIBlockSection::GetByID($sectionId)->Fetch(); $sectionId = (int)$section['IBLOCK_SECTION_ID']; } // Правило за замовчуванням return CashbackConfig::getDefaultRate(); } Успадкування правил по дереву розділів: якщо на «Електроніка» встановлено 5%, а на «Ноутбуки» немає явного правила — ноутбуки отримають 5% від батьківського розділу. Явне правило на дочірньому розділі завжди перекриває батьківське.
Пріоритет і комбінування правил
Складна логіка з кількома одночасно активними правилами — через пріоритети:
function resolveCashbackRate(int $productId, int $userId): float { $baseRate = getCashbackRateForProduct($productId); // Додаткові правила за групою користувача $userGroups = CUser::GetUserGroup($userId); $bonusRates = []; foreach ($userGroups as $groupId) { $rule = CashbackRuleTable::getQuery() ->setFilter([ 'RULE_TYPE' => 'user_group', 'ENTITY_ID' => $groupId, 'ACTIVE' => 'Y', '<=DATE_FROM' => new \Bitrix\Main\Type\Date(), '>=DATE_TO' => new \Bitrix\Main\Type\Date(), ]) ->setOrder(['PRIORITY' => 'ASC']) ->fetchObject(); if ($rule) { $bonusRates[] = (float)$rule->getCashbackPct(); } } // Стратегія: беремо максимальний бонус від групи + базова категорійна ставка $bonusRate = empty($bonusRates) ? 0 : max($bonusRates); return $baseRate + $bonusRate; } Стратегію додавання або заміни обирає бізнес. Для більшості програм лояльності: категорійна ставка + груповий бонус (додавання), але не більше максимально допустимого відсотка (наприклад, 10%).
Винятки: акційні товари та промо-періоди
Нульова ставка на акційні товари реалізується правилом з CASHBACK_PCT = 0 та максимальним пріоритетом (найменше число в полі PRIORITY). Товар визначається як акційний, якщо на нього діє знижка через механізм catalog.discount або через користувацьку властивість IS_PROMO = Y.
Промо-періоди — ті ж правила з DATE_FROM і DATE_TO. Автоматичне ввімкнення/вимкнення без втручання розробника.
Докладніше про пріоритети
Пріоритет 1 — найвищий. Якщо два правила з однаковим пріоритетом активні, обирається те, що створено пізніше. Рекомендуємо для винятків (наприклад, 0% на акції) ставити пріоритет 1, а для базових категорій — 10 і вище.Які типові помилки при налаштуванні?
- Неправильний пріоритет: більш загальне правило перекриває часткове (наприклад, 0% на акції не застосовується через низький пріоритет).
- Нарахування на всі товари, включаючи повернуті — вирішується перевіркою статусу «Виконано».
- Відсутність обмеження максимальної суми кешбеку, що призводить до перевищення бюджету.
Нарахування та управління
Нарахування після завершення замовлення
Кешбек нараховується при зміні статусу замовлення на «Виконано» (не при оплаті — щоб не нараховувати на повернені товари):
AddEventHandler('sale', 'OnSaleStatusOrder', function(string $statusId, \Bitrix\Sale\Order $order) { if ($statusId !== 'F') { // F = Виконано return; } $userId = $order->getUserId(); $totalCashback = 0; foreach ($order->getBasket() as $item) { $productId = (int)$item->getProductId(); $rate = resolveCashbackRate($productId, $userId); $cashback = $item->getPrice() * $item->getQuantity() * ($rate / 100); $totalCashback += $cashback; // Фіксуємо по позиції для детальної історії CashbackTransactionTable::add([ 'USER_ID' => $userId, 'ORDER_ID' => $order->getId(), 'PRODUCT_ID' => $productId, 'AMOUNT' => $cashback, 'RATE' => $rate, 'TYPE' => 'accrual', ]); } CashbackBalanceTable::credit($userId, $totalCashback); }); Управління правилами з адмінки
Інтерфейс управління правилами будується на CAdminList + CAdminForm або React-компонентом у розділі /local/admin/. Щоб створити правило, виконайте:
- Перейдіть до розділу управління правилами.
- Виберіть тип правила (категорія, товар, група користувачів, промо).
- Вкажіть відсоток нарахування та пріоритет.
- Збережіть.
Мінімальний набір: список правил із фільтром за типом/активністю, форма редагування з деревом розділів каталогу для вибору категорії.
Етапи впровадження та типові помилки
Процес роботи та що входить
- Аналіз вимог до програми лояльності та існуючих знижок.
- Проектування таблиць і логіки пріоритетів.
- Реалізація правил категорій, груп та винятків.
- Тестування на тестовому контурі з реальними замовленнями.
- Деплой на продакшн та документування.
Повний склад налаштування правил кешбеку:
- Створення таблиць
local_cashback_rulesтаcashback_transactions. - Реалізація агента нарахування за статусом «Виконано».
- Інтерфейс управління правилами в адмінці.
- Інтеграція з групами користувачів та промо-акціями.
- Документація з конфігурації та навчання маркетологів.
- Досвід інженерів — 10+ років у Бітрікс-розробці, гарантія коректної реалізації.
Порівняння підходів та терміни
| Критерій | Ручний розрахунок | Автоматична система |
|---|---|---|
| Час обробки одного замовлення | 10–15 хв | 1–2 сек (у 450 разів швидше) |
| Помилки | до 30% | <1% |
| Масштабованість | Обмежена | Необмежена |
| Економія на місяць (1000 замовлень) | — | до 5000 грн |
Терміни:
| Задача | Термін |
|---|---|
| Базова логіка категорій | 3–5 днів |
| Групові бонуси та винятки | 3–5 днів |
| Нарахування та історія | 2–3 дні |
| Адмінка | 3–5 днів |
| Повний проект | 2–3 тижні |
Чому автоматизація кешбеку вигідна?
Автоматизація скорочує час обробки замовлень на 95% та виключає помилки при ручному розрахунку. Наприклад, інтернет-магазин з 1000 замовлень на місяць економить до 5000 грн. Бюджет програми лояльності стає прозорим — ви завжди знаєте, скільки нараховано та за якими правилами. Ми використовуємо досвід сертифікованих Бітрікс-розробників для гарантії якості. Наша команда — 5 років на ринку, 80+ завершених проектів.
Перевірка коректності нарахування кешбеку
Після впровадження проведіть тестування: створіть тестове замовлення з товарами різних категорій, перевірте суму нарахованого кешбеку в особистому кабінеті. Переконайтеся, що акційні товари оброблені правильно. Наша команда надає детальний звіт за результатами тестування.
Зв'яжіться з нами, щоб обговорити вашу програму лояльності. Замовте впровадження модуля кешбеку під ключ — ми адаптуємо рішення під ваш асортимент та групи користувачів.







