Import sales orders from master and details text files
The are many code snippets which you can find easily over the internet to import sales orders from a text file or from excel. The purpose of this post is to share my experience of uploading data into sales order form from two different text files. void ImportSalesOrders() { Container con; CustTable custTable; SalesTable salesTable; SalesLine salesLine; Headers headers; Stock details; num newSalesId; Description custDescription; InventTable inventTable; InventDim inventDim; InventSiteId inventSiteId; InventLocationId inventLocationId; CustAccount custAccount; real itemPrice; ItemId itemId; InventDim frominventDim,ToinventDim; int x,y; NumberSeq num; SysOperationProgress progressbar = new SysOperationProgress(); int i; ; progressbar.setCaption(‘Importing Journals’); progressbar.setAnimation(filenameHeader); progressbar.setTotal(30000); for (i = 1; i <= 30000; i++) { progressbar.setText(strfmt(“@SYS105740”, i)); progressbar.setCount(i, 1); } this.importData(); ttsbegin; while select headers { SalesTable = SalesTable::findDocumentNumber(headers.DocumentNumber); if(!SalesTable) { //create sales table salesTable.initValue(); num = NumberSeq::newGetNum(SalesParameters::numRefSalesId()); newSalesId = num.num(); if (salesTable::exist(newSalesId)) { num.abort(); throw error(“@SYS23020”); } salesTable.SalesId = newSalesId; num.used(); if(custDescription != “”) { salesTable.SalesName = custDescription; } custAccount = headers.CustAccount; //fetch the customer details from cust table using account no selected from drop-down list select * from custTable where custTable.AccountNum == custAccount; salesTable.CustAccount = custTable.AccountNum; salesTable.InvoiceAccount = custTable.InvoiceAccount; salesTable.SalesType = SalesType::Sales; salesTable.SalesStatus = SalesStatus::None; salesTable.CurrencyCode = custTable.Currency; salesTable.CustGroup = custTable.CustGroup; salesTable.DeliveryDateControlType = SalesDeliveryDateControlType::SalesLeadTime; //Set dates as systemDateTime salesTable.ReceiptDateRequested = systemdateget(); salesTable.ShippingDateRequested = systemdateget(); salesTable.LanguageId = ‘en-us’; salesTable.DlvMode = ’10’; inventSiteId = headers.InventSiteId; inventLocationId = headers.InventSiteId; salesTable.InventSiteId = inventSiteId; salesTable.InventLocationId = inventLocationId; salesTable.DocumentNumber = headers.DocumentNumber; //Craete Sales Order salesTable.insert(); while select details where headers.DocumentNumber == details.DocumentNumber { salesLine.clear(); // Create Sales Order Line salesLine.SalesId = salesTable.SalesId; salesLine.initFromSalesTable(salesTable); itemId = details.ItemId; salesLine.ItemId = itemId; salesLine.SalesUnit = InventTable::find(salesLine.ItemId).salesUnitId(); select * from inventTable where inventTable.ItemId == salesLine.ItemId; salesLine.initFromInventTable(inventTable); inventDim.clear(); inventDim.InventSiteId = inventSiteId; inventDim.InventLocationId = inventSiteId; salesLine.InventDimId = InventDim::findOrCreate(inventDim).inventDimId; //Set Qty as 1 by default salesLine.SalesQty = details.Qty; salesLine.ConfirmedDlv = salesTable.ShippingDateConfirmed; salesLine.lineNum = SalesLine::lastLineNum(salesLine.salesId) + 1.0; salesLine.RemainInventPhysical = 1; salesLine.RemainSalesPhysical = 1; salesLine.DlvMode = ’10’; salesLine.SalesStatus = SalesStatus::None; salesLine.SalesPrice = details.UnitPrice; salesLine.LineAmount = salesLine.SalesQty * salesLine.SalesPrice; //Insert sales line items