吳健
摘要:Python語言因其具有易讀以及可擴(kuò)展等特性,在各行各業(yè)中均得以應(yīng)用。金融行業(yè)存在大量性質(zhì)相同或完全類似的業(yè)務(wù),這些業(yè)務(wù)若全部由人工處理耗時耗力,通過研究使用Python語言開發(fā)程序,利用程序來對SAP財務(wù)軟件實(shí)現(xiàn)操控,從而實(shí)現(xiàn)賬務(wù)業(yè)務(wù)的自動處理,達(dá)到替代人工操作的目的,也使得賬務(wù)處理的效率和準(zhǔn)確率大幅提高。
關(guān)鍵詞:Python;SAP財務(wù)軟件;賬務(wù)處理
中圖分類號:TP311? 文獻(xiàn)標(biāo)志碼:A
0 引言
Python語言發(fā)明于1989年,1991年公開發(fā)行。Python語言具有簡單、易學(xué)、同時支持面向?qū)ο蠛瓦^程、具有可移植性、可擴(kuò)展性和可嵌入性等特點(diǎn)[1-3],應(yīng)用非常廣泛,滲透到各個領(lǐng)域[4-5]。財務(wù)行業(yè)中一般使用金蝶、用友、SAP等財務(wù)軟件,其中SAP財務(wù)軟件使用越來越廣泛,軟件使用單位的軟件操作人員難免會遇到一些操作步驟相同或者近似的且重復(fù)次數(shù)很多的業(yè)務(wù),在這種情況下,業(yè)務(wù)流程的自動化就成了迫切需要和必然的趨勢。
1 相關(guān)背景
1.1 SAP介紹
SAP(Systems Applications and Products in Data Processing)財務(wù)軟件是全球第三大獨(dú)立軟件供應(yīng)商(前兩位為Microsoft和Oracle),在企業(yè)管理軟件領(lǐng)域市場占有率排名第一,是ERP市場的絕對領(lǐng)導(dǎo)者。SAP在中國的發(fā)展可以分為3個階段:第一個階段的標(biāo)志是90年代的“燈塔計(jì)劃”,SAP開始進(jìn)入中國,與部分大型國企進(jìn)行合作;第二個階段是許多大型集團(tuán)企業(yè)開始實(shí)施SAP,SAP在中國迅速擴(kuò)張;第三個階段是近些年許多中型企業(yè)開始選擇SAP以及房地產(chǎn)、醫(yī)藥等行業(yè)實(shí)施SAP。SAP具有功能強(qiáng)大、邏輯嚴(yán)謹(jǐn)、財務(wù)業(yè)務(wù)一體化、流程規(guī)范、信息可追溯以及功能全面等一系列特點(diǎn),因此,在國內(nèi),SAP擁有超過15 000家客戶,并且越來越多的企業(yè)選擇SAP。企業(yè)使用SAP后,在進(jìn)行賬務(wù)處理過程中,難免會遇到大量同類型的業(yè)務(wù),靠人工輸入,會消耗大量人力和時間,且準(zhǔn)確率也會打折扣,此時可以通過程序開發(fā)獲得一個替代人工、可用性高、效率高、準(zhǔn)確率高的工具。
1.2 流程自動化
業(yè)務(wù)流程是指按照既定順序執(zhí)行的相互銜接的工作流程、活動和任務(wù),旨在實(shí)現(xiàn)特定的業(yè)務(wù)成果。流程自動化是指實(shí)現(xiàn)部分或所有相關(guān)流程的數(shù)字化,旨在提升業(yè)務(wù)流程的效率、敏捷性和合規(guī)性。通過程序?qū)崿F(xiàn)流程自動化,就是用設(shè)計(jì)的程序流程來完成工作信息與業(yè)務(wù)的交互,特別是工作信息與業(yè)務(wù)交互較多時,流程自動化就可以高效地解決這些復(fù)雜的流程。流程自動化帶來的好處是可以節(jié)約成本、加速轉(zhuǎn)型、提高質(zhì)量以及解放人力。
2 系統(tǒng)設(shè)計(jì)
本次系統(tǒng)開發(fā)以Python語言為基礎(chǔ),以常用的Python模塊如Pandas,Thinter為支撐,結(jié)合數(shù)據(jù)庫技術(shù),以實(shí)現(xiàn)前臺人機(jī)交互,導(dǎo)入相關(guān)數(shù)據(jù),調(diào)用SAP財務(wù)軟件,并在其中自動進(jìn)行賬務(wù)處理,處理完成結(jié)果反饋以及錯誤提示判斷等一系列過程。
2.1 架構(gòu)設(shè)計(jì)
為實(shí)現(xiàn)上述功能,基于C/S架構(gòu)進(jìn)行設(shè)計(jì)與開發(fā)。用戶啟動客戶端程序,程序連接服務(wù)器進(jìn)行版本校驗(yàn),版本低于服務(wù)器上現(xiàn)有版本,則下載服務(wù)器現(xiàn)有版本進(jìn)行替換更新,輸入用戶信息登錄,進(jìn)入操作界面,根據(jù)業(yè)務(wù)需要提交所需數(shù)據(jù)信息后,程序調(diào)用SAP財務(wù)軟件,按照程序編寫預(yù)置好的邏輯進(jìn)行賬務(wù)處理,處理結(jié)果反饋給程序執(zhí)行人,執(zhí)行人檢查核對,若有錯誤做相應(yīng)調(diào)整,直至無誤后保存相關(guān)信息,結(jié)束程序執(zhí)行。整個開發(fā)將客戶端作為核心應(yīng)用軟件,后端負(fù)責(zé)客戶端調(diào)用情況監(jiān)測和版本更新校驗(yàn),這樣既利于開發(fā)又便于后期維護(hù)和用戶使用。系統(tǒng)整體的功能流程如圖1所示。
2.2 具體功能實(shí)現(xiàn)
功能的實(shí)現(xiàn)基于 Python3.7.7 版本的基本編譯環(huán)境,使用Sublime Text 3.1.1版 本 作 為 編 譯 工 具,結(jié) 合 了Win32api, Win32gui, Win32con,Pandas,Pymysql等算法庫,使用了SAP配套開發(fā)工具Scripting Tracker,確保了程序執(zhí)行時對SAP操控的穩(wěn)定性。
2.2.1 啟動SAP軟件
程序啟動后需要調(diào)用打開系統(tǒng)中安裝的SAP財務(wù)軟件,可以通過調(diào)用Win32api算法庫中的ShellExecute()函數(shù),啟動SAP程序。
ShellExecute函數(shù)原型及參數(shù)含義如下:
win32api.ShellExecute(hWnd:HWND;Operation,F(xiàn)ileName,Parameters,Directory: PChar; ShowCmd: Integer): HINST; stdcall。
hWnd:用于指定父窗口句柄。當(dāng)函數(shù)調(diào)用過程出現(xiàn)錯誤時,它將作為Windows消息窗口的父窗口。例如,可以將其設(shè)置為應(yīng)用程序主窗口句柄,即Application.Handle,也可以將其設(shè)置為桌面窗口句柄(用GetDesktopWindow函數(shù)獲得)。
Operation:用于指定要進(jìn)行的操作。其中“open”操作表示執(zhí)行由FileName參數(shù)指定的程序或打開由FileName參數(shù)指定的文件或文件夾;“print”操作表示打印由FileName參數(shù)指定的文件;“explore”操作表示瀏覽由FileName參數(shù)指定的文件夾。當(dāng)參數(shù)設(shè)為nil時,表示執(zhí)行默認(rèn)操作“open”。
FileName:用于指定要打開的文件名、要執(zhí)行的程序文件名或要瀏覽的文件夾名。
Parameters:若FileName參數(shù)是一個可執(zhí)行程序,則此參數(shù)指定命令行參數(shù),否則此參數(shù)應(yīng)為nil或PChar(0)。
Directory:用于指定默認(rèn)目錄。
ShowCmd:若FileName參數(shù)是一個可執(zhí)行程序,則此參數(shù)指定程序窗口的初始顯示方式,否則此參數(shù)應(yīng)設(shè)置為0。
若ShellExecute函數(shù)調(diào)用成功,則返回值為被執(zhí)行程序的實(shí)例句柄。若返回值小于32,則表示出現(xiàn)錯誤。
系統(tǒng)中的SAP軟件的默認(rèn)SAP安裝路徑為“C:\Program Files (x86)\SAP\FrontEnd\SAPgui\SAPgui.exe”,服務(wù)器地址為“192.168.1.101”,則啟動ASP程序登錄界面的代碼為:win32api.ShellExecute(0, 'open', r'C:\Program Files (x86)\SAP\FrontEnd\SAPgui\SAPgui.exe', '/M/192.168.1.101/S/sapmsPS7/G/PS7', '',1)。需要注意的是,如果系統(tǒng)中安裝SAP沒有選擇默認(rèn)路徑安裝,則可能會導(dǎo)致程序調(diào)用啟動失敗。
2.2.2 登錄SAP用戶
程序連接SAP登錄界面程序腳本為:
SapGuiAuto =win32com.client.GetObject("SAPGUI")
application = SapGuiAuto.GetScriptingEngine
connection = application.Children(0)
session = connection.Children(0)
輸入用戶名和密碼程序腳本為:
session.findById("wnd[0]/usr/txtRSYST-BNAME").text = username
session.findById("wnd[0]/usr/pwdRSYST-BCODE").text = password
此處username和password為程序執(zhí)行人的用戶名和密碼,從安全角度考慮,程序不對用戶名和密碼直接做封裝,而是由程序執(zhí)行人在程序調(diào)用時直接輸入,就需要留有接口便于程序執(zhí)行人做輸入操作,考慮到通過文件讀取的方式獲取到執(zhí)行人預(yù)先保存在文件中的用戶名和密碼的方式交互界面不夠友善,且密碼不能明文保存,決定通過設(shè)計(jì)一個登錄界面,由程序執(zhí)行人在界面對話框中輸入用戶名和密碼,于是使用Python的Tkinter模塊做界面設(shè)計(jì),登錄界面如圖2所示。Tkinter,即 tk interface,是 Python 的標(biāo)準(zhǔn) GUI 庫,本質(zhì)上,它是對 TCL/TK 工具包的一種Python 接口封裝。Tkinter 是 Python 自帶的標(biāo)準(zhǔn)庫,因此無須另行安裝,它支持跨平臺運(yùn)行,不僅可以在Windows 平臺上運(yùn)行,還支持在Linux和Mac平臺上運(yùn)行。Tkinter 編寫的程序,也稱為 GUI 程序,GUI (Graphical User Interface)指的是“圖形用戶界面”,它是計(jì)算機(jī)圖形學(xué)(CG)的一門分支,主要研究如何在計(jì)算機(jī)中表示圖形以及利用計(jì)算機(jī)進(jìn)行圖形的計(jì)算、處理和顯示等相關(guān)工作。
2.2.3 執(zhí)行事務(wù)操作
SAP自帶了腳本的錄制和回放的功能,在SAP界面的定制本地布局選項(xiàng)下有個腳本錄制和回放的功能,在點(diǎn)下界面上的錄制按鈕后,會自動記錄在當(dāng)前窗口SAP下的每一步操作記錄,記錄結(jié)束后點(diǎn)擊停止,步驟記錄會以VBS格式文件保存到用戶自行指定的目錄。
為了提高開發(fā)的效率,使用了SAP配套開發(fā)工具Scripting Tracker,用來進(jìn)行操作步驟的記錄。Scripting Tracker是一個支持SAP GUI腳本開發(fā)的實(shí)用程序,程序有分析器和記錄器兩個主要功能,分析器為每個腳本對象顯示了許多技術(shù)細(xì)節(jié),如ID、位置等,在該選項(xiàng)卡中采用了樹結(jié)構(gòu)的顯示,包含了所有SAP會話及其腳本對象。記錄器顯示了用于加載、編輯和執(zhí)行SAP GUI腳本的基本編輯器,可以選擇并使用所需的會話,以便在此會話中運(yùn)行腳本。分析器提供了用紅色框架識別SAP GUI的每個腳本對象的可能性。有兩種方法可以實(shí)現(xiàn)這一點(diǎn):第一種方法是從層次中選擇一個對象,然后按鼠標(biāo)右鍵。第二種方法是從層次結(jié)構(gòu)中選擇一個對象并按下標(biāo)識按鈕。接下來,需要將鼠標(biāo)指針移動到選定的會話窗口,識別腳本對象后,可以將其技術(shù)名稱(稱為ID)復(fù)制到剪貼板并在其他上下文中使用。此功能等同于SAP GUI腳本向?qū)АMㄟ^記錄器,該工具可以在PowerShellWindows和PowerShellCore,Visual Basic Script,AutoIt,Python和JShell for Java中記錄、編輯和執(zhí)行SAPGUI活動。腳本跟蹤程序使用SAP GUI和PowerShellWindows或PowerShellCore、Windows腳本主機(jī)(WSH)VBScript、AutoIt腳本或Python引擎。
2.3.4 Pandas庫
程序設(shè)計(jì)過程中主要用到了Pandas庫Pandas.read_excel函數(shù)和DataFrame.to_excel函數(shù)用來讀取和寫入Excel文件。
(1)Pandas.read_excel函數(shù)。
Pandas.read_excel函數(shù)的用法為:
Pandas.read_excel(io,sheet_name=0,header=0,names=None,index_col=None,usecols=None,squeeze=False,dtype=None,engine=None,converters=None,true_values=None,false_values=None,skiprows=None,nrows=None,na_values=None,keep_default_na=True,verbose=False,parse_dates=False,date_parser=None,thousands=None,comment=None,skip_footer=0,skipfooter=0,convert_float=True,mangle_dupe_cols=True,**kwds)
參數(shù)說明如表1所示。
(2)DataFrame.to_excel函數(shù)。
DataFrame.to_excel函數(shù)的用法為:
DataFrame.to_excel(excel_writer,sheet_name="Sheet1",na_rep="",float_format=None,columns=None,header=True,index=True,index_label=None,startrow=0,startcol=0,engine=None,merge_cells=True,encoding=None,inf_rep="inf",verbose=True,freeze_panes=None)
參數(shù)說明如表2所示。
3 系統(tǒng)測試
程序編寫完成后,為了確保可靠性,可以在測試系統(tǒng)進(jìn)行模擬和測試,通過輸出結(jié)果檢驗(yàn)程序執(zhí)行是否正確,確認(rèn)無誤后修改SAP地址移植至生產(chǎn)機(jī)進(jìn)行運(yùn)行。需要注意的是,在程序執(zhí)行之前,需在SAP軟件的選項(xiàng)的輔助功能和腳本選項(xiàng)下,禁用在腳本附加到SAP GUI時發(fā)出通知和在腳本打開連接時發(fā)出通知這兩個功能。如果SAP程序服務(wù)器上禁用了SAP GUI腳本,則無法使用SAP自帶的腳本錄制和回放功能,同時,配套開發(fā)工具Scripting Tracker也無法使用。
4 結(jié)語
本文闡述了使用Python編程語言,通過腳本錄制和編程的方式操作SAP財務(wù)軟件,此方法實(shí)現(xiàn)了賬務(wù)的自動處理,特別是在遇到大量重復(fù)工作的時候,用程序替代人工進(jìn)行賬務(wù)處理,很大程度上縮短了處理時間,提高了效率和準(zhǔn)確率。
參考文獻(xiàn)
[1]肖旻,陳行.基于Python語言編程特點(diǎn)及應(yīng)用之探討[J].電腦知識與技術(shù),2014(12):8177-8178.
[2]羅霄,任勇,山秀明.基于Python的混合語言編程及其實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2004(12):17-18.
[3]嚴(yán)婷,文欣秀.基于Python的可視化數(shù)據(jù)分析平臺設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)時代,2017(12):54-57.
[4]李永剛.基于Python的計(jì)算機(jī)軟件應(yīng)用技術(shù)研究[J].無線互聯(lián)科技,2021(18):36-37.
[5]宋永生,黃蓉美,王軍.基于Python的數(shù)據(jù)分析與可視化平臺研究[J].現(xiàn)代信息科技,2019(21):7-9.
(編輯 王雪芬)
Design and implementation of automatic accounting processing of SAP financial software based
on Python
Wu? Jian
(YangZhou ServiceDepartment,Sinopec Shared Srvices Co., Ltd., Yangzhou 225000, China)
Abstract: Python language is used in all walks of life because of its readability and extensibility. In the financial industry, there are a large number of businesses with the same or completely similar nature, which are time-consuming and labor-intensive if all of them are manually processed. By studying and using Python language to develop programs, we can use programs to manipulate SAP financial software, so as to achieve automatic processing of accounting business, achieve the purpose of replacing manual operations, and also greatly improve the efficiency and accuracy of accounting processing.
Key words: Python; SAP financial software; accounting treatment