To Wamr:
Правильно, не рекомендовали.
Но зачем-то название метода Вы привели?
Но "вернёмся к нашим (вернее, к моим) баранам"...
В методе WMSShipmentReservation\reserveFullPallets вначале выполняется поиск палетт.
PHP код:
WMSPallet = WMSPallet::findFullPallet(tmpWMSOrder.itemId,
inventDimCrit, inventDimCritParm, standardPalletQty,
tmpWMSOrder.qty, true);
При этом в метод передаётся параметр inventDimCrit.
Используется он так:
PHP код:
while select forceplaceholders forceSelectOrder
forcenestedloop tableid from inventSum
index hint ClosedItemDimIdx
where inventSum.itemId == itemId &&
inventSum.availPhysical != 0
&& !inventSum.closed
#InventDimJoin(inventSum.inventDimId, inventDimItem,
inventDimCriteria, inventDimParm, DimIdIdx) …
Таким образом, при поиске палетты проверяются запасы в наличии.
То есть осуществляется поиск на складах строк с аналитиками,
соответствующими inventDimCriteria. Что такое inventDimCriteria?
Смотрим метод WMSShipmentReservation\reserve, строка 15
PHP код:
tmpWMSOrder = WMSShipment.createTmpOrders(false);
Далее строку 27 метода WMSShipment.createTmpOrders()
PHP код:
inventDim = WMSOrderTrans.inventDimItemDimensions();
Это приводит к методу InventDimParm.initItemDimension()
PHP код:
void initItemDimension(InventDimGroupId _dimGroupId)
{
InventDimSearch _dimSearch = new InventDimSearch();
int y;
;
this.clear();
if (_dimSearch.first(_dimGroupId))
do
{
if (_dimSearch.dimActive() && _dimSearch.dimItemDimension())
{
y = InventDim::dim2dimParm(_dimSearch.dimFieldId());
this.(y) = NoYes::Yes;
}
} while (_dimSearch.next(_dimGroupId));
}
… и к методу InventDim.clearNotSelectedDim()
PHP код:
void clearNotSelectedDim(InventDimParm inventDimParm)
{
container dimFields = InventDim::dimFieldList();
int h,y,x;
for (h=1;h<=conLen(dimFields);h++)
{
x = conPeek(dimFields, h);
if (this.(x))
{
y = InventDim::dim2dimParm(x);
if (!inventDimParm.(y))
this.(x) = InventDim::emptyDimField(x);
}
}
}
Таким образом inventDimCriteria содержит заданные активные номенклатурные аналитики.
Почему?
Характеристики найденной палетты (код палетты, ячейка и склад)
используются в классе inventUpd_Reservation
(в том самом, в котором «вылетает» ошибка).
Остальные аналитики берутся из InventDim,
где InventDimId берётся из WMSOrderTrans.
Можете вы объяснить мне почему сделано именно так?
И где ошибка? Моя (в логике) или не моя?