Dentro del ámbito de AX 2009 existe una funcionalidad que permite el marcado de transacciones de inventario de un pedido de venta. Mediante esta función, se permite seleccionar que transacción de compra se utilizara para cubrir la salida de inventario de un pedido de venta. Esta función se realiza de forma manual desde el formulario de pedidos de venta, en la parte de líneas botón Stock->Marking, esta función muestra un formulario que las transacciones cuyas dimensiones y articulo coinciden con la línea de venta seleccionada, y permite marcar una determinada cantidad (si existe inventario de la misma).

Ocasionalmente me ha sido necesario automatizar este proceso, de forma que se puedan marcar pedidos completos sin necesidad de ejecutar el marcado línea a línea, o para realizar algún proceso masivo de reparación de pedidos. Para este fin he usado un código como el que posteo a continuación el cual me ha salvado en varias ocasiones

 

static void MNFMarkInventoryTransactions(Args _args)
{

InventTrans         fIssueTrans;

TmpInventTransMark  fTitm;

Map                 mapMarkNow;

container           con;

real                qty;

Map                 mapTmp;

MapIterator         it;

SalesLine           salesline;

;

While select salesline

Where salesline.SalesId == «XXXXXXXXX»

{

//Transaccion de origen (Venta)

fIssueTrans = InventTrans::findTransId(salesline.InventTransId);

//obtencion de transacciones susceptibles de ser marcadas

[con,qty]   = TmpInventTransMark::packTmpMark(fIssueTrans.ItemId,

fIssueTrans.inventDim(), fIssueTrans.InventTransId, fIssueTrans.Qty);

mapTmp = Map::create(con);

it = new MapIterator(mapTmp);

while ( it.more() )

{

fTitm = mapTmp.lookup(it.key());

//Aqui se pueden realizar cualquier clase de filtro para marcar la transaccion deseada

if (   )

{

fTitm.QtyMarkNow = salesline.SalesQty;

fTitm.QtyRemain -= fTitm.QtyMarkNow;

mapMarkNow = new Map(typeId2Type(typeid(recId)), Types::Record);

mapMarkNow.insert(fTitm.RecId,fTitm);

TmpInventTransMark::updateTmpMark(fIssueTrans.InventTransId,fIssueTrans.inventDim(),-5, mapMarkNow.pack());

break;

}

it.next();

}

}

}

 

Este job recorre las líneas del pedido seleccionado, y para cada una de ellas selecciona las transacciones de compra susceptibles de marcado permitiendo el marcado de cualquiera de ellas en base al filtro deseado (se puede optar por marcar directamente la primera de ellas). En mi caso particular, se uso para la reparación de pedidos de entrega directa cancelados erróneamente, aunque puede tener muchas otras utilidades.

Comparte este contenido:

0 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *