Script - Sales Order Line - Promise Date Change

SOLVED

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=!")