![]() |
#17 |
Участник
|
Ну где-то так:
X++: static void BAH029(Args _args) { InventTrans inventTrans; InventDim inventDim; InventSum inventSum; TmpPalletItemQty tmpTable; // считать ячейки для номенклатур из файла void importFromFile(FilenameOpen _fileName) { #avifiles #define.ItemIdCol(0) #define.WMSLocationIdCol(1) #define.FirstRow(1) //подразумевается, что в табличке есть строка заголовка. Если нет, поставить 0 CCADOConnection cn = new CCADOConnection(); CCADOCommand command = new CCADOCommand(); CCADORecordSet recordSet = new CCADORecordSet(); ComExcelDocument_RU comExcel; str sheetName; SysOperationProgress progressFile; counter itemCount; ; comExcel = new ComExcelDocument_RU(); comExcel.open(_fileName, false); sheetName = comExcel.getActiveSheetName_AC(); comExcel.closeDocument(); comExcel.finalize(); cn.open(strfmt('Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%1;Extended Properties="Excel 12.0;HDR=YES;IMEX=1";', _fileName)); command.activeConnection(cn); command.commandText(strfmt('SELECT count(*) FROM [%1$]', sheetName)); recordSet = command.execute(); progressFile = SysOperationProgress::newGeneral(#aviUpdate, strfmt("Импорт данных из файла %1", _fileName), recordSet.fields().itemIdx(0).value()); command.commandText(strfmt('SELECT * FROM [%1$]', sheetName)); recordSet = command.execute(); ttsbegin; while (!recordSet.EOF()) { progressFile.incCount(); itemCount++; if (itemCount >= #FirstRow) { tmpTable.clear(); tmpTable.ItemId = recordSet.fields().itemIdx(#ItemIdCol).value(); tmpTable.WMSLocationId = recordSet.fields().itemIdx(#WMSLocationIdCol).value(); tmpTable.insert(); progressFile.setText(strfmt("Код %1", tmpTable.ItemId)); } recordSet.moveNext_AC(); } ttscommit; cn.close(); progressFile.kill(); info(strfmt("Импорт файла завершен. Обработано строк: %1", itemCount)); } importFromFile("D:\\номенклатуры.xlsx"); ttsbegin; while select inventSum where inventSum.PhysicalInvent && inventSum.ItemId == "Ставка за обработку" //тест для одной номенклатуры { while select forupdate inventTrans where inventSum.ItemId == inventTrans.ItemId && inventSum.InventDimId == inventTrans.inventDimId { select firstonly tmpTable where tmpTable.ItemId == inventTrans.ItemId; if (tmpTable) //если номенклатуры не было в файле, то ничего не меняем. { inventDim = InventDim::find(inventTrans.inventDimId); inventDim.wMSLocationId = tmpTable.WMSLocationId; //считанная из файла ячейка для данной номенклатуры inventDim = InventDim::findOrCreate(InventDim); inventTrans.inventDimId = inventDim.inventDimId; inventTrans.update(); // по умолчанию dropInventOnHand= NoYes::No, значит пересчитает InventSum и нам ее пересчитывать не нужно } } } ttscommit; }
__________________
Я прибыл к вам из Кантемировской дивизии. А там, как известно, дураков не держат! ![]() |
|
|
![]() |
||||
Тема | Ответов | |||
Местоположение (InventDim.wMSLocationId) | 10 | |||
Ячейки = Местоположение? | 10 | |||
Site в складской аналитике. Как лучше перевести? | 73 | |||
ОС и местоположение | 1 |
|