Hello Forum, Is anybody also seeing this problem with Sage 100 Premium ERP 2013 (Version 5.00.5.0)? An invoice is created (or modified) successfully and the Invoice form is printed, after which the session object becomes corrupted and it is impossible to use it anymore. Our customers have to restart the software after they print an invoice so that the session is recreated. I am posting a script replicating the problem below, it has the spots marked where BOI calls fail. Any advice would be very much appreciated. Thanks, Alex V-Technologies Sub errchk(r, desc, oss, o) if (r = 0) then MsgBox(desc & ": " & o.sLastErrorMsg) oss.nCleanup() oss.DropObject() Set oss = Nothing WScript.Quit end if end sub Const HKEY_CURRENT_USER = &H80000001 Set oReg = GetObject("winmgmts:\\.\root\default:StdRegProv") RetVal = oReg.GetExpandedStringValue(HKEY_CURRENT_USER,"Software\Sage Software\MAS 90 Business Desktop\Settings", _ "MAS90RootDirectory",PathRoot) if retVal 0 then oReg.GetExpandedStringValue HKEY_CURRENT_USER,"Software\ODBC\ODBC.INI\SOTAMAS90","Directory",PathRoot end if PathHome = PathRoot & "\Home" Set oReg = Nothing Set oScript = CreateObject ("ProvideX.Script") 'oScript.TraceOn=true oScript.Init(Pathhome) Set oSS = oScript.NewObject("SY_Session") retVAL = oSS.nLogon() If retVAL = 0 Then User = Trim(InputBox("Enter User Name", "", "ap")) Password = Trim(InputBox("Enter Password", "", "ap")) retVAL = oSS.nSetUser(User,Password) errchk retVal, "SetUser", oss, oScript End If sCompany = oSS.sCompanyCode sCompany = Trim(InputBox("Enter Company Code","Company Code",sCompany)) retVAL = oSS.nSetCompany(sCompany) errchk retVal, "SetCompany", oSS, oSS sDate = oSS.sModuleDate if sDate = "" then sDate = Year(Date) & Right("0" & Month(Date), 2) & Right("0" & Day(Date), 2) end if retVAL = oSS.nSetDate("S/O",sDate) errchk retVal, "SetDate", oSS, oSS retVal = oSS.nSetModule("S/O") errchk retVal, "Set Module", oSS, oSS sDocumentKey = Trim(InputBox("Enter Sales Order Number","SalesOrder Number", "TEST")) oSEC = oSS.nSetProgram(oSS.nLookupTask("SO_SalesOrder_UI")) Set o = oScript.NewObject("SO_SalesOrder_bus", oSS) r = o.nFind(sDocumentKey) errchk r, "SalesOrder find", oSS, o oSEC = oSS.nSetProgram(oSS.nLookupTask("SO_Shipping_UI")) Set s = oScript.NewObject("SO_Shipping_Bus", oSS) fld = "CurrentInvoiceNo$" str = "" r = o.nGetValue(fld, str) errchk r, "GetValue CurrentInvoice Error", oSS, o sInvoiceNumber = str if (str "") then MsgBox("Invoice found: " & sInvoiceNumber) r = s.nFind(sInvoiceNumber) errchk r, "Invoice Number Find failed", oSS, s r = s.nSetKey(sInvoiceNumber) errchk r, "Invoice Number SetKey failed", oSS, s else r = s.nGetNextInvoiceNo(sInvoiceNumber) errchk r, "GetNextInvoiceNumber failed", oSS, s MsgBox("New Invoice Number " & sInvoiceNumber) end if r = s.nSetKey(sInvoiceNumber) errchk r, "Setting Key on invoice number", oSS, s r = s.nSetValue("SALESORDERNO$", sDocumentKey) errchk r, "Setting SalesOrderNumber for the invoice", oSS, s s.oLines.nMoveFirst do while (s.oLines.nEOF = 0) sLineKey = "" s.oLines.nGetValue "LINEKEY$", sLineKey iQuantityOrdered = 0 s.oLines.nGetValue "QUANTITYORDERED", iQuantityOrdered s.oLines.nSetValue "QUANTITYSHIPPED", iQuantityOrdered s.oLines.nMoveNext loop r = s.oLines.nWrite errchk r, "Writing lines", oSS, s r = s.nSetValue("PrintInvoice$", "Y") errchk r, "Setting PrintInvoice field", oSS, s r = s.nWrite errchk r, "Invoice Write", oSS, s o.nFind("") 'retVAL = oSS.nSetProgram(oSS.nLookupTask("SO_PACKINGLISTPRINTING_UI")) retVAL = oSS.nSetProgram(oSS.nLookupTask("SO_INVOICEPRINTING_UI")) errchk retVal, "SetProgram", oSS, oSS 'Set oPrint = oScript.NewObject("SO_PACKINGLISTPRINTING_RPT",oSS) Set oPrint = oScript.NewObject("SO_INVOICEPRINTING_RPT",oSS) oSS.nTerminateUI sFormCode = "STANDARD" sFormCode = Trim(InputBox("Enter Form Code",,sFormCode)) 'sQuickPrint = Trim(InputBox("Try quick print (Y/N)?","","Y")) ' the following can be used to replace the setvalue, write below, but takes longer 'if sQuickPrint = "Y" then ' RetVAl = oPRINT.sQuickPrint = sDocumentKey ' RetVal = oPRINT.nProcessReport( "PREVIEW" ) ' If retVAL = 0 Then ' MsgBox("QuickPrint - nProcessReport Failed - " & oPrint.sLastErrorMsg & " - ErrorNum = " & oPrint.sLastErrorNum) ' Else ' MsgBox("QuickPrint - nProcessReport Success") ' end if 'end if retVal = oPrint.nSelectReportSetting( sFormCode ) errchk retVal, "Select Report Setting", oSS, oPrint RetVal = oPRINT.nSetKeyValue( "ReportSetting$", sFormCode ) RetVal = oPRINT.nSetKeyValue( "RowKey$", "1" ) RetVal = oPRINT.nSetKey errchk retVal, "SetKey", oSS, oPrint ' Set Selection criteria RetVal = oPRINT.nSetValue( "SelectField$", "Invoice Number" ) errchk retVal, "SetValue - SelectField", oSS, oPrint RetVal = oPRINT.nSetValue( "SelectFieldValue$", "Invoice Number" ) errchk retVal, "SetValue - SelectFieldValue", oSS, oPrint RetVal = oPRINT.nSetValue( "Tag$", "TABLE=SO_INVOICEHEADER; COLUMN=INVOICENO$" ) errchk retVal, "SetValue - Table", oSS, oPrint RetVal = oPRINT.nSetValue( "Operand$", "=" ) errchk retVal, "SetValue - Operand", oSS, oPrint RetVal = oPRINT.nSetValue( "Value1$", sInvoiceNumber ) errchk retVal, "SetValue - Value1", oSS, oPrint MsgBox(sInvoiceNumber) 'Write report setting to memory RetVal = oPRINT.nWrite errchk retVal, "Write", oSS, oPrint RetVal = oPRINT.nProcessReport( "PRINT" ) If retVAL = 0 Then MsgBox("nProcessReport warning - " & oPrint.sLastErrorMsg & " - ErrorNum = " & oPrint.sLastErrorNum) '''''''''''''''''''''''''' ' Point of failure '--------------------------- '--------------------------- 'nProcessReport warning - The S/O0000000001SO_INVOICEPRINTING_UI '--------------------------- 'OK '--------------------------- Else MsgBox("nProcessReport Success") end if oSEC = oSS.nSetProgram(oSS.nLookupTask("SO_SalesOrder_UI")) '''''''''''''''''''''''''' ' Point of failure '--------------------------- 'Windows Script Host '--------------------------- 'Script: C:\src\StarShip Client\Current Version\MAS\TestScripts\printInvoice.vbs 'Line: 176 'Char: 1 'Error: Error: 0 in Method LOOKUPTASK 'Code: 80020009 'Source: ProvideX Library '--------------------------- 'OK '--------------------------- Set o = oScript.NewObject("SO_SalesOrder_bus", oSS) r = o.nFind(sDocumentKey) errchk r, "SalesOrder find", oSS, o on error resume next oSS.nCleanUp () if (Err.Number 0) then MsgBox("Warning: Exception while oSS.nCleanUp call, ignoring and continuing: " & Err.Description) ' Point of failure '--------------------------- 'Windows Script Host '--------------------------- 'Script: C:\src\StarShip Client\Current Version\MAS\TestScripts\printInvoice.vbs 'Line: 166 'Char: 1 'Error: Error: 0 in Method CLEANUP 'Code: 80020009 'Source: ProvideX Library '--------------------------- 'OK '--------------------------- end if oSS.DropObject() Set oSS = Nothing Set oScript = Nothing MsgBox("Success")
↧