товар встречается два раза. Один раз в составе комплекта, второй раз как обычный товар. При увеличении количества этого товара в резерв улетает удвоенное количество. Сталкивался кто-то с таким?
Если количество не менять или менять в меньшую сторону, то работает нормально. Если не встречается два раза, то тоже не глючит.
Убрал $basket->refresh(); Проблема ушла. А почему? Я хочу скидки и цены другие видеть после изменения количества...
https://t.me/bitrixfordevelopers/489496 На событии после $basket->refresh происходит попытка снять с резервов отгрузки и зарезервировать снова. При отмене резервирования в ItemsPool попадает позиция отгрузки этого товара. При сохранении заказа происходит перебор позиций отгрузок ItemsPool для создания правил для резервирования и там количество для резервирования извлекается по productId. Получается, что правило для резервирования создается по позиции, которая попала при отмене резервирования, а количество для этого правила берется из PoolQuantity, которое там лежит для другой позиции отгрузки. Получаем два правила на резервирование и двойное резервирование. Пока что отказался от $basket->refresh(), а refresh для новой позиции делаю до указания для нее количества. Оно неправильно, но в данном случае баг на баг дает нужный результат 😈 правило на резервирование при сохранении заказа создается одно, для позиции отгрузки товара из комплекта, хотя по факту меняется количество у другого товара.
Воспроизводится кодом или в штатных компонентах/админской форме заказа?
В админской форме не воспроизводится. Но там и refresh не наблюдается по логам. Штатные компоненты не используются, код самописный.
https://pastebin.com/V4D1568e Сделал код, на котором баг воспроизводится.
Обсуждают сегодня