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.
Dejar un comentario
¿Quieres unirte a la conversación?Siéntete libre de contribuir!