将SAP数据从Gridview对象下载到Access数据库表中

2020-09-06 23:34发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好 我已经使用SAP GUI...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我已经使用SAP GUI脚本和Access VBA从SAP事务代码生成SAP报告。

然后,我尝试使用Gridview对象中的数据来更新Access中要存储数据的表。 对于Gridview对象中的每个值,我都使用GetCellValue命令。

在任何时候,我只能下载204条记录,原始SAP报表中大约有800条报告行。 我没有所知道的代码或设置,这会限制下载。

204条记录有什么特别之处吗? 使用Gridview存储数据时,SAP可能具有这种能力吗?

有人知道吗?

这是我要使用的Access内部的VBA代码,用于2个不同的数据列:

rsSAPActuals_Orders2019.AddNew

rsSAPActuals_Orders2019!BillingNumber = Gridview.GetCellValue(i," AUFNR")rsSAPActuals_Orders2019!CostCategory = Gridview.GetCellValue(i," KSTAR")

rsSAPActuals_Orders2019.Update

谢谢。

1条回答
compass1988
2020-09-07 00:06

存在可见的行,可以通过脚本进行交互。 完成可见的设置后,您需要向下滚动,才能获得"下一页"。

下面是我用来在SM30中的表上进行迭代的代码段。 它并不完全相同,但是提供了一种与需要分页的值网格进行交互的模式。

'**********************开始正式脚本循环********************  ***********
     对于nRow = 1到inp.Range.Rows.Count-1
        


         如果1 = 2则'inp.DataBodyRange(nRow,MsgCol)<>""然后'跳过逻辑,未在SM30中使用更新
            
             '跳过已采取反馈措施的条目。
         其他:
             滚动到活动记录。
             inp.ListRows.Item(nRow).Range.Select
 '**********************开始正式脚本循环***********************  ********
 '********************在此处输入您的SAPGui脚本************************  ***
     '使用格式" inp.DataBodyRange(nRow,'列号/变量')"
    做
         如果tDataFinished <>" X"然后
        
         对于tObjRow = 1 + notInitialLoop到toRow
             对于tObjCol = 1 Tobj.Columns.Count
                     如果tDataLoopRow> UBound(inp.DataBodyRange.Value,1)然后
                         tDataFinished =" X"
                         退出做
                     万一
                     如果tObjChild.Item(tObjItemNum + 0).Changeable = False,则
                         '可见列,不希望输入数据。
                     ElseIf tObjChild.Item(tObjItemNum + 0).Type =" GuiCTextField"或tObjChild.Item(tObjItemNum + 0).Type =" GuiTextField"然后
                         如果IsDate(inp.DataBodyRange(tDataLoopRow,tDataLoopColumn))= True和Len(inp.DataBodyRange(tDataLoopRow,tDataLoopColumn))> 5然后
                             如果inp.DataBodyRange(tDataLoopRow,tDataLoopColumn)<=#12/31/1899#那么由于Lotus 1-2-3,'excel过去的日期很奇怪
                                 tObjChild.Item(tObjItemNum + 0).text = DateConvert(inp.DataBodyRange(tDataLoopRow,tDataLoopColumn)+ 1,"。")
                             其他:
                                 tObjChild.Item(tObjItemNum + 0).text = DateConvert(inp.DataBodyRange(tDataLoopRow,tDataLoopColumn),"。")
                             万一
                         其他:
                             tObjChild.Item(tObjItemNum + 0).text = inp.DataBodyRange(tDataLoopRow,tDataLoopColumn)
                         万一
                     ElseIf tObjChild.Item(tObjItemNum + 0).Type =" GuiComboBox"然后
                         tObjChild.Item(tObjItemNum + 0).Key = inp.DataBodyRange(tDataLoopRow,tDataLoopColumn)
                        
                     ElseIf tObjChild.Item(tObjItemNum + 0).Type =" GuiCheckBox"然后
                         如果inp.DataBodyRange(tDataLoopRow,tDataLoopColumn)=""然后
                             tObjChild.Item(tObjItemNum + 0).Selected = False
                         其他:
                             tObjChild.Item(tObjItemNum + 0).Selected = True
                         万一
                     其他:
                         '其他条件
                     万一
                
                 如果inp.DataBodyRange(tDataLoopRow,1)=""然后
                     tDataFinished =" X"
                     退出做
                 万一
                
        
                 'tObjItemNum = tObjCol *可见行
                 tObjItemNum = tObjItemNum +可见行
                 tDataLoopColumn = tDataLoopColumn + 1
             下一个tObjCol
            
             '检查是否应提交当前批次
             如果CommitAfterX.DataBodyRange.Value> 0然后
                 如果tDataLoopRow Mod CommitAfterX.DataBodyRange.Value = 0,则
                     调用commitCurrentUpdates(session,TargetTable,tTargetTransport)
                     '重置对象更新索引
                     tObjRow = -1
                     '重置模式匹配表,分配给tObj进行项目维护
                     设置为tobj = session.FindById(tGuiTableControl)
                     设置tObjChild = tobj.Children
                 其他:
                     x = y
                 万一
             万一
            
             tDataLoopRow = tDataLoopRow + 1
             tDataLoopColumn = 1
             tObjItemNum = tObjRow
         下一个tObjRow
            
             notInitialLoop = 1
             'tObjRow = 1
             tObjItemNum = 1
            
             '设置下一行以准备提交或可见行的下一页
             session.FindById(" wnd [0]/mbar/menu [2]/menu [2]")。选择
             '检查和管理数据输入问题。
             调用PreSaveHandler(session)
           
             '重置模式匹配表,分配给tObj进行项目维护
             设置为tobj = session.FindById(tGuiTableControl)
             设置tObjChild = tobj.Children
             如果tObjRow> = UBound(inp.DataBodyRange.Value,1)然后
                 tDataFinished =" X"
             其他:
                 '将tObjRow设置到重置位置
                 tObjRow = 2
             万一
            
         万一
         循环直到tDataFinished =" X"
        
         '保存
         session.FindById(" wnd [0]/tbar [0]/btn [11]")。press
         '可运输?
         调用TransportSave(session,tTargetTransport.DataBodyRange.Value)
        
        
         session.FindById(" wnd [0]/tbar [0]/btn [3]")。press
         session.FindById(" wnd [0]/tbar [0]/btn [3]")。press
        
    
 '********************在此处结束您的SAPGui脚本************************  *****
     '保存SAP为该行数据返回的消息
         设置zstatus = New SapStatus
         呼叫zstatus.CatchSAPErrorMsg(session)
         如果zstatus.ErrText <>""然后
             调用SetScriptStatus(session.FindById(" wnd [0]/sbar")。text)
         其他:
             调用SetScriptStatus(" Finished")
         万一
    
         如果tDataFinished =" X"然后
             退出
         万一
        
         万一
     下一个
 

一周热门 更多>