" 现在大环境都讲人工智能、自动化办公等场景的应用,这里我们介绍一下SAP本身自带的自动化工具**" 文章最后附最终脚本**
01
背景需求
SAP:批量录入工具:LSMW/BDC/Script 三大工具
LSMW:应用场景多,实现方法多,但有些事务代码不能录制;
BDC:需要一定开发经验,适用于开发者;
Script:需要简单开发经验,但是容易出错;
02
实现
第一步:系统设置
检查系统SAP脚本录制和回放功能有无启用
执行事务代码:RZ11
输入参数:sapgui/user_scripting
然后回车
![](https://file.jishuzhan.net/article/1780180640235261954/984260debd3ba050d5c1b3d2bdeed125.webp)
![](https://file.jishuzhan.net/article/1780180640235261954/38113fb1354ce2eb1d1ae185147fd1e3.webp)
如果当前值为FALSE则改为TURE,如果当前值为TURE,则表示已经启用,就不需要更改了,改完之后点击保存,会提示,如果系统重启服务,则需要在此更改这里的配置,否则就不生效了。
![](https://file.jishuzhan.net/article/1780180640235261954/2737b68078541ec657b5291f60492d5c.webp)
然后退出所有窗口,在SAP GUI中打开设置
![](https://file.jishuzhan.net/article/1780180640235261954/74dae1f930555ac8684c251651e26d29.webp)
点击启用脚本>应用>确认,后重启SAP GUI
第二步:脚本录制
进入脚本的录制:
![](https://file.jishuzhan.net/article/1780180640235261954/a132d08bf38aefe079e53440f5bcc212.webp)
![](https://file.jishuzhan.net/article/1780180640235261954/4345124e3e7c135fa82a30b6ada8b5ac.webp)
点击增加
![](https://file.jishuzhan.net/article/1780180640235261954/02e873d48a683cf4aed5e7b6c0f34551.webp)
复制保存到后面的文件路径,打开文件,粘贴路径打开
![](https://file.jishuzhan.net/article/1780180640235261954/6b2cf461f85d1b6fb680420f533db850.webp)
![](https://file.jishuzhan.net/article/1780180640235261954/665aa061bd4a6a1b1cfa356268443438.webp)
此时该路径下已有13个脚本,可以更改路径脚本名称为14,如下图
![](https://file.jishuzhan.net/article/1780180640235261954/63174d0dd9fc3646e8fab25a873734f6.webp)
然后点击红色按钮进行录制操作,就是把需要重复的动作在SAP内执行一遍,执行过程中不要有多余的操作,精简不必要的操作,录制完成之后回来点黄色按钮即录制完成。
![](https://file.jishuzhan.net/article/1780180640235261954/cdb90b51646264e3021d4e90543f2699.webp)
绿色按钮为执行按钮,录入完成之后可以点这里执行脚本。
第三步:修改脚本,让脚本能重复执行:
找到对应脚本,点击鼠标右键,用记事本打开
![](https://file.jishuzhan.net/article/1780180640235261954/657b112ae3dfe9f8123c3ba526605c32.webp)
![](https://file.jishuzhan.net/article/1780180640235261954/072cbc70a4fe3e45cb8a0f1cd8dbb55a.webp)
END IF之前的不需要修改,直接忽略
然后在第一个session之前加入打开Excel与循环的语句,明确打开Excel位置和文件名:
dim oExcel,oWb,oSheet
Set oExcel = CreateObject("Excel.Application")
Set oWb = oExcel.Workbooks.Open("D:\mmm.xls")
ON ERROR RESUME Next
for i = 2 to 623
然后修改文件路径:
Set oWb = oExcel.Workbooks.Open("C:\Users\XXX\Desktop\10.xlsx")
为需要录入的数据源文档所在路径,这里按照保存路径修改;
for i = 2 to 2 为EXCL中从第几行开始到第几行结束,比如从第一行开始到第8行结束,则为for i = 1 to 8
![](https://file.jishuzhan.net/article/1780180640235261954/12a959dd7f027f6bf7793331e6b554ac.webp)
![](https://file.jishuzhan.net/article/1780180640235261954/43fadfbab4b3141470bc5c0490b273f4.webp)
把原来手工输入数据的地方,改为从excel中读取数据
![](https://file.jishuzhan.net/article/1780180640235261954/f5a75762ee4a40958bd54ab6d2f561c1.webp)
比如
session.findById("wnd[0]/usr/ctxtVBAK-VBELN").text = "1000001269"
改成
session.findById("wnd[0]/usr/ctxtVBAK-VBELN").text = oExcel.Cells(i,1).Value
然后在最后加上关闭语句:
next
oExcel.WorkBooks.Close
oExcel.Quit
最终Script脚本如下:
If Not IsObject(application) Then
Set SapGuiAuto = GetObject("SAPGUI")
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
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject application, "on"
End If
dim oExcel,oWb,oSheet
Set oExcel = CreateObject("Excel.Application")
Set oWb = oExcel.Workbooks.Open("C:\Users\SAIP\Desktop")
ON ERROR RESUME Next
for i = 1 to 8
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").text = "VA02"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtVBAK-VBELN").text = oExcel.Cells(i,1).Value
session.findById("wnd[0]/usr/ctxtVBAK-VBELN").caretPosition = 10
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/mbar/menu[0]/menu[11]").select
session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
next
oExcel.WorkBooks.Close
oExcel.Quit
原始脚本如下:
If Not IsObject(application) Then
Set SapGuiAuto = GetObject("SAPGUI")
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
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject application, "on"
End If
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").text = "VA02"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtVBAK-VBELN").text = "1000001269"
session.findById("wnd[0]/usr/ctxtVBAK-VBELN").caretPosition = 10
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/mbar/menu[0]/menu[11]").select
session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
第四:提示:
保存执行前SAP GUI只能留一个界面是打开的,然后直接运行Script脚本,
窗口会一步步在前台执行操作,直到结束,但如果有报错,会直接跳入到下一行数据,所以创建后一定要再检查数据,是否有错误,这里也是Script脚本的缺点。
脚本可以直接双击运行。
![](https://file.jishuzhan.net/article/1780180640235261954/afb58bbdb27a6c6cd566e2c2d2c87be6.webp)
公告:周一至周五每日一更,周六日存稿,请您点"关注"和"在看",后续推送的时候不至于看不到每日更新内容,感谢。
这是一条刮刮乐,按住全部选中:点关注的人最帅最美,欢迎:分享+收藏+在看+点赞+关注!
![](https://file.jishuzhan.net/article/1780180640235261954/a0dffb3d12eab9bbbcdfa1cebeb3b62d.webp)
Allways on the way