Персональные цены и скидки в интернет-магазине на Битрикс

Откуда берутся персональные цены и зачем они нужны

Ваш сайт работает на 1С-Битрикс? Каждому клиенту вы даёте собственную скидку или назначаете персональную цену в Битрикс на товар? Со временем в вашей 1С сложилась непростая логика ценообразования и формирования скидок? А может быть скидки должны работать только при нарастающей луне? С такими вводными к нам обращается добрая половина клиентов.

Что такое персональные скидки в интернет-магазине

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

Подружить цены и скидки в 1С с сайтом на Битрикс — задача, за которую возьмётся не каждый. Мы умеем делать такое хитрое ценообразование. В статье мы провели обзор различных решений и делимся результатами.

Разберемся с понятиями

Чем отличается персональная цена от персональной скидки?

Персональные цены можно настроить для любого товара, для любого зарегистрированного пользователя. На сайте или в 1С указывается конечная цена товара для конкретного клиента. В каталоге выглядит так:

Обычная цена

У товара с персональной скидкой выводится:

  • зачеркнутая старая цена;

  • величина скидки;

  • новая цена.

Пример персональной цены со скидкой в Битрикс

Предостережение. Каталог. Фильтр. Сортировка.

Некоторые из рассматриваемых способов реализации персональных скидок и цен имеют ограничение — они не работают в стандартном каталоге. Вывод цен и скидок в каталоге — это отдельная задача, которую придется решить. Т.к. цена вычисляется на лету для каждого посетителя, выполнять сортировку и фильтрацию товаров по персональным ценам будет невозможно. Только по базовым ценам.

Еще нужно учитывать, что любой фильтр (даже умный) будет фильтровать товары только по цене (даже если вы её пересчитываете через GetOptimalPrice) без учёта скидок.

Данные о скидках должны где-то храниться

Для работы этого механизма сайт должен как-то получать цены и скидки. Можно использовать инфоблоки, справочники (highload блоки), запрашивать данные через REST API или SOAP. Удобнее всего использовать справочник. Структура справочника такая:

Для персональных скидок:

ID товара

ID пользователя или группы

Скидка, %

55 (Футболка красная)

109 (Лебедев Антон)

10

57 (Футболка белая)

156 (Попова Елизавета)

15


Для персональных цен:

ID товара

ID пользователя или группы

Цена, руб

55 (Футболка красная)

109 (Лебедев Антон)

300

57 (Футболка белая)

156 (Попова Елизавета)

500


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

Обзор решений

Грамотных способов сделать персональные цены и скидки всего 5. И помещение логики формирования цены в шаблоны компонентов к ним не относится. Мы же хотим сохранить работоспособность правил работы корзины, НДС, наценок и т.д.

Правила работы с корзиной

Стандартные правила работы с корзиной позволяют создать персональную скидку на товары в дружелюбном интерфейсе:

Настройка действий и условий применения скидок в админке Битрикс

Недостатки:

  1. Количество правил=количество индивидуальных скидок. Если на сайте 10000 пользователей и 10000 товаров, то потребуется 100 000 000 правил

  2. Технология кеширования, призванная ускорить работу сайта, становится бесполезной, а сам кеш начинает занимать сотни платных гигабайт на сервере.

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

Создание нового правила

Вместо сотни правил мы создаем одно, которое будет рассчитывать скидки на товары, используя в качестве источника данных справочник. В настройках правила указывается справочник (highload-блок). Структура справочника персональных скидок описана выше.

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

Если вы хотите получить код кастомной скидки с руководством по настройке, поделитесь этой статьей в социальных сетях и заполните форму в конце страницы.

Провайдер цен

Провайдер цен — это стандартный механизм Битрикс, который позволяет переопределить стоимость товара в корзине. С его помощью можно реализовать персональную цену. В этом случае в нашем справочнике вместо величины скидки будет указана конечная цена товара.

Реализация.Фактически провайдер это класс-обработчик товаров корзины. Битрикс позволяет переопределить свой стандартный обработчик.

Событие OnGetOptimalPrice

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

Если вы хотите получить код провайдера цен и обработчика события OnGetOptimalPrice с руководством по настройке, поделитесь этой статьей в социальных сетях и заполните форму в конце страницы

Типы цен и группы пользователей

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

Редактирование типа цен

Надо четко разграничить права на типы цен, потому что пользователю будет показана минимальная из доступных ему типов цен.

Сравнение методов

Обобщим полученную информацию:



Подходит для


персональных цен

персональных скидок

Кастомизированное правило работы с корзиной

нет

да

Провайдер цен

да

частично (только с флагом CUSTOM_PRICE = Y)

Событие OnGetOptimalPrice

да

нет

N скидок, N групп пользователей

нет

да

N типов цен, N групп пользователей

да

нет

Где мы хотим видеть цены на товары:

  • каталог — список товаров (catalog.section) и детальная страница товара (catalog.element);
  • в заказе — корзина (sale.basket), оформление заказа (sale.order.ajax), персональный раздел пользователя (sale.personal.order);
  • в заказе в административной части.


Стандартно работает в


каталоге

заказе

админке

Кастомизированное правило работы с корзиной

нет

да

да

Провайдер цен

нет

да

да

Событие OnGetOptimalPrice

нет

да

да

N скидок, N групп пользователей

да

да

да

N типов цен, N групп пользователей

да

да

