HOWTO: AX – Expandir LMAT por código

AX nos deja expandir, o explotar, una línea de lista de materiales (L.MAT, o BOM en inglés) de manera que podamos manejar sus elementos al mismo nivel que el artículo L.MAT. La funcionalidad se llama Expandir L.MAT y la podemos ver, por ejemplo, en las líneas de un pedido:

Explode BOM | Expandir L.MAT

Esta función nos presenta un formulario para elegir las líneas que queremos “Explotar” fuera de la lista de materiales para su tratamiento:

Explode BOM | Expandir L.MAT

El código que este formulario ejecuta para realizar la expansión de la L.MAT se encuentra, en el caso de líneas de pedido de venta, en la tabla SalesLine) concretamente en el método: SalesLine.expandBOM(), por tanto para simular esta funcionalidad en X++, el mínimo código que podemos utilizar es el siguiente:

static void expandirLineaLMAT(Args _args)
{
   TmpFrmVirtual       tmpFrmVirtual;
                                         // Línea de la LMAT que se quiere expandir
   BOM                 tmpBOM          = BOM::findRecId(5637146401, false);    
                                         // Línea de venta desde la que expandir
   SalesLine           auxSalesLine    = SalesLine::find('00000003_050', 3, true);
   ;

   // Registro temporal que marca la línea a expandir
   tmpFrmVirtual.TableNum = tablenum(BOM);
   tmpFrmVirtual.RecordNo = tmpBOM.RecId;
   tmpFrmVirtual.write();

   // Expande la LMAT y genera la línea de venta nueva (función estándar)
   auxSalesLine.expandBOM(tmpFrmVirtual, tmpBOM);
   
   // la nueva línea de venta puede necesitar modificaciones despues de este proceso
}

y digo mímino porque la línea se insertará con la mayoría de sus opciones por defecto, por lo que es seguro que habra que añadir código extra para completar los datos necesarios según las necesidades.

Descarga