D365 F&O Create GL general journal using X++
In Microsoft Dynamics 365 for Finance and Operations, creating the general journal through X++ is different than creating in Microsoft Dynamics AX 2012. In D365FO, there is an abstract class named as MCRLedgerJournal , which you have to inherit and implement by yourselves.
I have created the MCRLedgerJournal_SF class which inherits (extends) the abstract class. To see how to implement the abstract class, you can get the example by viewing MCRLedgerJournal_CustPayment, MCRLedgerJournal_Daily and MCRLedgerJournal_Payment etc. classes.
In our case, I have copied the MCRLedgerJournal_Daily class and pasted it in my own class (MCRLedgerJournal_SF) and modifies it according to my requirements. Apart from this, you can also use the MCRLedgerJournal_Daily class directly if you don’t want to implement your own class.
Following is the code to implement the MCRLedgerJournal abstract class.
class MCRLedgerJournal_ SF extends MCRLedgerJournal{ public LedgerJournalTrans createLedgerJournalTrans(AmountCurCredit _amtCurCredit, AmountCurDebit _amtCurDebit, LedgerJournalACType _ledgerJournalACType = LedgerJournalACType::Ledger) { LedgerJournalTrans ledgerJournalTrans; // Validate the input to the ledger journal trans and ensure that a ledgerjournaltable // exists before creating the ledger journalTrans. if (this.validateInputLedgerJourTrans(_amtCurCredit, _amtCurDebit) && ledgerJournalTable.RecId != 0) { this.initLedgerJournalTrans(ledgerJournalTrans); ledgerJournalTrans.JournalNum = ledgerJournalTable.JournalNum; ledgerJournalTrans.AccountType = LedgerJournalACType::Ledger; ledgerJournalTrans.LedgerDimension = ledgerAccount; ledgerJournalTrans.OffsetAccountType = ledgerOffsetAccountType; ledgerJournalTrans.OffsetLedgerDimension = ledgerOffsetAccount; ledgerJournalTrans.Txt = transTxt; ledgerJournalTrans.CurrencyCode = curCode; ledgerJournalTrans.ExchRate = exchRate; ledgerJournalTrans.Approver = approver; ledgerJournalTrans.Approved = approved; // Bank reconciliation specific. ledgerJournalTrans.MCRCCGeneralLedgerId = MCRCCGeneralLedgerId; ledgerJournalTrans.Due = dueDate; ledgerJournalTrans.LineNum = lineNum; ledgerJournalTrans.AccountType = ledgerAccountType; ledgerJournalTrans.Voucher = voucherNum; ledgerJournalTrans.PaymReference = paymReference; ledgerJournalTrans.BankTransType = bankTransType; ledgerJournalTrans.PaymMode = paymentMode; // Add the ref paym id and the paym order id to ledger journal trans. ledgerJournalTrans.MCRRefPaymID = MCRRefPaymID; ledgerJournalTrans.MCRPaymOrderId = MCRPaymOrderID; if (_amtCurCredit != 0) { ledgerJournalTrans.AmountCurCredit = _amtCurCredit; } if (_amtCurDebit != 0) { ledgerJournalTrans.AmountCurDebit = _amtCurDebit; } ledgerJournalTrans.initValue(); ledgerJournalTrans.defaultRow(); ledgerJournalTrans.insert(); } else { throw error("@MCR35845"); } return ledgerJournalTrans; } /// <summary> /// Creates a new instance of the <c>MCRLedgerJournal_Daily</c> class. /// </summary> /// <param name="_ledgerJournalType"> /// The type of journal to be used in the instantiation of this class. /// </param> /// <param name="_journalName"> /// The name of the journal to be used in the instantiation of this /// class; optional. /// </param> public void new(LedgerJournalType _ledgerJournalType, LedgerJournalNameId _journalName="") { super(_ledgerJournalType, _journalName); } protected boolean validateInputLedgerJourTrans(AmountCur _amtCurCredit, AmountCur _amtCurDebit) { boolean ret; ret = super(_amtCurCredit, _amtCurDebit); if (ret) { if (ledgerAccount == 0) { throw error(strFmt("@MCR36388")); } } return ret; } }
Now, the next step is to create the General journal using the above created class. I have written a job which creates the General journal using X++. See the following code:
class GenerateGeneralJournalJob{ /// <summary> /// Runs the class with the specified arguments. /// </summary> /// <param name = "_args">The specified arguments.</param> public static void main(Args _args) { MCRLedgerJournal journalTable; LedgerJournalTable ledgerJournalTable; Counter recordsInserted; ttsbegin; //Creates the journal header table journalTable = new MCRLedgerJournal_SF(LedgerJournalType::Daily); ledgerJournalTable = journalTable.createLedgerJournalTable(); journalTable.parmLedgerJournalTable(ledgerJournalTable); journalTable.parmMCRCCGeneralLedgerId(); journalTable.parmCurrencyCode(CompanyInfoHelper::standardCurrency()); //I am creating two lines to balance out each other. // creates a new line in general journal journalTable.parmLineNum(); journalTable.parmLedgerAccountType(LedgerJournalACType::Vend); journalTable.parmLedgerAccount(LedgerDynamicAccountHelper::getDynamicAccountFromAccountNumber("V-000001",LedgerJournalACType::Vend)); //You need to use the vendor account as per your environment's data. journalTable.parmTransDate(today()); journalTable.parmTransTxt("txt"); journalTable.createLedgerJournalTrans(abs(0),abs(100),LedgerJournalACType::Vend); // creates a new line in general journal journalTable.parmLineNum(); journalTable.parmLedgerAccountType(LedgerJournalACType::Ledger); //Using RecId of Ledger Dimension, you need to enter the RecId as per your environment's data. journalTable.parmLedgerAccount(5637179073); journalTable.parmTransDate(today()); journalTable.parmTransTxt("txt"); journalTable.createLedgerJournalTrans(abs(100),abs(0),LedgerJournalACType::Ledger); ttscommit; } }
No comments:
Post a Comment