Как реализовать отображение персональных цен на товары для клиентов, не перебирая всю CMS
Как сделали:
Чтоб добиться цели по отображению на сайте цен нужно было решить следующие задачи:
- передавать как-то данные типовых и индивидуальных соглашений.
- сделать так, чтобы это корректно работало в зависимости от юр.лица на стороне сайта в самом каталоге, а также при оформлении заказа.
По-началу звучит страшно и непонятно, однако вариант обхода, который мы сейчас рассматриваем, оказался, с логической точки зрения, довольно простым, стоит только разобраться чуть подробнее в понятиях:
Как было описано выше, у одного контрагента может быть как типовое, так и индивидуальное соглашение.
Типовое по своей сути определяет тип цен, по которым в целом работает контрагент по всем направлениям.
Индивидуальное - определяет на какую категорию товаров или отдельный список товаров действуют индивидуальные цены и для какого контрагента.
и понятное дело, что если есть индивидуальное соглашение - оно в приоритете.
Задаемся вопросами:
Как мы можем определять тип цен в битриксе? - там есть функционал "тип цен", им и будем определять.
Как мы можем определять контрагента, к которому тип цен привязан? - по ИНН, ведь это уникальный идентификатор. Как мы можем определять товар, на который действует индивидуальная цена? - по коду/артикулу этого товара.
Ок, хорошо, а как это все увязать с сайтом? как говориться, следите за руками :)
Типы цен с их значениями для товаров передаем вместе с товарами - таким образом мы имеем все нужные типы цен на сайте в стандартном функционале битрикса (как передаем - это вопрос того, как у вас реализована интеграция с 1С - это тема отдельного разговора).
Для идентификации какому ИНН - какой тип цен принадлежит передаем со стороны 1С справочник, который содержит колонки: "ИНН", "ИД", "тип цен".
Для персональных цен передаем второй справочник, который содержит колонки "ИНН", "код/артикул товара", "значение цены".
В публичной части сайта делаем “выбиралку”, которой пользователь выбирает для какого его контрагента отображать цены (помним, что у одного пользователя их может быть много).
Что такое справочники в Битриксе? - все просто, это Highload-блоки.
Как передавать? - даже с помощью стандартного протокола передачи справочников, который уже есть в битриксе из коробки.
Таким образом, мы знаем для какого ИНН отображать цены и откуда их брать:
При загрузке страницы проверяем справочники по ИНН, если есть индивидуальные цены - показываем из справочника индивидуальных цен, если нет - смотрим справочник типов цен и определяем по какому типу цены выводить цену.
Чтобы это все корректно работало на стороне сайта, пользуемся волшебным событием OnGetOptimalPrice
Profit :)
Само собой, данный метод обхода не уникален, и имеет ряд определенных ограничений, который стоит учитывать и, с которым нужно будет мириться
Из ограничений, можно отметить:
- Производительность.Чем больше данных будет в справочнике, тем “тяжелее” на выходе будет работать;
- Штатная фильтрация и сортировка по цене в каталоге учитывать персональные цены не будет (или Вам нужно будет сделать свои кастомные компоненты, которые не факт, что будут работать приемлемо);
- Персональные цены не будут учитываться модулем маркетинга Битрикса (т.е. скидки сделать через него не получится).
Однако, с одной стороны, в каждом решении есть плюсы и минусы, с другой - в нашей случае, эти ограничения были приемлемы, поэтому решение подошло!
Если клиент доволен -то норм
Интересное решение задачи, я в своё время делал по-другому. Странно, что еще кто-то использует такую старую версию 1С...
Да, такие клиенты еще остались, у кого 1С сильно кастомизирована.
Не проще ли было обновить 1С и не изобретать велосипед?
К сожалению нет, клиент не хочет в ближайшее время обновлять 1С.
Только с битриксом такое работает?
В теории не только, но мы специализируемся на Битрикс.