HELP!!!
'm getting a runtime Error 440 < Error: 0 in Method ADDLINE> after the MsgBox "Add Lines"
What's the issue?
im Answer As String
Dim MyNote As String
'Place your text here
MyNote = "Import Orders into Sage?"
'Display MessageBox
Answer = MsgBox(MyNote, vbQuestion + vbYesNo, "Orders")
If Answer = vbYes Then
DoCmd.SetWarnings False
Me.Status = "Processing Sales Orders"
' Used to get MAS90\Home path
Dim SOTAMAS90_DSN As Object
Dim PVXCOM_InitPath As String
' ProvideX.Script Object
Dim oPVX As Object
' ProvideX Objects (ProvideX.PvxDispatch)
Dim oSS As Object
Dim soINVOICE As Object
' Variables used as Parameters that will have their values changed on ProvideX method calls.
' These must be initialized with any value of their Data Type, Eg. 0 for Int, "" for strings,
' for their type to be recognized through COM.
' Numeric parameters
Dim CheckQuantity As Integer
Dim QuantityOrdered As Integer
Dim tmpQuantityShipped As Integer
Dim QuantityBackOrder As Integer
Dim LineShipQty As Integer
' String Parameters
Dim PONumber As String
Dim LastPO As String
Dim InvoiceNo As String
Dim ItemCode As String
Dim ItemType As String
Dim JobNo As String
Dim LineKey As String
Dim LineSeqNo As String
Dim OrderNo As String
Dim LineOrderNo As String
Dim LineItemNo As String
Dim OrderDate As String
' Variables used for return values from ProvideX methods or as Parameters
' that will not have their value changed. No need to initialize.
' Numeric return values
Dim retVal, TaskID As Integer
'Get the path to mas90\home which is required by the Init() method
Set oReg = GetObject("winmgmts:\\.\root\default:StdRegProv")
oReg.GetExpandedStringValue &H80000001, "Software\ODBC\ODBC.INI\SOTAMAS90", "Directory", PathRoot
pathhome = PathRoot & "\Home"
Set oReg = Nothing
Set oScript = CreateObject("ProvideX.Script")
'oScript.Init("C:\Program Files\Sage Software\MAS 90\Version4\MAS90\Home")
oScript.Init (pathhome)
Set oSS = oScript.NewObject("SY_SESSION")
'The Logon method returns 1 if MAS90 Security is not enabled or if
'MAS90 has been configured to use Windows Security
retVal = oSS.nlogon()
'If the Logon method fails then you must use the SetUser method to be allowed access
If retVal = 0 Then
'User = Trim(InputBox("Enter User Name"))
User = "Admin" '*** TEST
'Password = Trim(InputBox("Enter Password"))
Password = "xxyzzy" '**** TEST
retVal = oSS.nSetUser(User, Password)
End If
'If the SetUser fails, display LastErrorMsg and quit
If retVal = 0 Then
MsgBox (oSS.sLastErrorMsg & vbCrLf & "Quiting")
'ERROR oSS.nCleanup() ' Call Cleanup() before dropping the Session Object
'ERROR oSS.DropObject()
Set oSS = Nothing
DoCmd.SetWarnings True
Exit Sub
End If
'Set MAS 90 Company and Module
'Company must be configured to Allow External Access
retVal = oSS.nSetCompany("ABC") '**** TEST
'If SetCompany fails, display LastErrorMsg and quit
If retVal = 0 Then
MsgBox (oSS.sLastErrorMsg & vbCrLf & "Quiting")
'ERROR oSS.nCleanup() ' Call Cleanup() before dropping the Session Object
'ERROR oSS.DropObject()
Set oSS = Nothing
DoCmd.SetWarnings True
Exit Sub
End If
retVal = oSS.nSetDate("S/O", "20181001")
retVal = oSS.nSetModule("S/O")
'MsgBox "Test " & pathhome & User & Password
retVal = oSS.nSetProgram(oSS.nLookupTask("SO_SalesOrder_ui")) ' upper-case task name
If retVal = 0 Then
MsgBox ("Unable to set program" & oSS.lastErrormsg)
Set oSS = Nothing
DoCmd.SetWarnings True
Exit Sub
End If
' S/O Order business object
oSEC = oSS.nSetProgram(oSS.nLookupTask("SO_SalesOrder_ui"))
Set oOrder = oScript.NewObject("SO_SalesOrder_bus", oSS) '**** TEST
Set oLines = oScript.NewObject("SO_SalesOrderDetail_bus", oSS)
' Create a new header record using the next available invoice number
Dim dbs As DAO.Database
Dim rstMain As DAO.Recordset
Dim rstLine As DAO.Recordset
Set dbs = CurrentDb()
SqlStr = "SELECT * FROM OrderExport"
Set rstMain = dbs.CreateQueryDef("", SqlStr).OpenRecordset
'loop through all table names
With rstMain
.MoveFirst
LastPO = rstMain!PO_Number
etVal = oOrder.nGetNextSalesOrderNo(OrderNo)
Do Until rstMain.EOF
PONumber = rstMain!PO_Number
If PONumber <> LastPO Then
' Create header record using the next available order number
r = 0
r = oOrder.nGetNextSalesOrderNo(OrderNo)
Else
End If
LineItemNo = rstMain!Line
OrderDate = rstMain!ShipStart
ShipTo = rstMain!ShipToCode
ItemCode = rstMain!Model_Number
QuantityOrdered = rstMain!Ordered
QuantityBackOrder = rstMain!BackOrder
LComment = rstMain!Comment
MsgBox "Next Order no " & OrderNo & " PO Order no " & PONumber & " LineItemNo " & LineItemNo 'TEMP ****
r = oOrder.nSetValue("SalesOrderNo$", OrderNo)
r = oOrder.nSetValue("ARDivisonNo$", "01")
r = oOrder.nSetValue("CustomerNo$", "TEST")
r = oOrder.nSetValue("CustomerPONO$", PONumber)
r = oOrder.nSetValue("ShipExpireDate$", InvoiceDate)
MsgBox "Add lines"
r = oOrder.oLines.nAddLine() '****TEMP
r = oOrder.oLines.nSetValue("ItemCode$", ItemCode)
r = oOrder.oLines.nSetValue("QuantityOrdered", QuantityOrdered)
r = oOrder.oLines.nSetValue("QuantityBackOrdered", QuantityBackOrder)
r = oOrder.oLines.nSetValue("CommentText$", LComment)
r = oOrder.oLines.nwrite()
If Not (r = 1) Then
Console.WriteLine ("Lines.Write fail: " + Order.oLines.sLastErrorMsg + vbCrLf + "ItemNumber: " + ItemCode)
End If
If LastPO <> PONumber Then
r = oOrder.nwrite()
End If
'Read next Order
LastPO = PONumber
.MoveNext
Loop
End With 'Done with orders
Me.Status = ""
MsgBox "Import to Sales Invoice complete"
' Else
End If