Готового модуля «бонусная программа» в 1С-Битрикс: Управление сайтом нет — её собирают из штатных механизмов: внутреннего счёта покупателя, событий модуля sale и платёжной системы «Внутренний счёт». Разберём, как из этих кирпичей построить накопление и списание баллов, где данные хранятся и что нужно дописать кодом.
Что Битрикс даёт из коробки, а что придётся дописать
Важно сразу разделить ожидания. В редакциях «Малый бизнес» и «Бизнес» есть внутренний счёт покупателя, правила работы с корзиной (скидки), купоны и оплата «с внутреннего счёта». Это фундамент, но не готовая бонусная программа: логику «за покупку начислить X баллов, дать списать не больше Y% от заказа, сжечь через N дней» платформа сама не выполняет.
Поэтому типовая реализация — это связка из трёх частей:
- Хранилище баллов — внутренний счёт покупателя (модуль
sale); - Начисление — обработчики событий заказа, которые пополняют счёт;
- Списание — платёжная система «Внутренний счёт», которой покупатель гасит часть заказа.
Внутренний счёт как балльный баланс
Роль «кошелька с баллами» играет внутренний счёт: Магазин → Покупатели → Счета покупателей. Баланс хранится в таблице b_sale_user_account, а каждое движение — в b_sale_user_transact, что удобно для истории «начислено / списано».
Ключевое проектное решение — в какой валюте вести бонусы. Есть два подхода:
| Подход | Плюсы | Минусы |
|---|---|---|
| Бонусы = рубли на счёте | Просто, работает штатная оплата «с внутреннего счёта» | Смешиваются с реальными возвратами денег на счёт |
| Отдельная бонусная валюта | Чистое разделение денег и баллов, свой курс 1 балл = X ₽ | Нужна отдельная валюта в Магазин → Настройки → Валюты и доработка оплаты |
На практике чаще заводят отдельную бонусную валюту — это избавляет от путаницы, когда на одном счёте лежат и возвращённые деньги, и маркетинговые баллы.
Начисление баллов через события заказа
Баллы начисляют не в момент оформления, а когда заказ оплачен или завершён — иначе покупатель получит бонусы за отменённый заказ. Для этого подписываются на события модуля sale:
OnSaleOrderPaid— заказ отмечен оплаченным;OnSaleStatusOrderChange— заказ перешёл в статус «Выполнен» (когда бонус даётся только за фактически полученный товар);OnSaleOrderSaved— универсальная точка, но требует аккуратной проверки флагов, чтобы не начислить дважды.
Само пополнение счёта делает метод CSaleUserAccount::UpdateAccount($userId, $sum, $currency, $description, $orderId) (в D7 — операции над \Bitrix\Sale\Internals\UserAccountTable). Обработчик регистрируют в /local/php_interface/init.php.
ORDER_ID в истории транзакций, не начислялся ли бонус за этот заказ, — иначе один заказ пополнит счёт несколько раз.Списание: оплата заказа бонусами
Чтобы покупатель тратил накопленное, подключают платёжную систему с обработчиком «Внутренний счёт» (inner): Магазин → Настройки → Платёжные системы. При оформлении заказа она предлагает погасить сумму средствами со счёта, а Битрикс сам спишет их в транзакцию.
Голая штатная оплата списывает «сколько есть», поэтому маркетинговые ограничения добавляют кодом или правилами корзины:
- Порог списания — не более, например, 30% от суммы заказа оплатить баллами;
- Минимальный остаток заказа — нельзя закрыть бонусами весь заказ «в ноль»;
- Курс — сколько рублей стоит один балл, если используется отдельная бонусная валюта.
Ограничение «доля оплаты бонусами» удобно вешать на событие расчёта корзины или на кастомную платёжную систему, которая пересчитывает доступную к списанию сумму перед показом на странице оформления.
Правила корзины и группы как усилители программы
Бонусы редко работают в одиночку — их комбинируют с двумя другими штатными механизмами лояльности:
- Правила работы с корзиной (
Магазин → Настройки → Правила работы с корзиной) — скидки и подарки по условиям: сумма заказа, состав корзины, наличие купона. Именно здесь настраивают повышенный процент начисления по акции или скидку за баллы. - Группы покупателей — уровни программы (например, «Серебро», «Золото»), к которым привязывают персональные цены, размер скидки и ставку начисления бонусов.
Такой набор даёт гибкую механику: правило корзины считает скидку и купоны, группа определяет статус клиента, а обработчик события начисляет баллы по ставке, зависящей от группы. Логику «перевести клиента в следующую группу при достижении суммы покупок» также реализуют обработчиком на завершении заказа.
Сгорание баллов, история и антифрод
Живая программа лояльности требует правил жизненного цикла баллов, которых в штатном счёте нет. Их добавляют агентом Битрикс (Настройки → Настройки продукта → Агенты) или заданием на cron:
- Сгорание — периодический агент списывает баллы старше N дней; для этого при начислении в описание транзакции пишут дату и партию.
- Уведомления — письмо клиенту о скором сгорании или об успешном начислении через почтовые/SMS-события.
- Заморозка — начисленные баллы становятся доступны к списанию не сразу, а через «карантин» (например, после истечения срока возврата товара).
Вся история движений видна в транзакциях по счёту, что важно и для поддержки, и для разбора спорных ситуаций. Отдельно продумывают антифрод: списание бонусов при отмене или возврате оплаченного заказа, чтобы клиент не «обналичил» баллы через возврат.
Итог
Бонусная программа на 1С-Битрикс — это не одна кнопка, а сборка: внутренний счёт как хранилище баллов, события заказа для начисления, платёжная система «Внутренний счёт» для списания, а сверху — правила корзины, группы покупателей и агенты для сгорания и антифрода. Ключевые решения принимают на старте: валюта баллов, момент начисления, порог списания и правила отката при возврате.
Мы в B2Bsite проектируем такую механику под конкретный магазин, пишем обработчики начисления и списания, настраиваем сгорание и защиту от злоупотреблений, а затем сопровождаем программу, чтобы баллы не превращались в неконтролируемые расходы. Если нужна лояльность, которая реально удерживает клиентов и считается по вашим правилам, — поможем собрать её на штатной платформе без лишних модулей.
Частые вопросы
Есть ли в 1С-Битрикс готовый модуль бонусной программы?
В редакции «Управление сайтом» готового модуля нет. Программу собирают из внутреннего счёта покупателя, событий модуля sale и платёжной системы «Внутренний счёт», добавляя логику начисления и списания кодом.
Где хранится баланс бонусов покупателя?
Баллы удобно хранить на внутреннем счёте покупателя: баланс в таблице b_sale_user_account, а движения — в b_sale_user_transact. Управлять счетами можно в разделе Магазин → Покупатели → Счета покупателей.
В какой валюте вести бонусы?
Либо в рублях прямо на счёте, либо в отдельной бонусной валюте с курсом «1 балл = X рублей». Отдельную валюту выбирают чаще, чтобы не смешивать баллы с реальными возвратами денег на счёт.
В какой момент начислять баллы за заказ?
Не при оформлении, а после оплаты или выполнения заказа — по событиям OnSaleOrderPaid или OnSaleStatusOrderChange. Иначе клиент получит бонусы за заказ, который позже отменят.
Как ограничить оплату бонусами до, например, 30% заказа?
Штатная оплата «с внутреннего счёта» такого лимита не знает, поэтому порог списания добавляют кодом: пересчитывают доступную к списанию сумму на событии расчёта корзины или в кастомной платёжной системе.
Как настроить сгорание бонусов?
Сгорание реализуют агентом Битрикс или заданием cron, которое списывает баллы старше заданного срока. Для этого при начислении в транзакции фиксируют дату и партию баллов.
Как связать бонусы с уровнями лояльности?
Уровни делают на группах покупателей, привязывая к ним ставку начисления, персональные цены и скидки. Перевод клиента в следующую группу по сумме покупок настраивают обработчиком на завершении заказа.
Что делать с бонусами при возврате заказа?
Возврат должен зеркально откатывать движения: снимать начисленные за заказ баллы и возвращать списанные. Без этого антифрод-правила клиент может обналичить бонусы через отмену оплаченного заказа.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.