2012-01-27 26 views
5

Tengo un método para un campo de visualización que hace lo siguiente;Encontrar el total físico disponible y disponible para un artículo/almacén

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

Esto me proporciona la disponibilidad física disponible para el sitio/almacén/ubicación de la línea.

Necesito ver el total disponible solo para el sitio/almacén. Creo que necesito buscar inventDim por artículo/almacén para obtener mi inventdimid, pero no puedo encontrar el método, así que sospecho que esto es incorrecto.

¿Alguien puede ayudar?

Respuesta

4

Mi solución de trabajo ...

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(); 

Sé que esto es para availOrdered() pero funciona exactamente igual para availPhysical()

0

Básicamente establece los valores de inventDim de la forma en que desea buscarlos, y luego realiza una InventDim :: FindOrCreate para ver si la dimensión de inventario ya existe o si necesita crearse y se creará una nueva secuencia numérica consumado. Esto se usa para que la tabla InventDim no almacene todas las posibles combinaciones de dimensiones. También porque si tiene productos serializados, no es factible que la mesa almacene todas las combinaciones, por lo que solo almacena los que necesita.

InventDim inventDim; 
SalesLine _salesLine; 
; 

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

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

Dudo que funcione si hay otras dimensiones involucradas (como número de lote). Inventar sumas se almacenan en las dimensiones específicas. –

+0

Lo hice con algo muy similar, echaré un vistazo el lunes (en la oficina) y te lo haré saber. Tengo la sensación de que es lo mismo que esto con 1 línea más – AnthonyBlake

+0

Estoy de acuerdo Jan. Ni siquiera pensé en la pregunta realmente, solo estaba tratando de mostrar cómo encontrar/crear un inventDim. Probablemente debería haber tratado de pensar en la forma correcta de obtener las cantidades. –

2

Debe utilizar la clase InventOnhand.

Suma los valores inventarios disponibles en función de criterios como la id del elemento y las dimensiones del inventario.

Hay muchos usos en AX, busque el nodo Clase.

2

El siguiente trabajo busca todas las líneas de venta con la Orden Abierta estado, que tienen una cantidad física disponible a mano que coincida con todas las dimensiones especificadas en las líneas de venta, excepto la ubicación:

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

¡esto es bueno, pero no relevante! – AnthonyBlake

+0

Usted dijo "Necesito ver el total disponible solo para el sitio/almacén" El código anterior le brinda exactamente eso, ¿cómo es esto irrelevante? –

Cuestiones relacionadas