да

Очевидно, каталог — камень преткновения. Но это поправимо — цены товаров можно задать в шаблоне компонентов каталога. Да, логику формирования цены придется в некотором смысле повторить в шаблоне, но лучшей альтернативы нет.

Производительность

Хоть и существуют стандартные возможности сделать персональные цены и скидки, которые не требуют программирования, важно понимать насколько ресурсоемкими они окажутся и насколько станут тормозить сайт.

В качестве целевой функции расчета стоимости товара используем функцию CCatalogProduct::GetOptimalPrice(). Она определяет цену товара с учетом различных типов цен и правил работы с корзиной.

Мы замерили время работы функции при различном количестве типов цен в системе:

Время работы функции GetOptimalPrice

На основе этих данных можно сказать, что при количестве типов цен равном 100, цена 1 товара для 1 пользователя будет вычисляться около 0.7 секунды. То есть на загрузку страницы раздела каталога с 10 товарами уйдет более 7 секунд — слишком долго для сайта (при оптимальном времени загрузки страницы — 2 секунды).

Таким образом, реализовывать персональные цены с помощью типов цен — допустимо. Но при количестве типов цен не более 20-30. В настройках каталога мы выбираем все имеющиеся типы цен.

Это ограничение можно обойти если предварительно в настройках каталога отфильтровывать типы цен — оставлять только доступные текущему пользователю. Получают их запросом к API Битрикс.

Также мы сравнили скорость расчета товаров в корзине со скидками: в одном случае скидки создавались с помощью стандартных правил работы с корзиной (1 персональная скидка = 1 правило), а в другом — с помощью кастомизированного правила работы с корзиной на основе справочника (на все скидки 1 правило).

Динамика изменения времени расчета стоимости товаров

Расчет скидки на основе справочника работает на 30 % быстрее, чем стандартные правила работы с корзиной. Хотя количество правил почти не влияет на время расчета стоимости товаров в корзине, создавать их придется вручную.

Резюме

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

  • что требуется: цены или скидки;

  • ожидаемое количество цен/скидок.

Короткая рекомендация, какие из инструментов в каком случае использовать:

  • для персональных цен при небольшом количестве — типы цен и группы пользователей. В остальных случаях — провайдер цен либо событие OnGetOptimalPrice;

  • для персональных скидок — кастомизированные правила работы с корзиной, если скидка не фиксированная.

Алгоритм выбора способа:

Алгоритм выбора способа установки Скидок и Цен

Вам может быть интересно: Программа лояльности для интернет-магазина на Битриксе

Сложная разработка на 1С-Битрикс.

Внедрение личного кабинета на сайт.

Настройка интеграции с 1С.

Продвижение для B2B.

Оцените статью
13.02.2019
Понравилась статья?
Поделитесь ссылкой с друзьями и коллегами!

Статьи по теме

Выжимаем максимум скорости из PHPКогда дело доходит до запуска PHP-приложений, выбор подходящего веб-сервера критически важен. Цель статьи — помочь в выборе оптимального решения для своих проек...
Организация поиска на сайте: выбираем между поиском Битрикса, Sphinx и ElasticsearchВ статье разбираем популярные поисковые движки, чтобы выбрать лучший под задачи конкретного проекта. Даем советы по индексации каталога и построении «умного» фи...
Доработка системы LMS KnomaryMust have для бизнеса, где главный актив это люди, — стратегия обучения и развития персонала. Рассказываем как помогли доработать LMS-систему для компании ЕВРАЗ...
«Как раньше» больше не работает — B2B-система продаж сейчасВ этой статье хотим поговорить с чем сейчас сталкивается оптовый бизнес (множеством вызовов и изменений, которые требуют адаптации, а также оптимизации процессо...
Интеграция B2B-платформы на Битрикс с системой авторизации KeycloakВ период бурного роста компании менеджмент учетных записей сотрудников и клиентов может стать проблемой. Решение — интеграция с брокером авторизаций Keycloak ил...
Разработка календаря бронирования для сайта на Битрикс авиационного учебного центраЧтобы пилоты авиакомпаний могли бронировать время своих тренировок в учебном центре, мы разработали для них удобный модуль бронирования времени. Рассказываем по...
Мы работаем по одному из двух форматов:
  • аренда команды (от 2 человек, не менее 3 месяцев);
  • итерации с фиксированной ценой (1-3 месяца длительностью).
ИНТЕРВОЛГА предоставляет:
  • регулярные онлайн-планерки с заказчиком;
  • квалифицированных специалистов;
  • организованную команду (находятся в одном помещении, что упрощает решение рабочих вопросов);
  • полную прозрачность и регулярность отчетов о результатах.
Ключевые услуги:
  • нагруженный интернет-магазин;
  • личный кабинет;
  • оптовые продажи — B2B-платформа;
  • маркетплейс;
  • технический аудит сайта;
  • Битрикс24 — корпоративные HR-порталы;
  • Битрикс24 — построение CRM-системы;
  • Битрикс24 — личные кабинеты сотрудников;
  • Битрикс24 — аудит портала;
  • 1С — интеграция с другими системами;
  • 1С — доработка системы;
  • маркетинг — комплексное интернет-продвижение;
  • маркетинг — продвижение для B2B.
Хотите получать лучшие статьи от INTERVOLGA раз в месяц?
Подпишитесь на рассылку — спамить не будем