Найти в Дзене

Не считаются скидки для некоторых пользователей

Как-то была проблема, плавающая, что для некоторых пользователей не считались скидки на товары, очень редкая. При заходе под этим же пользователем скидки отображались нормально. Такая ситуация повторялась изредка и не удавалось выяснить причину. Но тут на днях, таких заказов стало больше, люди жаловались. Проверка настроек скидок, пересечений, ограничений ни к чему не привела. Но появилось одно НО. При заходе под пользователем, который особщил об ошибке, скидки действительно не считались, добавляя этиж же товары под своим акканутом в режимеме инкогнито и без него - все считалось. Путем долгих часов попытке выяснить куда деваются скидки, почему они не применяются, поломав голову не раз, удалось выяснить что проблема в том, что в корзине пользователя есть товары, которые были добавлены 3 года назад. И есть свежие. И причина оказалось в разной работе провайдеров. Для старых товаров провадер был - CCatalogProductProvider а для новых \Bitrix\Catalog\Product\CatalogProvider Заменив

Как-то была проблема, плавающая, что для некоторых пользователей не считались скидки на товары, очень редкая. При заходе под этим же пользователем скидки отображались нормально.

Такая ситуация повторялась изредка и не удавалось выяснить причину.

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

Но появилось одно НО. При заходе под пользователем, который особщил об ошибке, скидки действительно не считались, добавляя этиж же товары под своим акканутом в режимеме инкогнито и без него - все считалось.

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

И причина оказалось в разной работе провайдеров. Для старых товаров провадер был - CCatalogProductProvider а для новых \Bitrix\Catalog\Product\CatalogProvider

Заменив принудительно в таблице название класса провайдера, все стало работать как положено.

Решение

Нужно всего-лишь выполнить в админке sql запрос, именно в таком виде, с двойными слешами здесь - /bitrix/admin/sql.php

update b_sale_basket
set PRODUCT_PROVIDER_CLASS = '\\Bitrix\\Catalog\\Product\\CatalogProvider'
where PRODUCT_PROVIDER_CLASS='CCatalogProductProvider';