首页 > 其他分享 >SAP总结

SAP总结

时间:2023-08-24 22:11:11浏览次数:36  
标签:总结 findById wnd ii session usr SAP col

 

1. 获取session(窗口)
Set SapGuiAuto = GetObject("SAPGUI")  'Get the SAP GUI Scripting object
Set SAPApp = SapGuiAuto.GetScriptingEngine 'Get the currently running SAP GUI
Set SAPCon = SAPApp.Children(0) 'Get the first system that is currently connected
Set session = SAPCon.Children(0) 'Get the first session (window) on that connection

2. 遍历当前excel表
For i = 2 To ActiveSheet.UsedRange.Rows.Count
    
'Exit For
Next i

3. 进入tcode
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nme22n"

4. 回车
session.findById("wnd[0]").sendVKey 0

5. 菜单/按钮/标签页
session.findById("wnd[0]/mbar/menu[3]/menu[7]").Select
session.findbyid("wnd[0]/tbar[1]/btn[21]").press
session.findbyid("wnd[0]/usr").FindByNameEx("TABHDT1", 91).Select

6. 字段
6.1 输入
session.findById("wnd[0]/usr/txtEINE-PEINH").Text = price_per
session.findbyid("wnd[0]/usr/tblSAPDV70ATC_NAST3/cmbNAST-NACHA[3,0]").Key = "1"

6.2 取值
price_per = session.findById("wnd[0]/usr/txtEINE-PEINH").Text

6.3 检测是否可编辑
If session.findbyid("wnd[0]/usr/tblSAPDV70ATC_NAST3/cmbNAST-NACHA[3,0]").changeable = True Then

8. 系统消息
8.1 消息类型:错误E,警告W,消息S
session.findById("wnd[0]/sbar").MessageType
8.2 消息文本
session.findById("wnd[0]/sbar").Text

9. 表格(SAPMV50ATC_LIPS_PICK 是表格名)
9.1 获取表格控件对象
set grid = session.findById("wnd[0]/usr").findByNameEx("SAPMV50ATC_LIPS_PICK", 80)

9.2 总行数
Total_items = session.findById("wnd[0]/usr").findByNameEx("SAPMV50ATC_LIPS_PICK", 80).VerticalScrollbar.Maximum + 1  '
If Total_items = 0 Then Total_items = 1

9.3 每屏(页)行数
PageSize = session.findById("wnd[0]/usr").findByNameEx("SAPMV50ATC_LIPS_PICK", 80).VerticalScrollbar.PageSize

9.4 翻页
For j = 1 To Total_items
	pageindex = (j - deleted_rows) Mod PageSize
	If pageindex = 1 Then
		If j > 1 Then session.findById("wnd[0]/tbar[0]/btn[82]").press   '点翻页按钮
		currentrow = 0
	Else
		currentrow = currentrow + 1
	End If
Next j	
	
9.5 竖向滚动条,需在输入当前行数据后回车并处理警告提示,否则系统自动滚回第0(1)行
Position = session.findbyid("wnd[0]/usr").FindByNameEx("SAPLMEGUITC_1211", 80).verticalScrollbar.Position
session.findbyid("wnd[0]/usr").FindByNameEx("SAPLMEGUITC_1211", 80).verticalScrollbar.Position = Position + 1

9.6 当前行(行号从0开始,录制时产生的[列,行],)
Set cur_row = session.findById("wnd[0]/usr").findByNameEx("SAPMV50ATC_LIPS_PICK", 80).Rows(行号)

9.7 当前格(i是列序号,从0开始,),
cell = cur_row(列序号)
可以取文本值 cell.Text,可以SetFocus等

9.8 报表类 如COOIS shell grid 遍历取数
Set grid = session.findById("wnd[0]/usr/cntlCUSTOM/shellcont/shell/shellcont/shell")
For i = 1 To grid.VisibleRowCount
   Cells(i, 1) = grid.getcellvalue(i - 1, "AUFNR")
   Cells(i, 2) = grid.getcellvalue(i - 1, "MATNR")
Next i

