@photosho

Как программно уменьшить количество товара в корзине?

Как программно уменьшить количество товара в корзине? Не дает уменьшить из-за привязки товара к отгрузкам. Пользуюсь методом "CSaleBasket::Update".
  • Вопрос задан
  • 2061 просмотр
Решения вопроса 1
AlexeyGfi
@AlexeyGfi
YouTube >>> Битриксоид из Колхоза
Алексей Емельянов:
Скорее всего нужно сначала удалить документ отгрузки.

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

Также нужно быть осторожным, поскольку «спрыгивают» применённые при создании подарки. Скидки не проверял.

Используйте D7.

Работающий код
(внутри — PHPDocs, без которых IDE не может сориентироваться в подсказках):
// Читаем заказ, читаем корзину
$order= \Bitrix\Sale\Order::load( 6924 );
$basket= $order->getBasket();
$basket_items= $basket->getBasketItems();

/**
 * @var $bi \Bitrix\Sale\BasketItem
 */
foreach ( $basket_items as $bi ) {
	$quantity_current= $bi->getField( 'QUANTITY' );
	
	//Приходит в формате "3.000"
	$quantity_current++;
	$quantity_current= $bi->setField( 'QUANTITY', $quantity_current );
	
	$save_result= $bi->save();
	if ( !$save_result->isSuccess() ) {
		ShowError( $save_result->getErrorMessages() );
		exit;
	}
}

(!) При изменении таким способом, накапливается и история изменений в сопроводительной информации к заказу.
В частности: изменение количества заказа, стоимости заказа, изменений в подарках.
Также в отгрузках корректно срабатывает счётчик требуемой до-отгрузки.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
babarun
@babarun Куратор тега 1С-Битрикс
Безумный план моих идей в руках больных людей
Не дает уменьшить из-за привязки товара к отгрузкам
- покажите точную формулировку ошибки, которую возвращает api.

А корзина случайно не привязана уже к заказу? Скорее всего нужно сначала удалить документ отгрузки.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы