2012-01-27 8 views
5

Mam metodę dla pola wyświetlania, które wykonuje następujące czynności;Wyszukiwanie całkowitego dostępnego i dostępnego fizycznego elementu/magazynu

return InventSum::find(_salesLine.ItemId, InventDim::_salesLine.InventDimId).AvailPhysical(); 

To daje mi dostępną fizycznie dostępną stronę linii/magazyn/lokalizację.

Potrzebuję zobaczyć całość dostępną tylko dla witryny/magazynu. Myślę, że muszę przeszukać inventDim według Item/Warehouse, aby uzyskać mój wynalazek, ale nie mogę znaleźć metody, więc jestem podejrzany, że jest to niepoprawne.

Czy ktoś może pomóc?

Odpowiedz

4

Mam roztwór roboczy ...

InventDimParm  invDimParm; 
InventDim   warehouseInvDim; 
InventDim   salesLineInventDim; 
; 

salesLineInventDim = _salesLine.inventDim(); 

warehouseInvDim.InventSiteId = salesLineInventDim.InventSiteId; 
warehouseInvDim.InventLocationId = salesLineInventDim.InventLocationId; 

warehouseInvDim = InventDim::findOrCreate(warehouseInvDim); 
invDimParm.initFromInventDim(InventDim::find(warehouseInvDim.inventDimId)); 

return InventSum::findSum(_salesLine.ItemId,warehouseInvDim,invDimParm).availOrdered(); 

Wiem, że to dla availOrdered(), ale to działa dokładnie tak samo dla availPhysical()

0

Po prostu ustawiasz wartości inventDim w taki sposób, w jaki chcesz je wyszukać, a następnie wykonaj InventDim :: FindOrCreate, aby sprawdzić, czy wymiar zasobów reklamowych już istnieje, czy musi zostać utworzony, a nowa sekwencja liczb będzie strawiony. Jest to używane w taki sposób, że tabela InventDim nie przechowuje każdej możliwej kombinacji wymiarów. Również dlatego, że jeśli masz produkty zserializowane, nie jest możliwe, aby tabela przechowywała wszystkie kombinacje, więc przechowuje tylko te, których potrzebuje.

InventDim inventDim; 
SalesLine _salesLine; 
; 

inventDim.InventSiteId  = 'mySite'; 
inventDim.InventLocationId = 'myWarehouse'; 
inventDim = InventDim::findOrCreate(inventDim); 

return InventSum::find(_salesLine.ItemId, inventDim.inventDimId).AvailPhysical(); 
+0

Wątpię, czy zadziała, jeśli występują inne wymiary (np. Numer partii). Sumy zapasów są przechowywane w określonych wymiarach. –

+0

Zrobiłem to z czymś bardzo podobnym, przyjrzę się w poniedziałek (z powrotem w biurze) i dam ci znać. Mam wrażenie, że to jest to samo co 1 linia – AnthonyBlake

+0

Zgadzam się z Janem. Nawet nie myślałem o tym pytaniu, próbowałem po prostu pokazać, jak znaleźć/stworzyć wymyśloną wersję. Prawdopodobnie powinien był spróbować wymyślić prawidłowy sposób uzyskania ilości. –

2

Powinieneś używać klasy InventOnhand.

Podsumowuje wartości wymyślone w oparciu o kryteria takie jak identyfikator towaru i wymiary zapasu.

Istnieje wiele zastosowań w AX, przeszukaj węzeł klasy.

2

Poniższa praca znajdzie wszystkie linie sprzedaży z Open Order status, który ma dostępną ilość fizyczną pod ręką, pasującą do wszystkich wymiarów określonych w liniach sprzedaży z wyjątkiem lokalizacji:

static void FindOpenSalesLineAvailPhys(Args _args) 
{ 
    SalesLine salesline; 
    InventDim inventDim; 
    InventDimParm inventDimParm; 
    InventOnHand inventOnHand; 
    ; 

    while select salesLine where salesLine.SalesStatus == SalesStatus::Backorder 
    { 
     inventDim = salesLine.inventDim(); 
     inventDimParm.initFromInventDim(inventDim); 
     inventDimParm.WMSLocationIdFlag = NoYes::No; 
     inventOnHand = InventOnHand::newItemDim(salesLine.ItemId, inventDim, inventDimParm); 
     if (inventOnHand.availPhysical()) 
     { 
      info(strfmt("Sales Order %1 Line %2 Item Id %3 Available Physical (ignoring Location) %4", 
       salesLine.salesId, salesLine.LineNum, salesLine.ItemId, inventOnHand.availPhysical())); 
     } 
    } 
} 
+0

to jest dobre, ale nie istotne! – AnthonyBlake

+0

Powiedziałeś "Potrzebuję zobaczyć całkowitą dostępną tylko dla witryny/magazynu" Powyższy kod daje dokładnie to, jak to nie ma znaczenia? –

Powiązane problemy