代码之家  ›  专栏  ›  技术社区  ›  Jarron

随着时间的推移,SAP脚本运行速度变慢

  •  0
  • Jarron  · 技术社区  · 7 年前

    当我在VBA(excel)中长时间运行SAP脚本时,SAP会话开始变慢。如果我中断代码并再次启动它,SAP会话仍会以原来的低速运行。如果我关闭excel并再次运行代码,SAP会话的运行速度仍然很慢。但是,如果我关闭SAP会话并重新打开它,然后运行代码(而不是关闭excel),速度会再次回到最佳速度。

    我运行了下面的代码(作为测试)来查看速度的下降。当代码启动时,每个循环大约需要4秒,但是到第300个循环时,速度降低到每个循环16秒。

    这可能看起来很琐碎,但我正在运行另一个代码块(太大,无法发布),它有大约3000个循环要执行,每个循环大约需要25秒才能以最佳速度执行(一旦SAP开始减速,每个循环需要一分钟或更长时间)。

    与其运行一个由100个循环组成的块,关闭SAP,重新打开SAP,然后运行下一个由100个循环组成的块(这就是我一直在做的),还有人知道什么会减慢SAP会话,以及是否有方法通过编程重置SAP,使代码再次返回最佳速度吗?任何帮助或指导将不胜感激,我在网上找不到多少关于这个。

    Sub runScript()
    
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        Application.Calculation = xlCalculationManual
    
        Dim count As Integer
        count = 1
    
        Do While count < 1000
    
            Dim startDateTime As Date
            startDateTime = Now
    
            Call enterExitTransactionIW33
    
            Cells(count, 2) = DateDiff("S", startDateTime, Now)
            count = count + 1
    
        Loop
    
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True
        Application.Calculation = xlCalculationAutomatic
    
    End Sub
    
    Private Sub enterExitTransactionIW33()
    
        Dim SAPGuiAuto, SAPApp, SAPConnection, SAPSession As Object
    
        Set SAPGuiAuto = GetObject("SAPGUI")
        Set SAPApp = SAPGuiAuto.GetScriptingEngine
        Set SAPConnection = SAPApp.Children(0)
        Set SAPSession = SAPConnection.Children(0)
    
        SAPSession.findById("wnd[0]/tbar[0]/okcd").Text = "IW33"
        SAPSession.findById("wnd[0]").sendVKey 0
    
        SAPSession.findById("wnd[0]/usr/ctxtCAUFVD-AUFNR").Text = "80808080"
        SAPSession.findById("wnd[0]").sendVKey 0
    
        SAPSession.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/tabsTS_1100/tabpVGUE").Select
        SAPSession.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1101/tabsTS_1100/tabpMUEB").Select
        SAPSession.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1101/tabsTS_1100/tabpKOAU").Select
        SAPSession.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1101/tabsTS_1100/tabpPARU").Select
        SAPSession.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1101/tabsTS_1100/tabpIOLU").Select
        SAPSession.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1101/tabsTS_1100/tabpIHKD").Select
    
        SAPSession.findById("wnd[0]/tbar[0]/okcd").Text = "/N"
        SAPSession.findById("wnd[0]").sendVKey 0
    
    End Sub
    
    0 回复  |  直到 7 年前