吴健
摘要:Python语言因其具有易读以及可扩展等特性,在各行各业中均得以应用。金融行业存在大量性质相同或完全类似的业务,这些业务若全部由人工处理耗时耗力,通过研究使用Python语言开发程序,利用程序来对SAP财务软件实现操控,从而实现账务业务的自动处理,达到替代人工操作的目的,也使得账务处理的效率和准确率大幅提高。
关键词:Python;SAP财务软件;账务处理
中图分类号:TP311 文献标志码:A
0 引言
Python语言发明于1989年,1991年公开发行。Python语言具有简单、易学、同时支持面向对象和过程、具有可移植性、可扩展性和可嵌入性等特点[1-3],应用非常广泛,渗透到各个领域[4-5]。财务行业中一般使用金蝶、用友、SAP等财务软件,其中SAP财务软件使用越来越广泛,软件使用单位的软件操作人员难免会遇到一些操作步骤相同或者近似的且重复次数很多的业务,在这种情况下,业务流程的自动化就成了迫切需要和必然的趋势。
1 相关背景
1.1 SAP介绍
SAP(Systems Applications and Products in Data Processing)财务软件是全球第三大独立软件供应商(前两位为Microsoft和Oracle),在企业管理软件领域市场占有率排名第一,是ERP市场的绝对领导者。SAP在中国的发展可以分为3个阶段:第一个阶段的标志是90年代的“灯塔计划”,SAP开始进入中国,与部分大型国企进行合作;第二个阶段是许多大型集团企业开始实施SAP,SAP在中国迅速扩张;第三个阶段是近些年许多中型企业开始选择SAP以及房地产、医药等行业实施SAP。SAP具有功能强大、逻辑严谨、财务业务一体化、流程规范、信息可追溯以及功能全面等一系列特点,因此,在国内,SAP拥有超过15 000家客户,并且越来越多的企业选择SAP。企业使用SAP后,在进行账务处理过程中,难免会遇到大量同类型的业务,靠人工输入,会消耗大量人力和时间,且准确率也会打折扣,此时可以通过程序开发获得一个替代人工、可用性高、效率高、准确率高的工具。
1.2 流程自动化
业务流程是指按照既定顺序执行的相互衔接的工作流程、活动和任务,旨在实现特定的业务成果。流程自动化是指实现部分或所有相关流程的数字化,旨在提升业务流程的效率、敏捷性和合规性。通过程序实现流程自动化,就是用设计的程序流程来完成工作信息与业务的交互,特别是工作信息与业务交互较多时,流程自动化就可以高效地解决这些复杂的流程。流程自动化带来的好处是可以节约成本、加速转型、提高质量以及解放人力。
2 系统设计
本次系统开发以Python语言为基础,以常用的Python模块如Pandas,Thinter为支撑,结合数据库技术,以实现前台人机交互,導入相关数据,调用SAP财务软件,并在其中自动进行账务处理,处理完成结果反馈以及错误提示判断等一系列过程。
2.1 架构设计
为实现上述功能,基于C/S架构进行设计与开发。用户启动客户端程序,程序连接服务器进行版本校验,版本低于服务器上现有版本,则下载服务器现有版本进行替换更新,输入用户信息登录,进入操作界面,根据业务需要提交所需数据信息后,程序调用SAP财务软件,按照程序编写预置好的逻辑进行账务处理,处理结果反馈给程序执行人,执行人检查核对,若有错误做相应调整,直至无误后保存相关信息,结束程序执行。整个开发将客户端作为核心应用软件,后端负责客户端调用情况监测和版本更新校验,这样既利于开发又便于后期维护和用户使用。系统整体的功能流程如图1所示。
2.2 具体功能实现
功能的实现基于 Python3.7.7 版本的基本编译环境,使用Sublime Text 3.1.1版 本 作 为 编 译 工 具,结 合 了Win32api, Win32gui, Win32con,Pandas,Pymysql等算法库,使用了SAP配套开发工具Scripting Tracker,确保了程序执行时对SAP操控的稳定性。
2.2.1 启动SAP软件
程序启动后需要调用打开系统中安装的SAP财务软件,可以通过调用Win32api算法库中的ShellExecute()函数,启动SAP程序。
ShellExecute函数原型及参数含义如下:
win32api.ShellExecute(hWnd:HWND;Operation,FileName,Parameters,Directory: PChar; ShowCmd: Integer): HINST; stdcall。
hWnd:用于指定父窗口句柄。当函数调用过程出现错误时,它将作为Windows消息窗口的父窗口。例如,可以将其设置为应用程序主窗口句柄,即Application.Handle,也可以将其设置为桌面窗口句柄(用GetDesktopWindow函数获得)。
Operation:用于指定要进行的操作。其中“open”操作表示执行由FileName参数指定的程序或打开由FileName参数指定的文件或文件夹;“print”操作表示打印由FileName参数指定的文件;“explore”操作表示浏览由FileName参数指定的文件夹。当参数设为nil时,表示执行默认操作“open”。
FileName:用于指定要打开的文件名、要执行的程序文件名或要浏览的文件夹名。
Parameters:若FileName参数是一个可执行程序,则此参数指定命令行参数,否则此参数应为nil或PChar(0)。
Directory:用于指定默认目录。
ShowCmd:若FileName参数是一个可执行程序,则此参数指定程序窗口的初始显示方式,否则此参数应设置为0。
若ShellExecute函数调用成功,则返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。
系统中的SAP软件的默认SAP安装路径为“C:\Program Files (x86)\SAP\FrontEnd\SAPgui\SAPgui.exe”,服务器地址为“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)。需要注意的是,如果系统中安装SAP没有选择默认路径安装,则可能会导致程序调用启动失败。
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为程序执行人的用户名和密码,从安全角度考虑,程序不对用户名和密码直接做封装,而是由程序执行人在程序调用时直接输入,就需要留有接口便于程序执行人做输入操作,考虑到通过文件读取的方式获取到执行人预先保存在文件中的用户名和密码的方式交互界面不够友善,且密码不能明文保存,决定通过设计一个登录界面,由程序执行人在界面对话框中输入用户名和密码,于是使用Python的Tkinter模块做界面设计,登录界面如图2所示。Tkinter,即 tk interface,是 Python 的标准 GUI 库,本质上,它是对 TCL/TK 工具包的一种Python 接口封装。Tkinter 是 Python 自带的标准库,因此无须另行安装,它支持跨平台运行,不仅可以在Windows 平台上运行,还支持在Linux和Mac平台上运行。Tkinter 编写的程序,也称为 GUI 程序,GUI (Graphical User Interface)指的是“图形用户界面”,它是计算机图形学(CG)的一门分支,主要研究如何在计算机中表示图形以及利用计算机进行图形的计算、处理和显示等相關工作。
2.2.3 执行事务操作
SAP自带了脚本的录制和回放的功能,在SAP界面的定制本地布局选项下有个脚本录制和回放的功能,在点下界面上的录制按钮后,会自动记录在当前窗口SAP下的每一步操作记录,记录结束后点击停止,步骤记录会以VBS格式文件保存到用户自行指定的目录。
为了提高开发的效率,使用了SAP配套开发工具Scripting Tracker,用来进行操作步骤的记录。Scripting Tracker是一个支持SAP GUI脚本开发的实用程序,程序有分析器和记录器两个主要功能,分析器为每个脚本对象显示了许多技术细节,如ID、位置等,在该选项卡中采用了树结构的显示,包含了所有SAP会话及其脚本对象。记录器显示了用于加载、编辑和执行SAP GUI脚本的基本编辑器,可以选择并使用所需的会话,以便在此会话中运行脚本。分析器提供了用红色框架识别SAP GUI的每个脚本对象的可能性。有两种方法可以实现这一点:第一种方法是从层次中选择一个对象,然后按鼠标右键。第二种方法是从层次结构中选择一个对象并按下标识按钮。接下来,需要将鼠标指针移动到选定的会话窗口,识别脚本对象后,可以将其技术名称(称为ID)复制到剪贴板并在其他上下文中使用。此功能等同于SAP GUI脚本向导。通过记录器,该工具可以在PowerShellWindows和PowerShellCore,Visual Basic Script,AutoIt,Python和JShell for Java中记录、编辑和执行SAPGUI活动。脚本跟踪程序使用SAP GUI和PowerShellWindows或PowerShellCore、Windows脚本主机(WSH)VBScript、AutoIt脚本或Python引擎。
2.3.4 Pandas库
程序设计过程中主要用到了Pandas库Pandas.read_excel函数和DataFrame.to_excel函数用来读取和写入Excel文件。
(1)Pandas.read_excel函数。
Pandas.read_excel函数的用法为:
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)
參数说明如表1所示。
(2)DataFrame.to_excel函数。
DataFrame.to_excel函数的用法为:
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)
参数说明如表2所示。
3 系统测试
程序编写完成后,为了确保可靠性,可以在测试系统进行模拟和测试,通过输出结果检验程序执行是否正确,确认无误后修改SAP地址移植至生产机进行运行。需要注意的是,在程序执行之前,需在SAP软件的选项的辅助功能和脚本选项下,禁用在脚本附加到SAP GUI时发出通知和在脚本打开连接时发出通知这两个功能。如果SAP程序服务器上禁用了SAP GUI脚本,则无法使用SAP自带的脚本录制和回放功能,同时,配套开发工具Scripting Tracker也无法使用。
4 结语
本文阐述了使用Python编程语言,通过脚本录制和编程的方式操作SAP财务软件,此方法实现了账务的自动处理,特别是在遇到大量重复工作的时候,用程序替代人工进行账务处理,很大程度上缩短了处理时间,提高了效率和准确率。
参考文献
[1]肖旻,陈行.基于Python语言编程特点及应用之探讨[J].电脑知识与技术,2014(12):8177-8178.
[2]罗霄,任勇,山秀明.基于Python的混合语言编程及其实现[J].计算机应用与软件,2004(12):17-18.
[3]严婷,文欣秀.基于Python的可视化数据分析平台设计与实现[J].计算机时代,2017(12):54-57.
[4]李永刚.基于Python的计算机软件应用技术研究[J].无线互联科技,2021(18):36-37.
[5]宋永生,黄蓉美,王军.基于Python的数据分析与可视化平台研究[J].现代信息科技,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