Home computer programming, dynamics ax, others ax2012-upload yearly budget
computer programmingdynamics axothers

ax2012-upload yearly budget

every year, ax user finance must upload the budget, this code below is how to upload budget to ax,

this is the steps:

  1. fiscal calendar, check is the new year calendar is already created
  2. remember to check budg_3 number sequences, do not check the “continue”, reset every year
  3. create budget model 2017 at budget->setup->budget models
  4. check the session date before upload, recomended to set 1/1/[current budget year]
  5. goto system administrator -> periodic -> upload data -> budget 2017, pick the files, and upload
  6. goto budgeting -> common -> budget register entries
  7. check the uploaded budget, if theres wrong budget, edit it, or, delete all budget and reupload
  8. if the uploaded budget is ok, then, click update budget balances
  9. if completed, and there was a corrections, do the manual corrections in budgeting -> common -> draft budget revisions

 

below is the source code:

static client void uploadBudget(Filename filename, int start)
{

    #WinApi
    #File

    SysExcelApplication application = SysExcelApplication::construct();
    SysExcelWorkbooks   workbooks   = application.workbooks();
    SysExcelWorkbook    workbook;
    SysExcelWorksheets  workSheets;
    SysExcelWorksheet   workSheet;
    SysExcelCells       cells;
    SysExcelCell        cell;

    #AviFiles
    SysOperationProgress progress = new SysOperationProgress();


    int i,a;

    BudgetTransactionHeader budgetheader,budgetheadercek;
    BudgetTransactionCode _budgettranscode;
    AxBudgetTransactionLine _axbudgetline;
    MainAccountNum ledgeracc;
    str modelid1,budgettransnum,dept1,comp1;
    //str 10 dept;
    Ledger _ledger;
    MainAccount _mainaccount;
    RecId Ledgerdimensions;
    date transdate;
    Amount amt;
    BudgetModelId _modelid;

    DimensionFinancialTag _dimfin;
    DimensionValue dept;
    LedgerName _comp;
    ;
   // startLengthyOperation();

    if (!WinAPI::fileExists(filename))
        throw error(strfmt("@SYS109820", filename));


    if (workbooks.open(filename, false /*Update links*/, true /*Read only*/))
    {
        workbook   = workbooks.item(1);
        workSheets = workbook.worksheets();
        workSheet  = workSheets.itemFromNum(1); //worksheet keberapa dari excel di mulai dari angka 1

        cells      = workSheet.cells();

        i   = start + 1;
        _comp = curExt();
        select * from _ledger where _ledger.Name==_comp;
        try
        {
            ttsBegin;
            while (true)
            {
               // startLengthyOperation();
                progress.setCaption('Progress');
                progress.setText(strfmt("Row %1", i));
                progress.setTotal(5500);
                progress.setCount(i, 1);
                ledgeracc='';
                //budget account
                ledgeracc=strLRTrim(cells.item(i,4).value().bStr());
                if (ledgeracc=='')
                {
                    ledgeracc=strLRTrim(num2str(cells.item(i,4).value().double(),20,0,0,0));
                }

                if(ledgeracc=='' || ledgeracc=='0')
                    break;

                //Company, mendapatkan kode ledger company
                //harusnya tidak usah, agar tidak overlap company
                //gunakan curExt()

                //if(comp1 != strLRTrim(cells.item(i,1).value().bStr()))
                //{
                //    comp1=strLRTrim(cells.item(i,1).value().bStr());
                //    _comp=comp1;
                //    select * from _ledger where _ledger.Name==_comp;
                //}

                // info(int2str(i)+' '+ledgeracc+' - '+int642str(_ledger.RecId));

                //dia akan cek main account,
                select * from _mainaccount where _mainaccount.MainAccountId==ledgeracc && _mainaccount.LedgerChartOfAccounts==_ledger.RecId;

                //budget date
                transdate=cells.item(i,5).value().date();

                //amount
                amt=cells.item(i,7).value().double();

                //dept
                dept1=strLRTrim(cells.item(i,3).value().bStr());
                if(dept1=='')
                    dept1=strLRTrim(num2str(cells.item(i,3).value().double(),20,0,0,0));

                //model
                modelid1=strLRTrim(cells.item(i,2).value().bStr());
                if (modelid1=='')
                    modelid1=num2str(cells.item(i,2).value().double(),20,0,0,0);

                if (
                    _modelid!=strLRTrim(modelid1)
                )
                {
                    _modelid=strLRTrim(modelid1);

                //fungsi di bawah hanya ngecek apakah mode dan primary ledger sudah pernah diupload
                //masalahnya dia hanya cek baris data awal saja
                //jadi sebenarnya tidak berguna juga, jadi gunakan versi 2 saja
                //versi 1
                //if(i==3)
                //{
                //    select firstonly * from budgetheadercek where budgetheadercek.BudgetModelId==_modelid &&
                //    budgetheadercek.PrimaryLedger==_ledger.RecId ;
                //    if (budgetheadercek)
                //    {
                //        info('Model ID '+_modelid+' already uploaded!');
                //        break;
                //    }
                //}
                    select firstonly * from budgetheadercek where budgetheadercek.BudgetModelId==_modelid &&
                    budgetheadercek.PrimaryLedger==_ledger.RecId ;
                    if (!budgetheadercek)
                        //info('Model ID '+_modelid+' already uploaded!');
                        //break;
                        //do nothing lah, toh ga create budget baru dan cek line berapa
                    {
                        select _budgettranscode where _budgettranscode.Name=='ORI';

                        budgettransnum=NumberSeq::newGetNum(BudgetParameters::numRefBudgetTransactionId()).num();
                        budgetheader.BudgetModelId=_modelid;
                        budgetheader.BudgetSubModelId=_modelid;
                        budgetheader.BudgetModelDataAreaId=_comp;
                        budgetheader.BudgetTransactionCode=_budgettranscode.RecId;//5637144826;
                        budgetheader.BudgetTransactionType=BudgetTransactionType::OriginalBudget;
                        budgetheader.PrimaryLedger=_ledger.RecId;
                        budgetheader.Date=transdate;
                        budgetheader.TransactionStatus=BudgetTransactionStatus::Draft;
                        budgetheader.TransactionNumber=budgettransnum;
                        budgetheader.insert();
                    }
                }
                Ledgerdimensions=UploadClass::getLedgerDimension(ledgeracc, dept1);

                _axbudgetline=new AxBudgetTransactionLine();
                _axbudgetline.parmBudgetTransactionHeader(budgetheader.RecId);
                _axbudgetline.parmAccountingCurrencyAmount(amt);
                _axbudgetline.parmBudgetType(BudgetType::Expense);
                _axbudgetline.parmDate(transdate);
                _axbudgetline.parmLedgerDimension(Ledgerdimensions);
                //entah kenapa iverson by pass kolom ini
                _axbudgetline.parmTransactionCurrency('IDR');
                _axbudgetline.parmTransactionCurrencyAmount(amt);
                _axbudgetline.save();

                i++;

            }
            ttsCommit;
            info('Upload done');
        }
        catch(Exception::Error)
        {
            info(strFmt("Catch Error on line %1",i));
        }
        info('End of Job');
    }
}

download link for xlsx template

AX UPLOAD BUDGET 2017

download link for completed source code:

PrivateProject_RON_UploadBudget

Author

Ronny

Leave a Reply