Показать сообщение отдельно
Старый 23.07.2004, 13:35   #18  
Кирен is offline
Кирен
Участник
 
22 / 10 (1) +
Регистрация: 03.02.2004
Адрес: Украина, г. Донецк
To Wamr:
Правильно, не рекомендовали.
Но зачем-то название метода Вы привели?
Но "вернёмся к нашим (вернее, к моим) баранам"...

В методе WMSShipmentReservation\reserveFullPallets вначале выполняется поиск палетт.
PHP код:
WMSPallet WMSPallet::findFullPallet(tmpWMSOrder.itemId
inventDimCritinventDimCritParmstandardPalletQty
tmpWMSOrder.qtytrue); 
При этом в метод передаётся параметр inventDimCrit.
Используется он так:
PHP код:
while select forceplaceholders forceSelectOrder 
forcenestedloop tableid from inventSum  
index hint ClosedItemDimIdx  
where inventSum
.itemId          == itemId       &&  
 
inventSum.availPhysical   != 
 
&&  !inventSum.closed  
#InventDimJoin(inventSum.inventDimId, inventDimItem, 
inventDimCriteriainventDimParmDimIdIdx… 
Таким образом, при поиске палетты проверяются запасы в наличии.
То есть осуществляется поиск на складах строк с аналитиками,
соответствующими 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())
        {
            
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++)
    {
        
conPeek(dimFieldsh);
        if (
this.(x))
        {
            
InventDim::dim2dimParm(x);
            if (!
inventDimParm.(y))
                
this.(x) = InventDim::emptyDimField(x);
        }
    }

Таким образом inventDimCriteria содержит заданные активные номенклатурные аналитики. Почему?
Характеристики найденной палетты (код палетты, ячейка и склад)
используются в классе inventUpd_Reservation
(в том самом, в котором «вылетает» ошибка).
Остальные аналитики берутся из InventDim,
где InventDimId берётся из WMSOrderTrans.
Можете вы объяснить мне почему сделано именно так?
И где ошибка? Моя (в логике) или не моя?