28.10.2015, 18:52 | #1 |
Участник
|
Резервирование зависает на нулевом количестве "Заказано"
Модуль розницы в AX 2012 подкинул очередной сюрприз: строки чеков, группируемые в один лот по ряду признаков, дали с учетом возвратов тем же днем нулевое количество, причем, что самое главное, проводка InventTrans по лоту при этом каким-то образом не удалилась. Т.е. на выходе получился InventTrans в статусе расхода "Заказано" и с количеством 0.
Самое интересное началось на попытке зарезервировать соотв. лот при ненулевых остатках на складе: резервирование зависло в бесконечном цикле. Происходит это в \Classes\InventUpd_Reservation\updateReserveMore: X++: while (doNext) { /* ... */ // <GEERU> if ( (countryRegion_RU && (inventSum.AvailOrdered + inventSum.OnOrder) != 0 && movement.checkDimInventOwnerId_RU(inventDim, false)) || (!countryRegion_RU && (loopReserveType == 0 || (inventSum.AvailOrdered + inventSum.OnOrder)))) // </GEERU> { if (doSelect) { if (inventDimParmIsAllYes && inventDimCriteria.InventDimId) { select firstonly forupdate inventTrans where inventTrans.InventTransOrigin == movement.inventTransOriginId() && inventTrans.TransChildType == movement.transChildType() && inventTrans.TransChildRefId == movement.transChildRefId() && inventTrans.StatusReceipt == StatusReceipt::None && inventTrans.StatusIssue == StatusIssue::OnOrder && inventTrans.InventDimId == inventDimCriteria.InventDimId; } else { select firstonly forupdate inventTrans where inventTrans.InventTransOrigin == movement.inventTransOriginId() && inventTrans.TransChildType == movement.transChildType() && inventTrans.TransChildRefId == movement.transChildRefId() && inventTrans.StatusReceipt == StatusReceipt::None && inventTrans.StatusIssue == StatusIssue::OnOrder; } } if (! inventTrans) { break; } addQty = inventTrans.Qty > addReserv ? inventTrans.Qty : addReserv; /* ... */ if (cwItem) { /* ... */ } else if (addQty <= reserveMax) { addQty = reserveMax; doNext = true; tmpReserved = 0; } else { doNext = false; } if (addQty < 0) { /* ... */ } else { doSelect = false; } if ((!cwItem && addReserv >= 0) || (cwItem && addReserv >= 0 && cwAddReserv >= 0)) { doNext = false; } else if (doNext && !pdsOverageQty) { doNext = setInventSum(false); tmpReserved = 0; } else { pdsOverageQty = 0; doNext = true; } } else { doNext = setInventSum(false); } }
В целом, я, конечно, понимаю, что проводки "Заказано" с нулевым количеством - это подстава, но, по-моему, зависание намертво при резервировании таких проводок - еще большая подстава |
|
|
За это сообщение автора поблагодарили: Logger (3), Товарищ ♂uatr (1). |
29.10.2015, 02:02 | #2 |
Участник
|
Судя по описанию, зависнуть может не только при резервировании но и при смене в другой статус. Но я не проверял.
|
|
Теги |
ax2009, ax2012, ошибка, резервирование |
|
|