cancel
Showing results for 
Search instead for 
Did you mean: 

LOOP SCIPT ON SAP GUI

0 Kudos

I have Purchase order (PO) and final i need to enter quantity goods receipt, but PO more goods, more line, so i need your help, Loop tick "OK" and change quantity.

I have attach code and image. Please help me

session.findById("wnd[0]").maximize


REM TICK "OK" MAIN GOODS RECEIPT*******
session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM/chkGOITEM-TAKE_IT[4,0]").selected = true
session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM/chkGOITEM-TAKE_IT[4,1]").selected = true
session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM/chkGOITEM-TAKE_IT[4,2]").selected = true


REM CHANGE QUANTITY RECEIPT********
session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM/txtGOITEM-ERFMG[5,0]").text = "5"
session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM/txtGOITEM-ERFMG[5,1]").text = "6"
session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM/txtGOITEM-ERFMG[5,2]").text = "7"

Accepted Solutions (1)

Accepted Solutions (1)

stefan_schnell
Active Contributor
0 Kudos

Hello Mai,

try the following approach. I simulate your table with a multi dimensional array.

Dim MyArray(2, 3)
MyArray(0,0) = 0 : MyArray(0, 1) = 5
MyArray(1,0) = 0 : MyArray(1, 1) = 6
MyArray(2,0) = 0 : MyArray(2, 1) = 7


For i = 0 To 2
  'TICK "OK" MAIN GOODS RECEIPT*******
  session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM/chkGOITEM-TAKE_IT[4," & CStr(i) & "]").selected = true
  'CHANGE QUANTITY RECEIPT********
  session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM/txtGOITEM-ERFMG[5," & CStr(i) & "]").text = CStr(MyArray(i, 1))
Next

CStr is the tiny trick to use the row number as string. To count the rows in the table use the property RowCount. So your could looks like this, but it is untested.

RowCount = session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM").RowCount
For i = 0 To RowCount - 1
  'TICK "OK" MAIN GOODS RECEIPT*******
  session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM/chkGOITEM-TAKE_IT[4," & CStr(i) & "]").selected = true
  'CHANGE QUANTITY RECEIPT********
  session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM/txtGOITEM-ERFMG[5," & CStr(i) & "]").text = "5"
Next

Let us know your results.

Cheers
Stefan

0 Kudos

I have try your code and get error (attach file image). I have attach file .vbs, please help me check it.

Answers (4)

Answers (4)

script_man
Active Contributor

Please try it here:

...
REM line 33
session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM/chkGOITEM-TAKE_IT[4," & CStr(j) & "]").selected = true


session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM/txtGOITEM-ERFMG[5," & CStr(j) & "]").text = COL1
...

Regards,

ScriptMan

0 Kudos

I use next command one more, but get error again at line 33

session.findById("wnd[0]").maximize


Dim objExcel
Dim objSheet, intRow, i
Set objExcel = GetObject(,"Excel.Application") 
Set objSheet = objExcel.ActiveWorkbook.ActiveSheet


REM start reading from the second line*************i la vong lap PO


For i = 1 to objSheet.UsedRange.Rows.Count 
COL1 = Trim(CStr(objSheet.Cells(i, 1).Value))


RowCount = session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM").RowCount


For j = 0 To RowCount -1


REM *************

REM line 33
session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM/chkGOITEM-TAKE_IT[4,CStr(j)]").selected = true


session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM/txtGOITEM-ERFMG[5,CStr(j)]").text = COL1


aux=COL1
next
next
0 Kudos

i use data via Excel, like below code, but i get error "Next"

session.findById("wnd[0]").maximize

Dim objExcel
Dim objSheet, intRow, i
Set objExcel = GetObject(,"Excel.Application") 
Set objSheet = objExcel.ActiveWorkbook.ActiveSheet
REM *************
For i = 1 to objSheet.UsedRange.Rows.Count 
COL1 = Trim(CStr(objSheet.Cells(i, 1).Value))
REM *************
RowCount = session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM").RowCount
For j = 0 To RowCount - 1
REM *************
session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM/chkGOITEM-TAKE_IT[4,CStr(j)]").selected = true
session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM/txtGOITEM-ERFMG[5,CStr(j)]").text = COL1
REM *************
next
stefan_schnell
Active Contributor
0 Kudos

Hello Mai,

you use two for loops, so it is necessary to use two times the next command to close the loops.

Best regards
Stefan

stefan_schnell
Active Contributor
0 Kudos

Hello Mai,

sorry, I forgot the double quotes.

RowCount = session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0002/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM").RowCount

Cheers
Stefan