我想打开ME 49交易中编号为“175315
“的供应商的报价,方法是将光标定位在其编号(3
行)上,然后双击或按键盘上的F2键。
当我检查“175315
“或“138992
“的技术信息时,它显示EKKO-LIFNR
为屏幕字段,LIFNR
为字段名称,EKKO
为表格:
我尝试记录SAP GUI脚本,但它会记录我单击字段的位置,如wnd[0] /usr/lbl[77,3]
。位置每次都不同,但行相同,即3
。
以下是SAP记录的VBScript
If Not IsObject(SapGuiAuto) Then
Set SapGuiAuto = GetObject("SAPGUI")
End If
If Not IsObject(application) Then
Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = application.Children(0)
End If
If Not IsObject(session) Then
Set session = connection.Children(0)
End If
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").text = "me49"
session.findById("wnd[0]/usr/ctxtP_EKORG").text = "e002"
session.findById("wnd[0]/usr/ctxtP_EBELN-LOW").text = "21981156"
session.findById("wnd[0]/usr/ctxtP_EBELN-LOW").setFocus
session.findById("wnd[0]/usr/ctxtP_EBELN-LOW").caretPosition = 8
session.findById("wnd[0]").sendVKey 8
session.findById("wnd[0]/usr/lbl[73,3]").setFocus
session.findById("wnd[0]/usr/lbl[73,3]").caretPosition = 4
session.findById("wnd[0]").sendVKey 2
我尝试了下面的代码,但它给出了运行时错误619
If session.findById("wnd[0]/usr/txtEKKO-LIFNR").Text = "175315" Then
session.findById("wnd[0]/usr/txtEKKO-LIFNR").SetFocus
session.findById("wnd[0]").sendVKey 2
End If
EDIT-找到了解决方案,但当我尝试使用F8手动进入时,do while循环从未停止,即使AnfrageNr = 175315。当我直接运行它时,它打开了175315的报价。请建议有效的解决方案或其他方法。
On Error Resume Next
Dim i As Integer
If Not IsObject(ApplicationGUI) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set ApplicationGUI = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
Set Connection = ApplicationGUI.Children(0)
End If
If Not IsObject(session) Then
Set session = Connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject ApplicationGUI, "on"
End If
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nme49"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtP_EKORG").Text = "E002"
session.findById("wnd[0]/usr/ctxtP_EBELN-LOW").Text = "21983729"
session.findById("wnd[0]/usr/ctxtP_EBELN-LOW").SetFocus
session.findById("wnd[0]/usr/ctxtP_EBELN-LOW").caretPosition = 8
session.findById("wnd[0]").sendVKey 8
For i = 1 To 199
Do While AnfrageNr <> 175315
AnfrageNr = session.findById("wnd[0]/usr/lbl[" & i & ",3]").Text
i = i + 1
session.findById("wnd[0]/usr/lbl[" & i & ",3]").SetFocus
Loop
Next i
session.findById("wnd[0]/usr/lbl[" & i & ",3]").SetFocus
session.findById("wnd[0]").sendVKey 2
MsgBox "result:" & AnfrageNr
1条答案
按热度按时间rlcwz9us1#
首先,你需要知道ABAP列表不像一般的屏幕,ABAP列表中的字段不是由字段名来标识,而是由它们的位置来标识,技术信息是没有帮助的。
从视觉上看,这是一个ABAP列表(仅限等宽字体):
这是一个通用屏幕(标签使用比例字体):
此脚本在ABAP列表中的所有字段处循环:
对于上面的ABAP列表(第一个屏幕截图),脚本将显示:
循环从上到下,从左到右,你不能只看一行的字段,但是你可以在给定行之后停止循环:
每个字段可以是
GuiLabel
、GuiTextField
或GuiCheckBox
类型,并具有以下公共属性:CharLeft
:ABAP列表中的水平位置CharTop
:ABAP列表中的垂直位置Text
(或DisplayedText
)Id
:按位置显示的字段名称Type
:对象的类型通过修改上面的脚本,您将能够找到行
2
(CharTop = 2
)中所有供应商的水平位置(CharLeft
)和编号(Text
),最后您可以将光标定位到所需的供应商上。在下面的代码中,重用您的代码,
i
将取值CharLeft
(使用lbl
,因为它是GuiLabel
字段,对于GuiTextField
和GuiCheckBox
字段,将分别为txt
和chk
):但是,除了
field.CharLeft
之外,您还可以直接使用在循环期间获得的field
或field.Id
。