Hi,
I need to change Promise Dates on multiple Sales Order Lines for a range of item numbers. I wrote a little script that connects via ODBC into Sage and grabs the SalesOrderDetail information for the items that need to be changed and puts it into a RecordSet. That part works fine. I then loop through the RecordSet and try to change the PromiseDate. That doesn't work correctly. I get an error that the permissions for IM_Warehouse are not correct. Has anyone an idea how I would properly change the PromiseDate in my script?
I am running the script as a Button Script from within Sage.
Thanks for your help.
Best,
B.
'*** Variables and Objects
vSQL = ""
vConnStr = ""
oConn = 0
oRS = 0
retVal = oSession.AsObject(oSession.UI).Messagebox("","Running!","icon=!")
'*** get Recordset with SalesOrders via ODBC
vConnStr = "DSN=SOTAMAS90;UID=XXX|CTW;PWD=XXXXX"
Set oConn = CreateObject("ADODB.Connection")
Set oRS = CreateObject("ADODB.Recordset")
oConn.Open vConnStr
vSQL = "SELECT SO_SalesOrderDetail.SalesOrderNo, SO_SalesOrderDetail.LineKey, SO_SalesOrderDetail.ItemCode, SO_SalesOrderDetail.PromiseDate FROM SO_SalesOrderDetail WHERE (SO_SalesOrderDetail.PromiseDate={d '2018-02-22'}) AND (SO_SalesOrderDetail.ItemCode>='770070') AND (SO_SalesOrderDetail.ItemCode<='770140')"
oRS.Open vSQL, oConn
'*** SO_SalesOrderDetail - KPRIMARY: SalesOrderNo+LineKey
set oSO = oSession.AsObject(oSession.GetObject("SO_SalesOrder_Bus"))
'set oSoDetail = oSession.AsObject(oSession.GetObject("SO_SalesOrderDetail_Bus"))
'*** Loop Through all LineItems
i = 0
If (Not oRS.EOF) Then
retVal = oRS.MoveFirst()
Do While (Not oRS.EOF)
sOrderNo = oRS.Fields.Item("SalesOrderNo").Value
sLineKey = oRS.Fields.Item("LineKey").Value
retVal = oSO.SetKeyValue("SalesOrderNo$", sOrderNo)
retVal = oSO.SetKey()
IF retVal = 1 Then
Set oLines = oSO.AsObject(oSO.Lines)
retVal = oLines.SetKeyValue("SalesOrderNo$", sOrderNo)
retVal = oLines.SetKeyValue("LineKey$", sLineKey)
retVal = oLines.SetKey()
If retVal = 1 Then
retVal = oLines.SetValue("PromiseDate$", "20180323")
retVal = oLines.Write()
i = i + 1
oSO.Write()
End If
End If
retVal = oRS.MoveNext()
Loop
End If
oSoDetail = 0
oRS.Close
oConn = 0
retVal = oSession.AsObject(oSession.UI).Messagebox("","Promise Date changed on " & CStr(i) & " line items","icon=!")