класс 'pywintypes.com_error' для запуска транзакции SAP - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь использовать скрипт в Python (Spyder), чтобы открыть SAP и запустить транзакцию. Для достижения этой цели я записал SAP vbscript, и с парой твиков для использования Python он работает нормально, пока не достигнет середины сценария SAP и не вызовет class 'pywintypes.com_error'! Код, который я использую для выполнения этой задачи, следующий. Любая помощь в том, как обойти эту проблему, высоко ценится:

def saplogin():

    try:

        path = r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe"
        subprocess.Popen(path)
        time.sleep(2)

        SapGuiAuto = win32com.client.GetObject('SAPGUI')
        if not type(SapGuiAuto) == win32com.client.CDispatch:
            return

        application = SapGuiAuto.GetScriptingEngine
        if not type(application) == win32com.client.CDispatch:
            SapGuiAuto = None
            return
        connection = application.OpenConnection("SAP")

        if not type(connection) == win32com.client.CDispatch:
            application = None
            SapGuiAuto = None
            return

        session = connection.Children(0)
        if not type(session) == win32com.client.CDispatch:
            connection = None
            application = None
            SapGuiAuto = None
            return

        session.findById("wnd[0]/usr/txtRSYST-BNAME").text = "Uname"
        session.findById("wnd[0]/usr/pwdRSYST-BCODE").text = "Pass"
        session.findById("wnd[0]").sendVKey(0)




        session.findById("wnd[0]").resizeWorkingPane (98,16,False)
        session.findById("wnd[0]/tbar[0]/okcd").text = "S032"
        session.findById("wnd[0]").sendVKey (0)
        session.findById("wnd[0]/usr/radP_MATL").select
        session.findById("wnd[0]/usr/chkP_LTPC").selected = False
        session.findById("wnd[0]/usr/ctxtS_FEVOR-LOW").text = "86A"
        session.findById("wnd[0]/usr/radP_SORT3").setFocus
        session.findById("wnd[0]/usr/radP_SORT3").select
        session.findById("wnd[0]/tbar[1]/btn[8]").press
        session.findById("wnd[0]/mbar/menu[0]/menu[1]/menu[2]").select
        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 = "D:\PowerBIKhodam\WIP_Status\86A"
        session.findById("wnd[1]/usr/ctxtDY_FILENAME").text = "S32.xls"
        session.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 12
        session.findById("wnd[1]/tbar[0]/btn[11]").press
        session.findById("wnd[0]/tbar[0]/btn[3]").press
        session.findById("wnd[0]/tbar[0]/btn[3]").press

    except:
        print(sys.exc_info()[0])
    finally:
        session = None
        connection = None
        application = None
        SapGuiAuto = None

saplogin()
...