Форум программистов, компьютерный форум, киберфорум
1С Битрикс
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/12: Рейтинг темы: голосов - 12, средняя оценка - 4.58
386 / 370 / 93
Регистрация: 15.02.2012
Сообщений: 1,516
1

Товары корзины со скидками

28.01.2020, 16:45. Показов 2186. Ответов 5
Метки нет (Все метки)

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

товар добавляется по старинке Add2BasketByProductID()

ниже получаем корзину и возвращаем json
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
$basket = \Bitrix\Sale\Basket::loadItemsForFUser(\CSaleBasket::GetBasketUserID(), "s1")->getOrderableItems();
    $discounts = \Bitrix\Sale\Discount::buildFromBasket($basket, new \Bitrix\Sale\Discount\Context\Fuser($basket->getFUserId(true)));
    $discounts->calculate();
    $arBasketDiscounts = $discounts->getApplyResult(true);
    //$arBasketDiscounts = $discounts->getApplyDiscounts();
    $sum = 0;
    // массив объектов \Bitrix\Sale\BasketItem
    $basketItems = $basket->getBasketItems();
 
    foreach ($basketItems  as $basketItem ) {
..
 
echo json_encode($json);
скидка простейшая 1000 рублей на корзину при сумме от 5000
закидываем к примеру 2 товара на сумму 11000

когда запрос идет через ajax, то в ответ я получаю товары без скидки, итоговая сумма 11000
но если я просто перейду на страницу /ajax/basket_add.php, то получаю итог 10000

никак не могу понять в чем причина.
такая же проблема с событием OnSaleBasketSaved - тоже получаю корзину без скидки
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2020, 16:45
Ответы с готовыми решениями:

Черная пятница - распродажи со скидками
В Америке есть такая штука как "Черная пятница", как раз сегодня, распродажи с высокими скидками,...

УТП. В чем разница между скидками номенклатуры?
Добрый день!:) Не могу разобратьсяс логикой УТП... Есть регистр ЦеныНоменклатуры, и там есть...

