Алексей Емельянов:
Скорее всего нужно сначала удалить документ отгрузки.
При обновлении через админку, документы не помеха (остаются проведёнными, появляется уточнение о том, сколько отгружено
и сколько нужно до-отгрузить).
Также нужно быть осторожным, поскольку «спрыгивают» применённые при создании подарки. Скидки не проверял.
Используйте 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;
}
}
(!) При изменении таким способом, накапливается и история изменений в сопроводительной информации к заказу.
В частности:
изменение количества заказа, стоимости заказа, изменений в подарках.
Также в отгрузках корректно срабатывает счётчик требуемой до-отгрузки.