Skip to main content

Creating BOM journal using code AX 2012

courtesy:
http://www.andesoft.net/creating-bom-journal-using-x-code-ax-2009-ax-2012/
https://community.dynamics.com/ax/f/33/t/96262.aspx
http://learnax.blogspot.com/2010/01/x-code-to-create-and-post-inventory.html

static void createBomJournal_working(Args _args)
{
    InventJournalTable      journalTable;
    InventJournalTrans      journalTrans;
    InventJournalTableData  journalTableData;
    InventJournalTransData  journalTransData;
    InventTable             inventTable;
    InventDim               inventDim;
    Counter                 cnt;
    InventJournalCheckPost  journalCheckPost = new InventJournalCheckPost();

    InventTransId           inventTransId, inventTransIdFather;
    InventBatch             inventBatch;
    ;

    journalTableData = JournalTableData::newTable(journalTable);
    journalTransData = journalTableData.journalStatic().newJournalTransData(journalTrans,journalTableData);

    // Init JournalTable
    journalTable.clear();

    journalTable.JournalId = journalTableData.nextJournalId();
    journalTable.JournalType = InventJournalType::BOM;
    journalTable.JournalNameId = 'BomJrnl';//journalTableData.journalStatic().standardJournalNameId(journalTable.JournalType);

    journalTableData.initFromJournalName(journalTableData.journalStatic().findJournalName(journalTable.JournalNameId));

    // Init JournalTrans

    for(cnt=1; cnt<3; cnt++)
    {
        if (cnt == 1)
        {
            select firstonly inventTable
                where inventTable.ItemId == 'itemName';
        }
        else if (cnt == 2)
        {
            select firstonly inventTable
                where inventTable.ItemId == 'itemName2';
        }

        journalTrans.clear();
        journalTransData.initFromJournalTable();

        journalTrans.TransDate = systemdateget() + 1 div 2;
        journalTrans.ItemId = inventTable.ItemId;

        if (cnt == 1)
        {
            journalTrans.Qty = 26;

            inventDim.clear();
            inventDim.InventColorId = 'color';
            inventDim.InventStyleId = 'style';
            inventDim.InventSizeId = 'size';
            inventDim.InventSiteId = 'site';
            inventDim.InventLocationId = 'whs';
            inventDim.wMSLocationId = InventLocation::find(inventDim.inventLocationId).WMSLocationIdDefaultReceipt;
            if(!inventDim.inventBatchId)
            {
                select firstOnly inventBatch where inventBatch.itemId == journalTrans.ItemId;
                inventDim.inventBatchId = inventBatch.inventBatchId;
            }
        }
        else if (cnt == 2)
        {
            journalTrans.Qty = qty * -1;

            inventDim.clear();
            inventDim.InventColorId = 'clr';
            inventDim.InventStyleId = 'sty';
            inventDim.InventSizeId = 'sz';
            inventDim.InventSiteId = 'st';
            inventDim.InventLocationId = 'lct';
            inventDim.wMSLocationId = 'loc';
//InventLocation::find(inventDim.inventLocationId).WMSLocationIdDefaultReceipt;
            if(!inventDim.inventBatchId)
            {
                select firstOnly inventBatch where inventBatch.itemId == journalTrans.ItemId;
                inventDim.inventBatchId = inventBatch.inventBatchId;
            }
        }

        inventDim = InventDim::findOrCreate(inventDim);
        journalTrans.InventDimId = inventDim.InventDimId;

        if (cnt == 2)
        {
            journalTrans.BOMLine = true;//NoYes::Yes;
            journalTrans.LineNum = -1;
            journalTrans.InventTransIdFather = inventTransIdFather;
        }

        journalTrans.setCostPrice(journalTrans.InventDimId);

        journalTransData.create();
        inventTransId = journalTrans.InventTransId;

        if (cnt == 1)
        {
            inventTransIdFather = inventTransId;
        }

        //this.pickItem(salesLine.SalesId,salesLine.InventTransId,tmp.QtySelected,inventDim.inventBatchId,inventDim.wMSLocationId);
        //journalTrans.clear();
    }

    journalTable.insert();

    // Call the static method to post the journal
    if(InventJournalCheckPost::newPostJournal(journalTable).validate())
    {
        InventJournalCheckPost::newPostJournal(journalTable).run();
    }
}


Comments

Popular posts from this blog

Run SSRS report using x++ code | AX 2012

This post describes how to run an SSRS report through x++ code and passing report parameters as well. Its a simple code and comments are added for further ease in code understanding! public static void runSSRSReport() {     SrsReportRunController controller;             controller = new SrsReportRunController();     controller.parmLoadFromSysLastValue(false);      // write report name and its design in quotes that you want to run     controller.parmReportName("ReportName.DesignName");      // set additional, optional properties like setting landscape to true     controller.parmReportContract().parmPrintSettings().landscape(true);          // set print destination screen/printer/file etc.     controller.parmReportContract().parmPrintSettings().printMediumType (SRSPrintMediumType::S...

Auto create job card journal in Production | AX 2012

Multiple journals are created in the production process. When the order is started route card journal and picking list journal are auto created. But system does not create job card journal automatically. It requires a small customization. Following method can be called when the production order is started with the production order id passed as the parameter. /// <summary> /// This method auto creates Job Card Journal and its lines against selected production order. /// </summary> private void autoCreateJobCardJournal(ProdId _prodId) {     ProdJournalTable    prodJournalTable;     ProdRoute           prodRoute;     ProdRouteJob        prodRouteJob;     ProdJournalRoute    prodJournalRoute;     ProdParametersDim   prodParametersDim;     int   ...