10. 弹窗
10.1 检测
session.ActiveWindow.Name = "wnd[1]"

10.2 提取显示的内容
session.ActiveWindow.PopupDialogText
另一种提取方法
If session.findbyid("wnd[1]").Text Like "Release*" Then 

10.3 关闭
session.findbyid("wnd[1]/").Close

11. 异常处理(试错法)
On Error Resume Next
   session.findById ("wnd[1]/usr/btnSPOP-VAROPTION1")
If Err.Number = 0 Then
	session.findById("wnd[1]/usr/btnSPOP-VAROPTION1").press
End If

12. 提取消息文本中的单据号
If InStr(Result, "has been saved") > 0 Then
	array1 = Split(Result, " ")
	Cells(i, 10) = array1(UBound(array1) - LBound(array1) - 3)     'extract delivery number from status text "FZ delivery 3333330 has been saved"
End If

13. 方法
Function 方法1(参数)
	方法1 = 111
End Function

14. 常见问题
14.1 处理非预期的弹窗与出错,警告,特别是表格行处理时,每一行输入数据后要按回车并处理可能出现的警告提示(回车)
14.2 动态屏幕,
14.3 表格字段的位置(列序号),用名称定位,MIGO,ME2N中每一行都因业务数据(K库存)不同,各列的序号也不一样
有多少个列就设多少个代表列序号的变量,用名称去匹配,需循环每行时都重新获取列序号

'Excel requires that the session number is an integer, so you can use the type conversion from Cint(). 
'Strange that this is advised/required even when SessionNumber is defined as an integer.
'替换下面的表名SAPLMIGOTV_GOITEM、字段名GOITEM-LOGLEVEL及字段名变量col_log_level
Set cur_row = session.findById("wnd[0]/usr").FindByNameEx("SAPLMIGOTV_GOITEM", 80).Rows(0)
col_count = 0 
For ii = 0 To cur_row.Count - 1     'get the col index due to different user settings
	col_count = col_count + 1		'默认找到了列
	If cur_row(ii + 0).Name = "GOITEM-LOGLEVEL" Then '+0 强制转整数以免出Bad index type for collection access
		col_log_level = ii + 0
	ElseIf cur_row(ii + 0).Name = "GOITEM-MAKTX" Then
		col_mat_desc = ii + 0
	Else
		col_count = col_count - 1		'没找到就不计数
	End If
	If col_count >= 2 Then	'全部找到就退出
		Exit For
	End If
Next ii
Set cur_row = Nothing

15. 调试
在弹出出错对话框,点debug按钮,进入代码调试界面,鼠标悬停可显示变量值,也可右键添观察变量,在底下窗口查看变量详情,
特别是对象变量的可用属性,在代码中可使用Debug.Print输出变量内容,在immediate窗口中查看变量输出

16. 常见出错
The method got an invalid argument
输入了字段不支持的值,如超过长度的文本,数值字段输入了文本,下拉选单输入了非选单值(内部只接受key值)

17. 如何动态选择物料主数据中的视图,完整代码请参考MM02那篇文章
        For ii = 0 To 18
                On Error Resume Next  'in case view not yet created/available for change
                    session.findById ("wnd[1]/usr/tblSAPLMGMMTC_VIEW/txtMSICHTAUSW-DYTXT[0," & CStr(ii) & "]")
                If Err.Number <> 0 Then Exit For
                If session.findById("wnd[1]/usr/tblSAPLMGMMTC_VIEW/txtMSICHTAUSW-DYTXT[0," & CStr(ii) & "]").Text = "General Plant Data / Storage 1" Then
                    session.findById("wnd[1]/usr/tblSAPLMGMMTC_VIEW").getAbsoluteRow(ii).Selected = True  'select Purchase Order Text view
                    Exit For
                End If
            Next ii

标签:总结,findById,wnd,ii,session,usr,SAP,col
From: https://www.cnblogs.com/pythonClub/p/17655290.html

