Create Inventory Journal through Code in D365FO X++

 Create Inventory Journal through Code in D365FO X++

Code: 

internal final class Cls_FPS_MOVJRNL

{



    /// <summary>

    /// Class entry point. The system will call this method when a designated menu 

    /// is selected or when execution starts and this class is set as the startup class.

    /// </summary>

    /// <param name = "_args">The specified arguments.</param>

    public static void main(Args _args)

    {


        CBLFPS_StkAdjTbl       CBLFPS_StkAdjTbl;


        ttsbegin;


            // Create journal table

            InventJournalTable inventJournalTable = Cls_FPS_MOVJRNL::createJournalTable();

            

            // Initialize journal trans

            InventJournalTrans inventJournalTrans = Cls_FPS_MOVJRNL::initJournalTrans(inventJournalTable);

            info(strFmt("INV MOV JOURNAL CREATED  %1", INVENTJOURNALTABLE.JournalId));


            // Post Inventory journal

            Cls_FPS_MOVJRNL::postInventTableJournal(inventJournalTable);

            Cls_FPS_MOVJRNL::updateInventJournalTableInfo(inventJournalTable);


            // ------- Buffer Table Status Updation -------

            update_recordset CBLFPS_StkAdjTbl

            setting Status = "Y";



        ttscommit;



        info("@SYS9265");

    }


    public static InventJournalTable createJournalTable()

    {

        INVENTJOURNALTABLE     INVENTJOURNALTABLE;

        CBLFPS_StkAdjTbl       CBLFPS_StkAdjTbl;



            // Create INV JOURNAL HEADER

            ttsbegin;

            INVENTJOURNALTABLE.clear();

            INVENTJOURNALTABLE.initValue();


            numberSeq = NumberSeq::newGetNum(InventParameters::numRefInventJournalId());

            numberSeq.used();

            INVENTJOURNALTABLE.initFromInventJournalName( InventJournalName::find(InventParameters::find().MovementJournalNameId));

            INVENTJOURNALTABLE.Description = "Inventory Movement Journal";

            INVENTJOURNALTABLE.bfpJournalType = bfpJournalType::Garment ;

               

            INVENTJOURNALTABLE.SystemBlocked  = false;

            INVENTJOURNALTABLE.insert();

            ttscommit;

        


        return inventJournalTable;

    }


    public static InventJournalTrans initJournalTrans(InventJournalTable _inventJournalTable)

    {

        INVENTJOURNALTRANS     INVENTJOURNALTRANS;

        InventDim              inventDim;

        CBLFPS_StkAdjTbl       CBLFPS_StkAdjTbl;

        InventLocation         InventLocation;

        NumberSeq              num;

        num = NumberSeq::newGetNum(InventParameters::bfpNumRefInventTransLineGroupId());

        while 

        select ItemNo , sum(Qty) from CBLFPS_StkAdjTbl

        group by ItemNo

        where CBLFPS_StkAdjTbl.Status =="N"

        {

            ttsbegin;

            int line = 0;

            line = line+1;

            inventDim.InventSiteId       = "CBL-Plant";

            inventDim.InventLocationId   = "Fair_Price Shop";

            inventDim.configId           = "SP23";

            inventDim.InventSizeId       = "32 30";

            inventDim                    = InventDim::findOrCreate(inventDim);


            INVENTJOURNALTRANS.initFromInventJournalTable(INVENTJOURNALTABLE);

            INVENTJOURNALTRANS.JournalId = INVENTJOURNALTABLE.JournalId;

            INVENTJOURNALTRANS.LineNum = line;

            INVENTJOURNALTRANS.JournalType = InventJournalType::Movement;

            INVENTJOURNALTRANS.ItemId = CBLFPS_StkAdjTbl.ItemNo;

            INVENTJOURNALTRANS.initFromInventTable(InventTable::find(CBLFPS_StkAdjTbl.ItemNo));

            INVENTJOURNALTRANS.Qty = (-1) * CBLFPS_StkAdjTbl.Qty ;

            INVENTJOURNALTRANS.InventDimId  = inventDim.inventDimId;

                    

            INVENTJOURNALTRANS.TransDate = SystemDateget();

            inventJournalTrans.bfpInventJournalTransLineGroupId = num.num();

            INVENTJOURNALTRANS.insert();

            ttscommit;

        }


        return inventJournalTrans;

    }


    public static void postInventTableJournal(InventJournalTable _inventJournalTable)

    {

        JournalCheckPost        journalCheckPost;


        journalCheckPost = inventJournalCheckPost::newJournalCheckPost(JournalCheckPostType::Post ,_inventJournalTable);

        journalCheckPost.parmThrowCheckFailed(true);

        journalCheckPost.parmShowInfoResult(true);

        journalCheckPost.run();

    }


    public static void updateInventJournalTableInfo(InventJournalTable _inventJournalTable)

    {

        InventJournalTable updateInventJournalTable;

        updateInventJournalTable = InventJournalTable::find(_inventJournalTable.JournalId, true);


        updateInventJournalTable.SystemBlocked = false;

        InventJournalTable::initTotal(updateInventJournalTable);


        updateInventJournalTable.update();

    }


}

Comments

Popular posts from this blog

D365FO – AX – X++ –Refresh, Reread, Research, and ExecuteQuery

SalesLine Reservation in D365fo x++