Почему не работают скидки для некоторых пользователей: ошибка провайдера товаров в корзине

12.10.2024 ≈ 1 минута. 16 показов

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

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

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

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

Путем долгих часов попыток выяснить, куда деваются скидки, почему они не применяются, поломав голову не раз, удалось выяснить, что проблема в том, что в корзине пользователя есть товары, которые были добавлены 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';


Обратно к списку