Create profit/loss inventory journal from X++

Here is an example of X++ code to create a profit/loss inventory journal connected to a sales order delivery note.

    CustPackingSlipJour custPackingSlipJour; 
    InventJournalTable inventJournalTable;
    InventJournalTrans inventJournalTrans;
    InventJournalTableData journalTableData;
    InventJournalTransData journalTransData;

    /// <summary>
    /// Create Inventory journal header record
    /// </summary>
    /// <param name = "_throwOnError">throw on error (Y/N)?</param>
    /// <returns>true is record has been created, false if it already exists</returns>
    protected boolean createInventJournalTable(boolean _throwOnError = true)
    {
        boolean ret = true;

        if (inventJournalTable.RecId != 0)
        {
            return ret;
        }

        journalTableData = JournalTableData::newTable(inventJournalTable);

        // Init JournalTable
        inventJournalTable.clear();

        inventJournalTable.JournalId = journalTableData.nextJournalId();
        inventJournalTable.JournalType = InventJournalType::LossProfit;
        inventJournalTable.JournalNameId = InventParameters::find().VKJournalNameId;
        inventJournalTable.VKRefDeliveryNote = custPackingSlipJour.InternalPackingSlipId;
        inventJournalTable.VKRefSourceDocumentHeader = custPackingSlipJour.SourceDocumentHeader;  // unique ref

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

        inventJournalTable.DeletePostedLines = NoYes::No;

        if (inventJournalTable.validateWrite())
        {
            inventJournalTable.insert();
        }
        else
        {
            ret = false;
            if (_throwOnError)
            {
                throw Error("@SYS93289");
            } 
        }
        return ret;
    }

    /// <summary>
    /// Create Inventory journal line records
    /// </summary>
    /// <returns>true if records have been created, exception is thrown otherwise</returns>
    protected boolean createInventJournalTrans()
    {
        boolean ret = true;

        if (!inventJournalTable)
        {
            this.createInventJournalTable();
        }

        CustPackingSlipTrans custPackingSlipTrans;

        while select custPackingSlipTrans
            where custPackingSlipTrans.SalesId == custPackingSlipJour.SalesId
            && custPackingSlipTrans.PackingSlipId == custPackingSlipJour.PackingSlipId
            && custPackingSlipTrans.DeliveryDate  == custPackingSlipJour.DeliveryDate
        {
            
            inventJournalTrans.clear();
            
            journalTransData = journalTableData.journalStatic().newJournalTransData(inventJournalTrans, journalTableData);

            if (inventJournalTable.NumOfLines)
            {
                journalTransData.parmLastLineNum(inventJournalTable.NumOfLines);
            }
            journalTransData.initFromJournalTable();

            inventJournalTrans.TransDate    = DateTimeUtil::getSystemDate(DateTimeUtil::getUserPreferredTimeZone());
            inventJournalTrans.ItemId       = custPackingSlipTrans.ItemId;

            inventJournalTrans.VKOrigRefRecId  = custPackingSlipTrans.RecId;

            inventJournalTrans.Qty                          = 0;
            if (PdsGlobal::pdsIsCWItem(inventJournalTrans.ItemId)
			{
				inventJournalTrans.pdsCWQty                 = 0;
			}

            // standard unit qty
            inventJournalTrans.UnitQty  = 0; // synced by default with 0 Qty
            inventJournalTrans.Unit     = custPackingSlipTrans.SalesUnit;

            InventTransOrigin   inventTransOrigin;
            InventTrans inventTrans;
            select firstonly RecId from inventTransOrigin
                where inventTransOrigin.InventTransId == custPackingSlipTrans.InventTransId
                join InventDimId from inventTrans
                where inventTrans.inventTransOrigin == inventTransOrigin.RecId
                && inventTrans.PackingSlipId == custPackingSlipJour.PackingSlipId;

            inventJournalTrans.InventDimId = inventTrans.InventDimId;
            inventJournalTrans.setCostPrice(inventJournalTrans.InventDimId);            
            inventJournalTrans.DefaultDimension = custPackingSlipTrans.DefaultDimension;

            journalTransData.create();
        }

        return ret;
    }


Support The Author

If you found value in what I share, I've set up a Buy Me a Coffee page as a way to show your support.

Buy Me a Coffee


Post a Comment


All Comments


No comments. Be the first one to comment on this post.

Search

About

DaxOnline.org is free platform that allows you to quickly store and reuse snippets, notes, articles related to Dynamics 365 FO.

Authors are allowed to set their own "buy me a coffee" link.
Join us.

Blog Tags