SAP GUI VBScript切入&粘贴数据更改的块

时间:2018-05-07 14:06:51

标签: vbscript sap sap-gui

要解决运行时错误,我需要在运行(SE16 | AGR_1251)查询时使用VBScript以块的形式读取SAP表AGR_1251。我收到此错误TSV_TNEW_PAGE_ALLOC_FAILED - 没有更多可用于扩展内部表的存储空间。

作为一种解决方法,我们一次按角色手动复制用户的750个角色,向以某个角色结尾的角色添加“*”,然后将其粘贴回多选对话框以获取AGR_1251以块的形式提取结果。

我无法弄清楚如何在vbscript中执行此操作。我如何以编程方式将这些数据分块?理想情况下,我也会重复删除它,但不是必需的。

代码必须在vbscript和javascript上运行,所以我不能使用excel或其他Windows工具,如wscript。到目前为止,我最好的想法是滚动浏览并将角色复制到文件中,将它们读回数组并在读取时重复数据删除,然后更改它们,然后循环返回列表以清除结果。 / p>

这比我几乎不存在的vbscript技能更重要。我不可能是唯一一个遇到这个问题的人。有人能指出我这样做的示例代码吗?

我也对更好的方法提出建议。我认为至少可以说我的解决方案很难实现。

1 个答案:

答案 0 :(得分:0)

好的,这段代码很难用一些不需要的变量,但它确实有效。

Sub Save_AGR_1251s(Tcodes_array,Chunk_size)
    Go_AGR_1251
    writelog("Processing " & ubound(Tcodes_array) & " Tcodes in AGR_1251...")
    k = 0
    s = Chunk_size
    max = ubound(Tcodes_array)
    part = 0
    roles_processed = 0
    For i = 0 To max Step s
        Go_AGR_1251
        session.findById("wnd[0]/usr/txtMAX_SEL").text = ""
        session.findById("wnd[0]/usr/txtMAX_SEL").setFocus
        session.findById("wnd[0]/usr/txtMAX_SEL").caretPosition = 11
        session.findById("wnd[0]/usr/btn%_I1_%_APP_%-VALU_PUSH").press
        k = i + s
        counter = 0
        part = part + 1
        If k > max Then k = max End If
        For j = i To k-1
            ' writelog("Save_AGR_1251s Processing Tcode: " & Tcodes_array(j))
            If (Tcodes_array(j) <> "STMS" or Tcodes_array(j) <> "SCC4") Then
                'NOTE: The slow insert is used on XXXX Prod as a work around to odd UI behavior - change with caution - But SLOW!!
                session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,7]").setFocus
                session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,7]").text = Tcodes_array(j)
                session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,7]").caretPosition = 1
                'VKey 13 = Shift-F1 (insert new row)
                session.findById("wnd[1]").sendVKey 13
                If Debug_flag = True Then
                    writelog("i=" & i  & "  j=" & j  & "  k=" & k  & "  s=" & s &" max=" & max &"  counter= " & counter)
                    writelog("part =" & part & "  roles= " & roles & "roles_processed="& roles_processed & "  Tcodes_array= " & Tcodes_array(j))
                End If ' Debug_flag 
                counter = counter + 1
                roles_processed  = roles_processed  + 1
            End If ' Tcodes_array
        Next 'for j to k
        session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,1]").setFocus
        session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,1]").caretPosition = 13
        session.findById("wnd[1]/tbar[0]/btn[8]").press
        session.findById("wnd[0]").sendVKey 8
        session.findById("wnd[0]").sendVKey 45
        session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").select
        session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").setFocus
        session.findById("wnd[1]/tbar[0]/btn[0]").press
        session.findById("wnd[1]/usr/ctxtDY_PATH").text = dir
        file_name = AGR_1251_filename & "_Part_" & part & c_dash & postfix & Datafile_ext
        session.findById("wnd[1]/usr/ctxtDY_FILENAME").text = file_name
        writelog("Saving file: " & dir & file_name)
        session.findById("wnd[1]/usr/ctxtDY_FILE_ENCODING").text = File_encoding
        session.findById("wnd[1]/usr/ctxtDY_PATH").setFocus
        session.findById("wnd[1]/usr/ctxtDY_PATH").caretPosition = 16
        session.findById("wnd[1]").sendVKey 11
        Go_Home
    Next ' For i
End Sub

请注意,只需执行此操作,您就可以在大多数系统上更快地完成此操作

for i = 1 to 100
    session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1," & 7  & "]").text = "Test " & i
next 'for i