Добрый день!
В виду извращенности бизнес логики необходимо импортировать 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. Но я планирую просто сделать класс для запуска импорта с точкой входа.