@devjob

Почему у товара нулевая цена?

Каталог с комплектами и торговыми предложениями.
Если в корзину добавить комплект и потом торговое предложение, то цена соответствующая - 100р.
Если убрать комплект из корзины, то цена добавленного раннее торгового предложения - 0р.

Что я делал:
1. Отключил все правила работы с корзиной.
2. Отключил все обработчики событий (OnSaleBasketBeforeSaved, OnSaleBasketItemRefreshDataHandler).
3. Очистил кеш на всем сайте.
Все CustomProviderClass убрал.
Товар добавляется в корзину вызовом

Loader::includeModule('catalog');
        Loader::includeModule('sale');

		$price = self::getPriceElement($id, 1);  // возвращает цену, данные берутся из каталога поле BASE_PRICE.

        $arFields = [
            'PRODUCT_ID' => (int)$id,
            'QUANTITY' => (int)$quantity,
            'PRICE' => $price,
            'CURRENCY' => 'RUB',
        ];

        if ($sort > 0)
        {
            $arFields['SORT'] = $sort;
        }

        $obBasket = self::getBasketForCurrentFUser();
		$strategy = \Bitrix\Sale\Basket\RefreshFactory::create(\Bitrix\Sale\Basket\RefreshFactory::TYPE_FULL);
        $items = $obBasket->getBasketItems();

        $bHasItem = false;
        $thisItem = false;
        $itemId = false;

        foreach ($items as $item)
        {
            if ($item->getField('PRODUCT_ID') !== $id) continue;

            $thisItem = $item;
            $bHasItem = true;
            $itemId = $item->getId();
            break;
        }

        $isSuccess = false;
        $rs = false;

        if (! $bHasItem)
        {
            $rs = \Bitrix\Catalog\Product\Basket::addProductToBasketWithPermissions($obBasket, $arFields, ['SITE_ID' => 's3'], false);
        }
        else
        {
            if ($quantity > 0)
            {
                $thisItem->setField('QUANTITY', $quantity);
            }
            else
            {
                $rsDelete = $thisItem->delete();

                $obBasket->refresh($strategy);
                $rsSaved = $obBasket->save();

                return $rsSaved->isSuccess();
            }
        }

        if (!$bHasItem && !$rs->isSuccess())
        {
            self::log($rs->getErrorMessages(), 'logs/erronbasketadd.log');
            return false;
        }

		$obBasket->refresh($strategy);
        $saved = $obBasket->save();


В init.php есть только подключение файлов handlers.php и functions.php и ниже - регистрация кастомных классов.

Почему так происходит?
  • Вопрос задан
  • 389 просмотров
Пригласить эксперта
Ответы на вопрос 1
@devjob Автор вопроса
это тело функции.
Разумеется, которая вызывается при изменении позиций в корзине (удалить, добавить, обновить кол-во) и т.д.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы