Buscar en este blog

miércoles, 15 de febrero de 2017

Crear una orden de producción en Dyamics Ax 2009 por código x++

Ejemplo para crear una orden de producción y llevarla por los distintos estados: la estimación, la lista de selección, el inicio, reportar como terminada y el fin.

static void createProductionOrder(Args _args)
{
    ProdQty         qty     = 2;
    ItemId          item    = 'AAA-PT';

    ProdTable       prodtable;
    InventTable     inventTable;
    InventDim       inventDim;

    ProdMultiCostEstimation         prodMultiCostEstimation;
    ProdMultiScheduling             prodMultiScheduling;
    ProdMultiRelease                prodMultiRelease;
    ProdMultiStartUp                prodMultiStartUp;
    ProdMultiReportFinished         prodMultiReportFinished;
    ProdMultiHistoricalCost         prodMultiHistoricalCost;
    Args                            args   = new Args();

    ProdParmStartUp                 prodParmStartUp;
    ;

    // Inicializar InventTable
    inventTable = inventTable::find(item);

    prodtable.initValue();
    prodtable.initFromInventTable(inventTable);

    prodtable.ItemId                = inventTable.ItemId;
    prodtable.DlvDate               = today();
    prodtable.DlvTime               = DateTimeUtil::time(DateTimeUtil::utcNow());
    prodtable.QtySched              = qty;
    prodtable.RemainInventPhysical  = qty;

    // Inicializar InventDim
    inventDim.initValue();

    prodtable.BOMId = BOMVersion::findActive(prodtable.ItemId,
                                             prodtable.BOMDate,
                                             prodtable.QtySched,
                                             inventDim).BOMId;

    prodtable.RouteId = RouteVersion::findActive(prodtable.ItemId,
                                                 prodtable.BOMDate,
                                                 prodtable.QtySched,
                                                 inventDim).RouteId;

    // Inicializar BOMVersion
    prodtable.initBOMVersion();
    // Inicializar RouteVersion
    prodtable.initRouteVersion();

    //Personalizar lote
    inventDim = inventDim::find(prodtable.InventDimId);
    inventDim.inventBatchId = "2011-302005";
    inventDim = inventDim::findOrCreate(inventDim);
    prodtable.InventDimId = inventDim.inventDimId;

    //Dependiendo de la configuración, esto puede ser necesario o no
    ProdTable.ProdGroupId = "AGR";

    //Usando ProdTable para crear la orden
    prodtable.type().insert();

    // Indica la orden de producción que se creo
    setPrefix( 'Número de orde de producción');
    info(prodtable.ProdId);


    // Estimation
    prodMultiCostEstimation = ProdMultiCostEstimation::construct(args);
    runBaseMultiParm::initParm(ProdMultiCostEstimation);
    prodMultiCostEstimation.insert(prodTable, ProdMultiCostEstimation.defaultParmBuffer());
    prodMultiCostEstimation.run();

    // Scheduling
    prodMultiScheduling = ProdMultiScheduling::construct(ProdSchedMethod::OperationScheduling);
    runBaseMultiParm::initParm(prodMultiScheduling);
    prodMultiScheduling.insert(prodTable, prodMultiScheduling.defaultParmBuffer());
    prodMultiScheduling.run();

    // Release
    prodMultiRelease = ProdMultiRelease::construct(args);
    runBaseMultiParm::initParm(ProdMultiRelease);
    prodMultiRelease.insert(prodTable, prodMultiRelease.defaultParmBuffer());
    prodMultiRelease.run();

    // Start up
    prodMultiStartup = ProdMultiStartUp::construct(args);
    runBaseMultiParm::initParm(prodMultiStartup);
    prodMultiStartup.insert(prodTable, prodMultiStartup.defaultParmBuffer());
    prodMultiStartup.runISS();

    // Report as Finished
    prodMultiReportFinished = ProdMultiReportFinished::construct(args);
    runBaseMultiParm::initParm(ProdMultiReportFinished);
    prodMultiReportFinished.insert(prodTable, ProdMultiReportFinished.defaultParmBuffer());
    prodMultiReportFinished.runISS();

    // End the Order
    prodMultiHistoricalCost = ProdMultiHistoricalCost::construct(args);
    runBaseMultiParm::initParm(ProdMultiHistoricalCost);
    prodMultiHistoricalCost.insert(prodTable, ProdMultiHistoricalCost.defaultParmBuffer());
    prodMultiHistoricalCost.run();

}




Post relacionados:
Reserva de inventario por línea de venta por código x++, Dynamics Ax 2009
Dialogo para seleccionar nombre de archivo FileName
Crear búsquedas por nombre de producto en métodos display



No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma. 

No hay comentarios.:

Publicar un comentario