Настройка автоматического переключения цен по способу оплаты в Битрикс24

В стандартной конфигурации интернет-магазина на Битрикс24 существует задача: установить разные цены для наличного и безналичного расчета, при этом цены не являются простой наценкой из-за особенностей синхронизации с 1С и правил округления.

Суть проблемы

В магазине действует два типа цен:

  • Цена для оплаты наличными.
  • Цена для оплаты банковской картой.
Простая настройка через наценку в 6% и округление не работает корректно. Например:
  • Наличная цена: 2499 руб.
  • Ожидаемая безналичная цена (2499 + 6%): 2649 руб.
  • Фактическая цена после округления до сотен и вычета 1 рубля: 2699 руб.
Это связано с алгоритмами, заложенными в обмене данными с системой 1С.

Ограничение стандартного функционала

По умолчанию в Битрикс24 типы цен можно привязать только к группам пользователей. Однако в данной ситуации необходимо менять цену динамически, в зависимости от выбранного способа оплаты в корзине, для всех покупателей без исключения.

Решение задачи

Чтобы цена при выборе безналичного расчета автоматически бралась из соответствующего типа цен, необходимо выйти за рамки стандартных настроек. Реализация включает следующие шаги:

  1. Создание двух типов цен: Например, "Розница_Нал" и "Розница_Безнал". Все товарам должны быть присвоены оба значения.
  2. Разработка обработчика события: Необходимо написать обработчик (можно в виде модуля или в init.php), который будет отслеживать изменение способа оплаты в корзине.
  3. Логика переключения: При смене способа оплаты на "Безналичный" система должна программно подменить текущий тип цен пользователя на "Розница_Безнал". При возврате к "Наличным" - восстанавливать тип цен "Розница_Нал".
  4. Обновление корзины: После смены типа цен необходимо программно пересчитать стоимость позиций в корзине и обновить её отображение для пользователя.
Таким образом, цена будет меняться динамически, основываясь на заведенных в каталоге значениях для каждого типа цен, что обеспечит корректный учет и необходимое округление.