SAP GUI VBScript以剪切&;在数据更改的情况下粘贴块

SAP GUI VBScript以剪切&;在数据更改的情况下粘贴块,vbscript,sap-gui,sap-basis,Vbscript,Sap Gui,Sap Basis,为了避免运行时错误,我需要在运行(SE16 | AGR_1251)查询时使用VBScript从SAP表AGR_1251中分块读取。我收到这个错误TSV_TNEW_PAGE_ALLOC_失败-没有更多的存储空间可用于扩展内部表 作为一种解决方法,我们一次手动按角色从用户复制750个角色,在以某个字符结尾的角色中添加“*”,然后将其粘贴回多选对话框,以获得AGR_1251提取结果 我不知道如何在vbscript中执行此操作。如何以编程方式将此数据分块?理想情况下,我也会进行重复数据消除,但这不是必需

为了避免运行时错误,我需要在运行(SE16 | AGR_1251)查询时使用VBScript从SAP表AGR_1251中分块读取。我收到这个错误TSV_TNEW_PAGE_ALLOC_失败-没有更多的存储空间可用于扩展内部表

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

我不知道如何在vbscript中执行此操作。如何以编程方式将此数据分块?理想情况下,我也会进行重复数据消除,但这不是必需的

代码必须在vbscript和javascript上运行,因此我不能使用excel或其他windows工具,如wscript。到目前为止,我的最佳想法是滚动浏览角色并将其复制到文件中,将其读回阵列中,并在读取时进行重复数据消除,然后对其进行更改,然后在列表中循环以丢弃结果

这远远超过了我几乎不存在的vbscript技能。我不可能是唯一一个有这个问题的人。有人能给我指一下这样做的示例代码吗


我也愿意接受关于更好方法的建议。至少可以说,我的解决方案很糟糕。

好的,这段代码中有很多不需要的变量,但它可以工作

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

我不认为你会找到一些固定的代码来做这件事。VBScript中的SAP脚本通常非常特定于您正在运行的任何程序。这感觉像是一个问题,可以通过启用RFC的ABAP例程、ABAP将数据写入文件系统以供使用,或者通过编写SOAP服务来获取这些数据来更好地解决。此外,我无法想象在javascript中您将如何做到这一点。至少使用vbscript,您可以连接到计算机上的
SAPFEWSELib
库。我真的认为您需要一个SAP开发人员来帮助开发RESTAPI,以获得您所需要的一切。
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