How to create General Journal From Excel Using X++ Code In AX 2012

This article describes the creation of General Ledger journal through X++


Excel file format must be like in below sequence. If you want to add some more columns you can add after last column (Due). Please don't forget to write code for newly added columns.

1. CurrencyCode
2. AccountType
3. AmountCurCredit
4. AmountCurDebit
5. TransDate
6. LedgerDimension
7. Txt
8. OffsetAccountType
9. OffsetLedgerDimension
10. Company
11. PostingProfile
12. ExchangeRATE
13. Invoice
14. Due 


static void Import_GeneralJournal(Args _args)
{
    SysExcelApplication                 application;
    SysExcelWorkbooks                   workbooks;
    SysExcelWorkbook                    workbook;
    SysExcelWorksheets                  worksheets;
    SysExcelWorksheet                   worksheet;
    SysExcelCells                       cells;
    COMVariantType                      type;
    LedgerJournalName                   objLedgerJournalName,_objLedgerJournalName;
    LedgerJournalTable                  objLedgerJournalTable;
    LedgerJournalTrans                  objLedgerJournalTrans;
    LedgerJournalTransTaxExtensionIN    objLedgerJournalTransTaxExtensionIN;
    NumberSequenceTable                 objNumberSequenceTable;
    LedgerJournalACType                 objLedgerJournalACType;
    CustTable                           objCustTable;
    VendTable                           objVendTable;
    BankAccountTable                    objBankAccountTable;
    MAINACCOUNT                         objMAINACCOUNT;
    LedgerDimensionAccount              ledgerDim;
    dev_CLS_AnyType2Str                 dev_CLS_AnyType2Str;
    str 1000 strNumberSequenceName ,vch,_Msg;
    int row=1,i = 1,_Sheets,_TotalSheets;
    Dialog          dialog;
    Filename        filename;
    DialogField     dialogFilename;
    container      conFilter = ["Microsoft Excel 97-2003 Worksheet (.xls)" ,"*.xlsx"];
    dev_CLS_AnyType2Str = new dev_CLS_AnyType2Str();
    application = SysExcelApplication::construct();
    workbooks = application.workbooks();

    dialog = new dialog("Import Excel File For General Journals");
    dialogFileName = dialog.addField(extendedTypeStr(FilenameOpen), "Select File");
    dialog.filenameLookupFilter(conFilter);
    dialog.run();
    //filename  = @"C:\Users\dhruv.thakar\Desktop\Final tax entries need to reverse 21112017 After updating on live server.xlsx";
    filename = dialogFileName.value();
    if(dialog.closedOk())
    {
        if(filename=="")
        {
            throw error("File not found");
        }
    }
    if(filename!="")
    {
        try
        {
            workbooks.open(filename);
        }
        catch (Exception::Error)
        {
            workbook.close(false);
            application.quit();
            throw Error("File not found");
        }
        ttsBegin;
        workbook = workbooks.item(1);
        worksheets = workbook.worksheets();
        for(_Sheets=1;_Sheets<=worksheets.count();_Sheets++)
        {
            row=1;
            i=1;
            worksheet = worksheets.itemFromNum(_Sheets);
            cells = worksheet.cells();
            strNumberSequenceName="";
            vch="";
            objLedgerJournalName.clear();
            objLedgerJournalTable.clear();
            _objLedgerJournalName.clear();
            objLedgerJournalTrans.clear();
            objLedgerJournalTransTaxExtensionIN.clear();
            try
            {
                do
                {
                    row=row+1;
                    if(i == 1)
                    {
                        select firstonly objLedgerJournalName where objLedgerJournalName.JournalName =="GEN_JRNL";
                        objLedgerJournalTable.JournalName =objLedgerJournalName.JournalName;
                        objLedgerJournalTable.initFromLedgerJournalName();
                        objLedgerJournalTable.Name = objLedgerJournalTable.ledgerJournalName().Name;
                        strNumberSequenceName=numberSeq::newGetNumFromCode('Gene_33').num();
                        objLedgerJournalTable.JournalNum=strNumberSequenceName;
                        objLedgerJournalTable.JournalType=LedgerJournalType::Daily;
                        if(objLedgerJournalTable.validateWrite())
                        {

                            objLedgerJournalTable.insert();
                        }
                        else
                        {
                            _Msg="Sheet Name : "+worksheet.name()+" Error while inserting records in LedgerJournalTable for "+objLedgerJournalTable.JournalNum;
                            workbook.close(false);
                            application.quit();
                            throw Error(_Msg);
                        }
                    }
                    if(objLedgerJournalTable.RecId!=0)
                    {
                        _objLedgerJournalName.clear();
                        select * from _objLedgerJournalName order by JournalName where _objLedgerJournalName.JournalType == LedgerJournalType::Daily && _objLedgerJournalName.JournalName == objLedgerJournalTable.JournalName;
                        select * from objNumberSequenceTable where objNumberSequenceTable.RecId == _objLedgerJournalName.NumberSequenceTable;
                        vch =  NumberSeq::newGetVoucherFromCode(objNumberSequenceTable.NumberSequence).voucher();
                        if(vch=="")
                        {
                            _Msg="Sheet Name : "+worksheet.name()+" Voucher number is null";
                            workbook.close(false);
                            application.quit();
                            throw Error(_Msg);
                        }
                        //this.formatValue(Types::String,cells.item(row, 1).value());
                        objLedgerJournalTrans.Voucher=vch;
                        objLedgerJournalTrans.LineNum=i;
                        objLedgerJournalTrans.CurrencyCode=dev_CLS_AnyType2Str.formatValue(Types::String,cells.item(row,1).value()); //cells.item(row,1).value().bStr();
                        objLedgerJournalTrans.AccountType=str2enum(objLedgerJournalACType,cells.item(row,2).value().bStr());
                        objLedgerJournalTrans.AmountCurCredit=dev_CLS_AnyType2Str.formatValue(Types::Real,cells.item(row,3).value()); //cells.item(row,3).value().double();
                        objLedgerJournalTrans.AmountCurDebit=dev_CLS_AnyType2Str.formatValue(Types::Real,cells.item(row,4).value());//cells.item(row,4).value().double();
                        objLedgerJournalTrans.TransDate=dev_CLS_AnyType2Str.formatValue(Types::Date,cells.item(row,5).value()); //cells.item(row,5).value().date();
                        if(objLedgerJournalTrans.AmountCurCredit==0 && objLedgerJournalTrans.AmountCurDebit==0)
                        {
                            _Msg=strFmt("Sheet Name : "+worksheet.name()+" Credit or Debit amount required Row Number %1",row);
                            workbook.close(false);
                            application.quit();
                            throw Error(_Msg);
                        }
                        if(LedgerJournalACType::Bank==objLedgerJournalTrans.AccountType)
                        {
                            objBankAccountTable.clear();
                            objBankAccountTable=BankAccountTable::find(dev_CLS_AnyType2Str.formatValue(Types::String,cells.item(row,6).value())); //cells.item(row,6).value().bStr()
                            if(objBankAccountTable.RecId==0)
                            {
                                _Msg=strFmt("Sheet Name : "+worksheet.name()+" Main Account (Bank) not found for Row Number %1",row);
                                workbook.close(false);
                                application.quit();
                                throw Error(_Msg);
                            }
                            objLedgerJournalTrans.LedgerDimension= DimensionStorage::getDynamicAccount(objBankAccountTable.AccountID,enum2int(LedgerJournalACType::Bank));
                        }
                        else if(LedgerJournalACType::Cust==objLedgerJournalTrans.AccountType)
                        {
                            objCustTable.clear();
                            objCustTable=CustTable::find(dev_CLS_AnyType2Str.formatValue(Types::String,cells.item(row,6).value())); //cells.item(row,6).value().bStr()
                            if(objCustTable.RecId==0)
                            {
                                _Msg=strFmt("Sheet Name : "+worksheet.name()+" Main Account (Customer) not found for Row Number %1",row);
                                workbook.close(false);
                                application.quit();
                                throw Error(_Msg);
                            }
                            objLedgerJournalTrans.LedgerDimension= DimensionStorage::getDynamicAccount(objCustTable.AccountNum,enum2int(LedgerJournalACType::Cust));
                        }
                        else if(LedgerJournalACType::Vend==objLedgerJournalTrans.AccountType)
                        {
                            objVendTable.clear();
                            objVendTable=VendTable::find(dev_CLS_AnyType2Str.formatValue(Types::String,cells.item(row,6).value())); //cells.item(row,6).value().bStr()
                            if(objVendTable.RecId==0)
                            {
                                _Msg=strFmt("Sheet Name : "+worksheet.name()+" Main Account (Vendor) not found for Row Number %1",row);
                                workbook.close(false);
                                application.quit();
                                throw Error(_Msg);
                            }
                            objLedgerJournalTrans.LedgerDimension= DimensionStorage::getDynamicAccount(objVendTable.AccountNum,enum2int(LedgerJournalACType::Vend));
                        }
                        else if(LedgerJournalACType::Ledger==objLedgerJournalTrans.AccountType)
                        {

                            ledgerDim = DimensionStorage::getDefaultAccountForMainAccountNum(dev_CLS_AnyType2Str.formatValue(Types::String,cells.item(row,6).value())); //cells.item(row,6).value().bStr();
                            if(ledgerDim==0)
                            {
                                _Msg=strFmt("Sheet Name : "+worksheet.name()+" Main Account (Ledger) not found for Row Number %1",row);
                                workbook.close(false);
                                application.quit();
                                throw Error(_Msg);
                            }
                            objLedgerJournalTrans.getLedgerDimensionForLedgerType(ledgerDim,curext());
                            objLedgerJournalTrans.LedgerDimension =objLedgerJournalTrans.getLedgerDimensionForLedgerType(ledgerDim,curext());
                        }

                        objLedgerJournalTrans.Txt=dev_CLS_AnyType2Str.formatValue(Types::String,cells.item(row,7).value()); //cells.item(row,7).value().bStr();
                        objLedgerJournalTrans.OffsetAccountType=str2enum(objLedgerJournalACType,cells.item(row,8).value().bStr());

                        if(LedgerJournalACType::Bank==objLedgerJournalTrans.OffsetAccountType)
                        {
                            objBankAccountTable.clear();
                            objBankAccountTable=BankAccountTable::find(dev_CLS_AnyType2Str.formatValue(Types::String,cells.item(row,9).value())); //cells.item(row,9).value().bStr()
                            if(objBankAccountTable.RecId==0)
                            {
                                _Msg=strFmt("Sheet Name : "+worksheet.name()+" Offset Account (Bank) not found for Row Number %1",row);
                                workbook.close(false);
                                application.quit();
                                throw Error(_Msg);
                            }
                            objLedgerJournalTrans.OffsetLedgerDimension= DimensionStorage::getDynamicAccount(objBankAccountTable.AccountID,enum2int(LedgerJournalACType::Bank));
                        }
                        else if(LedgerJournalACType::Cust==objLedgerJournalTrans.OffsetAccountType)
                        {
                            objCustTable.clear();
                            objCustTable=CustTable::find(dev_CLS_AnyType2Str.formatValue(Types::String,cells.item(row,9).value())); //cells.item(row,9).value().bStr()
                            if(objCustTable.RecId==0)
                            {
                                _Msg=strFmt("Sheet Name : "+worksheet.name()+" Offset Account (Customer) not found for Row Number %1",row);
                                workbook.close(false);
                                application.quit();
                                throw Error(_Msg);
                            }
                            objLedgerJournalTrans.OffsetLedgerDimension= DimensionStorage::getDynamicAccount(objCustTable.AccountNum,enum2int(LedgerJournalACType::Cust));
                        }
                        else if(LedgerJournalACType::Vend==objLedgerJournalTrans.OffsetAccountType)
                        {
                            objVendTable.clear();
                            objVendTable=VendTable::find(dev_CLS_AnyType2Str.formatValue(Types::String,cells.item(row,9).value())); //cells.item(row,9).value().bStr()
                            if(objVendTable.RecId==0)
                            {
                                _Msg=strFmt("Sheet Name : "+worksheet.name()+" Offset Account (Vendor) not found for Row Number %1",row);
                                 workbook.close(false);
                                application.quit();
                                throw Error(_Msg);
                            }
                            objLedgerJournalTrans.OffsetLedgerDimension= DimensionStorage::getDynamicAccount(objVendTable.AccountNum,enum2int(LedgerJournalACType::Vend));
                        }
                        else if(LedgerJournalACType::Ledger==objLedgerJournalTrans.OffsetAccountType)
                        {
                            ledgerDim = DimensionStorage::getDefaultAccountForMainAccountNum(dev_CLS_AnyType2Str.formatValue(Types::String,cells.item(row,9).value())); //cells.item(row,9).value().bStr()
                            if(ledgerDim==0)
                            {
                                _Msg=strFmt("Sheet Name : "+worksheet.name()+" Offset Account (Ledger) not found for Row Number %1",row);
                                workbook.close(false);
                                application.quit();
                                throw Error(_Msg);
                            }
                            objLedgerJournalTrans.getLedgerDimensionForLedgerType(ledgerDim,curext());
                            objLedgerJournalTrans.OffsetLedgerDimension =objLedgerJournalTrans.getLedgerDimensionForLedgerType(ledgerDim,curext());
                        }
                        else
                        {
                            ledgerDim=0;
                            objLedgerJournalTrans.OffsetLedgerDimension =0;
                        }

                        objLedgerJournalTrans.Company=dev_CLS_AnyType2Str.formatValue(Types::String,cells.item(row,10).value()); //cells.item(row,10).value().bStr();
                        objLedgerJournalTrans.PostingProfile=dev_CLS_AnyType2Str.formatValue(Types::String,cells.item(row,11).value()); //cells.item(row,11).value().bStr();
                        objLedgerJournalTrans.ExchRate=dev_CLS_AnyType2Str.formatValue(Types::Real,cells.item(row,12).value());cells.item(row,12).value().double();
                        if(objLedgerJournalTrans.ExchRate==0)
                        {

                            _Msg=strFmt("Sheet Name : "+worksheet.name()+" ExchRate found Zero for Row Number %1",row);
                            workbook.close(false);
                            application.quit();
                            throw Error(_Msg);
                        }
                        objLedgerJournalTrans.Invoice=dev_CLS_AnyType2Str.formatValue(Types::String,cells.item(row,13).value()); //cells.item(row,13).value().bStr();
                        objLedgerJournalTrans.Due=dev_CLS_AnyType2Str.formatValue(Types::Date,cells.item(row,14).value()); //cells.item(row,14).value().date();
                        objLedgerJournalTrans.JournalNum =objLedgerJournalTable.JournalNum;
                        objLedgerJournalTrans.OffsetCompany=curext();

                        if(objLedgerJournalTrans.validateWrite())
                        {
                            objLedgerJournalTrans.insert();
                            if(objLedgerJournalTrans.RecId)
                            {
                                objLedgerJournalTransTaxExtensionIN.clear();
                                objLedgerJournalTransTaxExtensionIN.LedgerJournalTrans = objLedgerJournalTrans.RecId;
                                objLedgerJournalTransTaxExtensionIN.TaxInformation_IN = TaxInformation_IN::findDefaultbyLocation(CompanyInfo::find().postalAddress().Location).RecId;
                                objLedgerJournalTransTaxExtensionIN.insert();
                            }
                        }
                        else
                        {
                            _Msg=strFmt("Sheet Name : "+worksheet.name()+" Error while inserting records in LedgerJournalTrans for Line Number %1",objLedgerJournalTrans.LineNum);
                            workbook.close(false);
                            application.quit();
                            throw Error(_Msg);
                        }
                        i++;
                        type = cells.item(row+1, 1).value().variantType();
                    }
                }
                while (type != COMVariantType::VT_EMPTY);
                info(strFmt("For Sheet "+worksheet.name()+" Journal Created :%1 and Lines Created %2",objLedgerJournalTable.JournalNum,i-1));
            }
            catch(Exception::Error)
            {
                workbook.close(false);
                application.quit();
                ttsAbort;
            }
        }
        ttsCommit;
        workbook.close(false);
        application.quit();
    }

}
Previous
Next Post »

6 comments

Write comments
31 July 2018 at 00:10 delete

Thank you!!! Very Help full document

Reply
avatar
1 April 2022 at 02:27 delete

How to create General Journal From Excel Using X++ Code In AX 2012

Informative post for students & developers..!

They can learn from this post..

Well, we are here to share Xamarin app Development Company

xamarin app Development Services

Reply
avatar
16 June 2022 at 03:46 delete

very nice blog. Thanks

https://iqratechnology.com/

Reply
avatar
11 October 2022 at 04:39 delete

what is dev_CLS_AnyType2Str in this blog , I didn't get it

Reply
avatar