every year, ax user finance must upload the budget, this code below is how to upload budget to ax,
this is the steps:
- fiscal calendar, check is the new year calendar is already created
- remember to check budg_3 number sequences, do not check the “continue”, reset every year
- create budget model 2017 at budget->setup->budget models
- check the session date before upload, recomended to set 1/1/[current budget year]
- goto system administrator -> periodic -> upload data -> budget 2017, pick the files, and upload
- goto budgeting -> common -> budget register entries
- check the uploaded budget, if theres wrong budget, edit it, or, delete all budget and reupload
- if the uploaded budget is ok, then, click update budget balances
- 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
download link for completed source code: