15.12.2014, 13:45 | #1 |
Участник
|
Импорт информации по спланированным заказа на производство из экселя в АХ
Добрый день!
В виду извращенности бизнес логики необходимо импортировать data из Эксель и преобразовать ее в виде спланированных заказов на производство. В принципе ничего сложного. Формат таблицы импорта: Столбец1 Столбец2 Столбец3 Код номенклатуры Маршрут Колличество Вот джоб он это сделает: X++: static void _HTC_EXCELIMPORT_DataImportToAXFromExcel(Args _args) { SysExcelApplication xlsApplication; SysExcelWorkBooks xlsWorkBookCollection; SysExcelWorkBook xlsWorkBook; SysExcelWorksheets xlsWorkSheetCollection; SysExcelWorksheet xlsWorkSheet; SysExcelRange xlsRange; SysExcelCells Cells; SysExcelCell RCell; CommaIO inFile; int nRow,i; DialogField dialogPath; DialogField dlgFilepath; DialogField dlgReqPlanId; DialogField dlgRefType; DialogField dlgInventSiteId; Dialog dialog; Filename filename; ItemId ItemId; ItemGroupId ItemGroupId; ItemBomId ItemBomId; ItemRouteId itemRouteId; ReqPO ReqPo; ReqPlanId ReqPlanId; ReqRefType RefType; InventSiteId inventSiteId; ReqDate ReqDate; ReqDateOrder ReqDateOrder; Qty Qty; //FormStringControl FormStringControl = new FormStringControl(); ; dialog = new Dialog("Import"); dialogPath = dialog.addField(typeid(Filenameopen), "File Name"); dlgRefType = dialog.addField(typeid(ReqRefType), "Ref Type"); dlgReqPlanId = dialog.addField(typeid(ReqPlanId), "Plan Id"); dialog.run(); if (dialog.run()) { filename = (dialogPath.value()); ReqPlanId = dlgReqPlanId.value(); RefType = dlgRefType.value(); } inFile = new CommaIO (filename, 'R'); if (!inFile || infile.status() != IO_Status::Ok ) { throw error (strfmt("@SYS19312",filename)); } try { xlsApplication = SysExcelApplication::construct(); xlsWorkBookCollection = xlsApplication.workbooks(); xlsWorkBookCollection.open(filename); xlsWorkSheetCollection = xlsApplication.worksheets(); xlsWorkSheet = xlsWorkSheetCollection.itemFromNum(1); Cells = xlsWorkSheet.Cells(); nRow = 2; RCell = Cells.Item(nRow, 1); while(RCell.value().bStr() != "") { ItemId = RCell.value().bStr(); RCell = Cells.item(nRow,2); ItemRouteId = RCell.value().bStr(); RCell = Cells.item(nRow,3); Qty = RCell.value().double(); ReqDate = today(); ttsbegin; ReqPo.initValue(); ReqPo.ItemId = ItemId; ReqPo.ReqDate = ReqDate; ReqPo.ItemRouteId = ItemRouteId; ReqPo.ReqPlanId = ReqPlanId; ReqPo.ReqPOStatus = ReqPOStatus::Approved; ReqPo.RefType = RefType; ReqPO.Qty = Qty; ReqPo.CovInventDimId ="4799"; ReqPo.insert(); ttscommit; nRow++; RCell = Cells.Item(nRow, 1); } xlsApplication.quit(); xlsApplication.finalize(); info("Imported completed"); } catch( Exception::Error) { //Close Excel. xlsApplication.quit (); xlsApplication.finalize (); ttsabort; info("Unable to process the excel import "); } } И разумеется возник вопрос - А как это сделать?? Когда создается через форму то используется метод InventTable lookupBOMId одним из агрументов которого является FormStringControl. Но я планирую просто сделать класс для запуска импорта с точкой входа. |
|