相关文章

  • 从SAP TableControl中读取数据
    classSapGuiTableControl:"""读取GuiTableControl对象的数据。"""@staticmethoddefget_data(session,_id,columns=None):"""获取指定列的数据,索引从0开始。:paramsession:SAP的GuiSession......
  • 70th 2023/8/19 模拟赛总结53
    本次赛完就被拉走去听讲了,来补救一下总结这次依旧爆炸,却没有完全炸裂,110pts,暴力没拿完,试图切掉T3,失败,事后发现离正解很近然后暴力分没拿完,T2还有10分,但为了打T3只拿了20,结果T3只拿了和暴力相同的分,最后比全暴力分都低没法不服,因为自己得承担失误还是那句:至少迈出了这步。比......
  • 69th 2023/8/18 模拟赛总结52
    本次再次爆零,甚至原因都差不多又是因为想切题,又是T2,又是熟悉的2个半小时,硬刚一道题,下场惨烈这一次开始思索原因,自己在开打T2之前,选择相信了直觉,没有先将思路过一遍脑子再开始打这次的看题+思考时间有足足50分钟,到了8点40才开题,然后再加上T2调了一会,发现打完后只剩1h发现只......
  • 56th 2023/7/4 模拟赛总结40
    额,这场比赛应该打得算认真,虽然最后因为一些奇怪的因素导致没有拿到所想的排名,但是总体可以首先先思考了很久,T2T3都挺接近正解的,但是因为一些知识点的欠缺二没有打下来如:T3的缩点,还有T2的一部分结论然后当时是把T2暴力拉满,还想哈希卡常过的,结果是低估了数据的强度,被卡的死死的,拿......
  • 总结一下强化学习中的面试问题
    1、PPO算法运用了clip函数限制取值范围,为什么还要加上min呢?2、AC架构与PPO之间的区别?3、什么是装饰器?4、lamada函数?5、什么是model-based与model-free?6、python中map函数的用法?7、准确率、精确率、召回率、F1score的意义?8、PPO的上一个策略收集到的经验可以用多少次?......
  • 【面试题总结】
    【面试题总结】持续更新~~~【面试题一】数据库的三大范式【面试题二】MySQL的索引类型及作用【面试题三】事务的特性和隔离级别【面试题四】脏读&不可重复&读幻读【面试题五】mysql5.7以后默认隔离级别【面试题六】qps&tps&并发量&pv&uv【面试题七】什么......
  • 总结:第一章:从入门到入职拿到过万月薪我需要这些技能(400多篇博文系统归类)P5级
    博文介绍:这篇博文我改了一周,职业生涯所有技能例如javaSE基础,ssm框架,springcloud全家桶,dubbo+zk框架,MySQL数据库,MongoDB数据库,redis缓存,es与solr全文搜索,linux系统,docker应用容器引擎,Activiti工作流,Fastdfs分布式文件系统,ActiveMQ与RabbitMQ消息队列,JUC并发线程工具......
  • HCIP_OpenStack总结部分
    目录第一章架构介绍1.OpenStack简介1.1OpenStack简述1.2OpenStack工作原理概述1.3开源OpenStack版本介绍1.4设计理念1.5OpenStack与云计算2.OpenStack架构2.1OpenStack架构简介3.OpenStack核心服务4.OpenStack服务交互第二章界面管理1.Horizon简介1.1简介1......
  • 【考后总结】8 月 CSP-S 模拟赛 9
    8.24CSP模拟29IWanttoBreakFree-QueenIwanttobreakfreeIwanttobreakfreeIwanttobreakfreefromyourliesYou'resoselfsatisfiedIdon'tneedyouI'vegottobreakfreeGodknows,GodknowsIwanttobreakfreeI've......
  • 20230824巴蜀暑期集训测试总结
    T1不是特别难,打暴力的时候想到一个优化,感觉能过。出分发现TLE了一个点。因为循环顺序!把限制更紧的循环放在外面!(updatein《一些tricks》)。T2考场打了一个\(O(n!n)\)的暴力拿\(10pts\)。推式子有手就行,但是起步很难(个人认为),考场上感觉无从下手。不知道该怎么描述这个技巧......