Saturday, 19 December 2015

Inventory Movement Journals import through excel with job in ax 2012 r3

Inventory Movement Journals import through excel  with job in ax 2012 r3
-------
[Here we need to  check item having site,colour,size ,configuration if not having item these values not enter into Excel t job is working fine otherwise u get errors item is not created like that.]so what r  the fields ur mapped those filed values are there in ax level]
-----


static void InventoryMovementJournal(Args _args)//InventoryClosingImportJob(Args _args)
 {
      InventJournalTable journalTable;
     InventJournalTrans journalTrans;
     InventJournalTableData journalTableData;
     InventJournalTransData journalTransData;
     InventTable inventTable;
     InventDim locInventDim;
     Counter cnt;
     ItemId                 ItemIdstr;//, Itemid;
     InventSiteId            inventSiteId;
     InventLocationId        inventLocationId;
     InventColorTxt          inventColor;
     str           inventSize,InventStyle,Itemid;
     InventBatchId           inventBatchId;
     InventQtyJournal        qty;
     ItemCostPrice           costprice;
     LedgerDimensionDefaultAccount   mainacc;
     str                20     mainaccStr;
     str                50      Text;
     container            offSetEntryPattern;
     LedgerJournalId               JournalId;
     SysExcelApplication             application;
     SysExcelWorkbooks               workbooks;
     SysExcelWorkbook                workbook;
     SysExcelWorksheets              worksheets;
     SysExcelWorksheet               worksheet;
     SysExcelCells                   cells;
     COMVariantType                  type;
     FilenameOpen                    filename;
     dialogField                     dialogFilename;
     Dialog                          dialog;
     Integer                         row = 1;
     int     coun;
     Mainaccount     mainaccount;
     int   _mainaccountnum; //= "111200";//"202000";
     Ledger          ledger;
     CompanyInfo     companyinfo;

     str COMVariant2Str(COMVariant       _cv)
     {
         switch (_cv.variantType())
         {
             case (COMVariantType::VT_BSTR):
                 return _cv.bStr();
             case (COMVariantType::VT_R8):
               //  return _cv.toString() ;
                 return _cv.bStr() ;
             case (COMVariantType::VT_DATE):
                 return date2str(_cv.date(),123,2,1,2,1,4);
             case (COMVariantType::VT_EMPTY):
                 return '';
             default:
                 throw error(strfmt("@SYS26908", _cv.variantType()));
         }
     }
     ;
     dialog              =   new Dialog('Import Vendor Details');
     dialogFilename      =   dialog.addField(ExtendedTypeStr("FilenameOpen"));
     dialog.filenameLookupTitle('Import from excel.');
     dialog.caption('Import From Excel');
     dialogFilename.value(filename);
     if(dialog.run())
     {
         filename            =   dialogFilename.value();
         application         =   SysExcelApplication::construct();
         workbooks           =   application.workbooks();
         try
         {
             workbooks.open(filename);
         }
         catch (Exception::Error)
         {
             throw error('File cannot be opened.');
         }
         workbook            =   workbooks.item(1);
         worksheets          =   workbook.worksheets();
         worksheet           =   worksheets.itemFromNum(1);
         cells               =   worksheet.cells();
         try
         {
             ttsbegin;
             // NOTE - JOURNAL ID MUST BE CHANGED BEFORE IMPORT
             Select journalTable Where journalTable.JournalId =="WW-000077"; //CHANGE JOURNAL ID HERE
             do
             {
                 row++;
             JournalId                               = cells.item(row, 1).value().bStr();
             inventSiteId                            = cells.item(row, 2).value().bStr();
             inventLocationId                        = cells.item(row, 3).value().bStr();
             inventSize                              = cells.item(row, 4).value().bStr();
             inventColor                             = cells.item(row, 5).value().bStr();
             inventStyle                             = cells.item(row, 6).value().bStr();
             qty                                     = cells.item(row, 7).value().double();
             costPrice                               = cells.item(row, 8).value().double();
             _mainAccountNum                         = cells.item(row, 9).value().double();
              mainAccstr                              = int2str(_mainaccountnum);
             //department                            = cells.item(row, 8).value().bStr();
             itemId                                  = cells.item(row, 10).value().bStr(); //cells.item(row, 10).value().bStr();
             //itemIdstr                                  = int2str(itemId);
             type = cells.item(row+1, 1).value().variantType();
             select recId from MainAccount where mainAccount.MainAccountId ==mainAccstr;
             locInventDim.inventBatchId              = inventBatchId;
             locInventDim.InventSiteId               = inventSiteId;
             locInventDim.InventLocationId           = inventLocationId;
             locInventDim.InventSizeId               = inventSize;
             locInventDim.InventColorId              = inventColor;
             locInventDim.InventStyleId              = inventStyle;
             locInventDim.configId                   = inventStyle; //as Config id
             journalTrans.clear();
             journalTrans.initFromInventJournalTable(journalTable);
             journalTrans.TransDate                  = cells.item(row, 8).value().date();//systemDateGet();
             journalTrans.ItemId                     = itemId;
             journalTrans.JournalId                  = journalTable.JournalId;//JournalId;//
             //Finding out the invent dim id from given value
             journalTrans.InventDimId                = InventDim::findOrCreate(locInventDim).inventDimId;
             journalTrans.PriceUnit                  = 1;
             journalTrans.Qty                        = qty;
             journalTrans.CostPrice                  = costPrice;
             journalTrans.CostAmount                 = journalTrans.Qty * journalTrans.CostPrice;
             journalTrans.LedgerDimension            = DimensionStorage::getDefaultAccountForMainAccountNum(mainAccstr);
             //Except these below two lines above things are same as like in dynamics AX 2009
             //If you want to insert the dimension value with account
             //In below code I have no dimension with main account so I just put 0, Instead I have two
             //dimension
             //write a code like “[“MainAccount”, mainAcc, 2, Dinemsion1, dimVal1, Dimension2, dimVal2)
             // offsetEntryPattern                                      = [mainAccstr,0,0];
             // journalTrans.LedgerDimension              = AxdDimensionUtil::getLedgerAccountId(offsetEntryPattern);
             //Default dimension Value either you can insert the dimension value here.
             //defaultDim                                                     = [1,"Department",department];
             //journalTrans.DefaultDimension             =        AxdDimensionUtil::getDimensionAttributeValueSetId(defaultDim);
             journalTrans.insert();
             coun++;
             print(coun);
             }
             while (type != COMVariantType::VT_EMPTY);
             info(int2str(coun));
             ttscommit;
             application.quit();
         }
         catch
         {
             throw error('Error in import.');
         }
     }
 }

Make Financial Dimensions mandatory through code for perticular Form

InventJournalMopvementForm::


InventJournalTransTable- ValidateWrite method
Description::[Here actually record getting based on JournalNameId field-Inventmovent value so goto setup see the field like JournalType  but we need to get JournalId based so we use find method then put if inthat  create buffer and JournalNameId field and type in tat again put If condition defaultDimension as 0, then write validation]


/ <MRKP-Janardhan-19122015>
    inventJournalTableLoc = InventJournalTable::find(InventJournalTrans.JournalId);
    if(InventJournalName::find(inventJournalTableLoc.JournalNameId).JournalType == InventJournalType::Movement)
    {
        if(InventJournalTrans.DefaultDimension == 0)
        {
         // isValid = checkFailed(strFmt("@MRK495"));
         //  info("Please fill the default dimension");
              throw error("Please fill the default dimensions");
        }
    }