связанное со скидками и продажами кто можеть в экселе (ECXEL)
При условии, если определить скидку в зависимости от сумм продаж, и клиента(отличаюшего по условным...

Уценить на 20% все товары, которые дороже заданной цены; вывести товары в порядке возрастания розничной цены
Ввести 5 структур типа "Товары на складе" с полями: название товара; закупочная цена; товарная...

__________________

Записывайтесь на профессиональные курсы 1C-разработчиков
5
1230 / 864 / 184
Регистрация: 16.03.2008
Сообщений: 4,108
Записей в блоге: 1
28.01.2020, 17:29 2
А после такого добавления как выглядит ситуация в штатной корзине?

я как то делал свою "схему скидки". При этом использовал функционал скидки не совсем валидным способом с точки зрения системы (особенности ТЗ). (как раз на стадии "добавления") При этом
$item->getDiscountPrice() показывал не верную информацию (не помню уже точно какую).
Т.е. скидку приходилось определять как $item->getBasePrice() - $item->getPrice()
0
386 / 370 / 93
Регистрация: 15.02.2012
Сообщений: 1,516
29.01.2020, 09:30  [ТС] 3
Цитата Сообщение от voral Посмотреть сообщение
А после такого добавления как выглядит ситуация в штатной корзине?
В корзине все ок, все отображается верно.

даже добавлял блок корзины, чтобы подмену сделать
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ob_start();
        $APPLICATION->IncludeComponent("bitrix:sale.basket.basket", "basket", Array(
                "OFFERS_PROPS" => array(""),
                "PATH_TO_ORDER" => "/checkout/",
                "HIDE_COUPON" => "N",
                "COLUMNS_LIST" => Array("NAME", "PRICE", "TYPE", "QUANTITY", "DELETE", "DELAY", "WEIGHT", "DISCOUNT"),
                "PRICE_VAT_SHOW_VALUE" => "Y",
                "COUNT_DISCOUNT_4_ALL_QUANTITY" => "N",
                "USE_PREPAYMENT" => "N",
                "QUANTITY_FLOAT" => "N",
                "SET_TITLE" => "Y",
                "ACTION_VARIABLE" => "action",
                "CACHE_TYPE"=>"N",
                "CACHE_TIME" => "0"
            )
        );
        $json['BIG_CART'] = ob_get_clean();
тут возвращает все нормально, вместе со скидкой

Если посмотреть $arBasketDiscounts, то вижу что он видит что есть скидка, и говорит что она применена
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
Array
(
    [BASKET_ROUND] => Array
        (
            [2074986] => Array
                (
                    [APPLY] => Y
                    [ROUND_RULE] => Array
                        (
                            [PRICE] => 0.0000
                            [ROUND_TYPE] => 1
                            [ROUND_PRECISION] => 1.0000
                            [CATALOG_GROUP_ID] => 1
                        )
 
                )
 
        )
 
    [DISCOUNT_LIST] => Array
        (
            [392] => Array
                (
                    [ID] => 392
                    [NAME] => Сделай заказ на 3000 рублей и получи скидку 500 рублей.
                    [MODULE_ID] => sale
                    [DISCOUNT_ID] => 392
                    [USE_COUPONS] => N
                    [ACTIONS_DESCR] => Array
                        (
                            [BASKET] => скидка 500 на общую сумму группы товаров
                        )
 
                    [ACTIONS_DESCR_DATA] => Array
                        (
                            [BASKET] => Array
                                (
                                    [0] => Array
                                        (
                                            [TYPE] => 2
                                            [VALUE] => 500
                                            [VALUE_TYPE] => S
                                            [VALUE_ACTION] => D
                                            [VALUE_UNIT] => RUB
                                        )
 
                                )
 
                        )
 
                    [APPLY] => Y
                    [EDIT_PAGE_URL] => /bitrix/admin/sale_discount_edit.php?lang=ru&ID=254
                )
 
        )
 
    [COUPON_LIST] => Array
        (
        )
 
    [RESULT] => Array
        (
            [BASKET] => Array
                (
                    [2074986] => Array
                        (
                            [0] => Array
                                (
                                    [DISCOUNT_ID] => 392
                                    [COUPON_ID] => 
                                    [APPLY] => Y
                                    [DESCR] => Array
                                        (
                                            [0] => скидка 500 на общую сумму группы товаров
                                        )
 
                                )
 
                        )
 
                )
 
            [DELIVERY] => Array
                (
                )
 
        )
 
)

но нет блока что она пересчитана
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[PRICES] => Array
        (
            [BASKET] => Array
                (
                    [2074986] => Array
                        (
                            [BASE_PRICE] => 1799.0000
                            [PRICE] => 1579.4
                            [DISCOUNT] => 219.6
                        )
 
                    [2074988] => Array
                        (
                            [BASE_PRICE] => 249.0000
                            [PRICE] => 218.6
                            [DISCOUNT] => 30.4
                        )
 
                )
 
            [DELIVERY] => Array
                (
                    [BASE_PRICE] => 
                    [PRICE] => 0
                    [DISCOUNT] => 0
                )
 
        )

этот блок появляется, только если я в браузере перейду на эту страницу
такое ощущение что не хватает какой-то глобальной переменной
0
1230 / 864 / 184
Регистрация: 16.03.2008
Сообщений: 4,108
Записей в блоге: 1
29.01.2020, 11:10 4
Почему бы тогда ответ не сформировать компонентом корзины? Подключите компонент,в шаблоне выдайте json....
0
386 / 370 / 93
Регистрация: 15.02.2012
Сообщений: 1,516
29.01.2020, 12:04  [ТС] 5
можно было бы пойти таким путем, но хотелось бы просто получить данные и понять причину(мне нужно и для админки).
так как при использовании события OnSaleBasketSaved наблюдаю такую же картину - я получаю корзину без скидок.
0
1230 / 864 / 184
Регистрация: 16.03.2008
Сообщений: 4,108
Записей в блоге: 1
29.01.2020, 12:07 6
я могу ошибаться, вроде видел в коде нечто типа DiscountEnable... . Или типа того, просто по коду компонента корзины вроде тогда "бродил".
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2020, 12:07

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

В динамическом списке номенклатуры при открытии группы видеть товары этой группы и товары всех вложенных групп
Доброго времени суток! Начинаю изучать 1с и возникают вопросы по работе. Возможно ли вообще в...

Вывести все товары из модуля "Рекомендованные товары" (Featured)
Добрый день. Очень странная вещь. Бестселлеры, новинки, акции и тд - есть страницы вывода всех...

Определить какие товары продаются в каждом магазине; какие товары продают только в одном магазине
Помогите решить ребус! 1. В трех магазинах продают некоторые виды товаров из имеющегося списка....

Настройка корзины
Здравствуйте. Прошу помощи в одном вопросе. Препод сказал "Распиши настройку корзины так, чтобы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.