脚本语言在审计工作中运用的探讨
2016-08-05徐欢
徐 欢
(上海市浦东新区审计管理与信息中心 上海 200125)
脚本语言在审计工作中运用的探讨
徐欢
(上海市浦东新区审计管理与信息中心上海 200125)
摘要在审计信息化的应用过程中,存在着审计软件功能不完善和用户需求多样性的问题。针对这种情况,提出用脚本语言技术解决此类问题。首先归纳出审计工作的实际技术需求,分析脚本语言的特点、优势和脚本语言技术适用于审计工作的原因;并在具体的审计案例中,对所运用的脚本语言以及发挥的作用进行详细探讨,进一步表明脚本语言技术能够提高审计软件的效率、满足特定功能的审计需求。脚本语言技术是易学易用的编程技术,能够帮助审计人员开发出便捷高效的特定功能程序,更好地满足审计需求。希望借助拓宽审计信息化建设工作的思路,更好地服务于审计事业的发展。
关键词审计信息化审计软件脚本语言
0引言
随着时代的进步,各行业的信息化应用越来越普及。审计人员必须要将信息化技术与审计需求相结合,并且寻找最适合的技术手段来解决审计工作中的问题。审计软件作为计算机辅助审计的技术工具被越来越广泛地使用。审计软件使用的好坏直接影响着审计工作的效率。专业的审计软件也并不能包打天下,因为这与审计软件的使用情况关系密切。
1审计软件的使用情况
在审计工作中,审计人员会用到多种计算机软件,有专业的审计作业软件,如现场审计实施系统(AO)软件;也有各种通用软件,比如与电子数据处理相关的Excel、Access、SQL Server等。
AO软件是审计署为了帮助审计人员在审计现场进行审计作业,在“金审工程”一期中开发的一套专业审计软件[1]。该软件是用具有复杂的数据结构和算法、能够确保代码的安全性和健壮性的高级编程语言进行开发的。这似乎是一个完美的计算机软件,然而现实情况并非如此。
1.1审计期望与软件实现的差距
实际操作中,AO是一个完全的Windows GUI操作界面系统,每一步操作都是通过鼠标点击完成的。这样做的初衷是好的,可视化工具提供的多窗口、交互式、可视化图形界面便于审计人员直观、综合、灵活地进行分析处理[2]。但是在提高效率、节约时间方面,脚本工具确实有自己的重要性和用武之地[3]。
AO在进行数据采集和转换过程中,经常需要处理同一单位、不同年份的数据,而每一次的采集和转换都会经历同样的鼠标点击——【采集转换】→【财务数据-GB/T 19581-2004数据】→【采集数据】→【选择文件夹】→【确认】→【立即账表重建】→【重建账表完成】。而AO又是完全依赖鼠标进行操作的,当有大量需要鼠标点击的操作出现时,审计人员必须时刻注意屏幕变化,不断移动鼠标、定位对象点击,使操作变成了一项十分枯燥而又容易出错的任务。
1.2审计人员的非专业
审计人员的专业大多是会计师、审计师等经济类,对于浩瀚的计算机专业知识和技能没有长期的学习和实践,是无法深入使用的,最多做到熟练掌握。一旦使用过程中出现新情况,虽然希望通过其他软件应用,甚至自编软件的方法去解决,但高深的计算机程序开发往往成为解决问题的拦路虎。
1.3审计需求的多样性
审计需求往往体现在审计工作中,一套开发完成的审计软件不可能穷尽所有的需求,这就需要依靠别的软件来弥补。
例如,审计项目实施过程中,获得电子数据后,由于各种各样的原因,采集到的数据会出现一些影响审计工作质量的问题,如值缺失、空值、数据冗余、字段类型不合法、数据域定义不完整等。这些问题必须加以修正,进行必须的数据清理——对数据进行检查、分析和验证,有效控制审计数据的质量,才能满足后续数据分析工作的需要。
如果数据量不大,可以采用手工方法直接进行数据清理,逐一检查;而当数据量大时,则数据清理变成了一项十分艰巨的工作。例如某集团有限公司的经济责任审计项目中,需要采集的电子账套有48个之多,这还只是一部分。由于审计项目的时间跨度往往在3年以上,需要的电子数据不仅量大,而且面广。
2改善审计软件使用的技术方法
通过第1节的分析,可以将改善目标归纳为两类:
(1) 与审计软件结合,摆脱烦琐操作,实现审计软件缺乏的功能;
(2) 便捷、高效地开发特定功能程序,更为理想的是,程序能够随时、任意部署。
我们可以要求改善现行的软件,来完成此类的个性化需求,但通常不那么容易。因为,这受制于软件的整体维护要求、改善周期过长等太多的客观限制。尤其是那些用高级语言编写的成形软件,是无法在短时间内,通过修改源代码,再重新编译生成新的目标文件,达到快速满足特定功能审计需求的目的。
实现特定功能需求的唯一途径是自编代码,编写程序。
在计算机编程语言中,有一种叫作脚本语言。它强调灵活性、快速开发和用户定制,是解决审计需求的很好的技术途径。相比那些需要编译的编程语言,脚本语言的快速开发、容易部署、易学易用的特色,特别适用于信息化环境下的审计需求,是提高审计软件效率的极好补充和完善。
2.1脚本语言的分析
脚本语言是为了缩短传统程序设计语言的编写—编译—链接—运行过程而创建的编程语言[4]。一个脚本通常是解释运行[5]而非编译,脚本重视的是表达方便而不是执行速度。虽然许多脚本语言都成熟到可以编写精巧的程序,但仍然还是被称为脚本。在许多方面,高级编程语言和脚本语言之间互相交叉,二者之间没有明确的界限。
2.1.1“脚本语言”与“非脚本语言”的区别
综合来看,它们之间的主要区别是:
(1) 脚本语言和非脚本语言的运行方式不同
这是一个重要的不同:脚本语言是被解释,而非脚本语言是被编译。被解释的语言不需要耗时编译、打包过程,由解释器提供快速的转换。解释器使应用程序更加灵活——脚本语言代码能够被实时生成和执行。脚本语言的目的是希望能让程序设计师快速完成程序的编写工作。
(2) 脚本语言和非脚本语言被设计的目标不同
脚本语言被设计用于把应用程序集成起来,而不是实现复杂的数据结构和算法。因此,为了保证实用性,脚本语言必须能够访问不同类型的组件。通常,脚本语言不会替代非脚本语言。
(3) 脚本语言和非脚本语言分属不同的强、弱类型
非脚本语言是强类型的,能够确保代码的安全性和健壮性,但同时也使得代码有了太多的限制性。在强类型语言中,变量必须被指定为一种类型,只能按照固定方式使用。而脚本语言是弱类型的,这意味着,在不同环境下,代码变量可以以多种方式来使用。
举例说明,例如脚本语言VBA与高级编程语言VB[6]。VB可以独立运行在任何的Windows环境,VBA必须要“寄生于”它所控制的应用程序;VBA可以随意地组合Excel(或其他Office程序)中的所有功能,让任务自动运行,提高效率、适应需求,进行无限的扩展。VBA应用了VB的语言结构,是一门易学易用的语言。
2.1.2脚本语言的特点
脚本语言具有电脑编程语言共有的特性——让电脑根据指令完成指定工作,但其特点在于强调主要用途是把其他语言开发的独立程序作为部件“粘到一起”[7]。以简单的方式快速完成某些复杂的事情通常是创造脚本语言的重要原则。基于这项原则,使得脚本语言通常比C语言、C++语言类的系统编程语言要简单容易。
脚本语言的特点:
(1) 能够整合其他软件的功能,让任务自动运行,提高效率;
(2) 语法和结构通常比较简单;
(3) 程序容易修改并被“解释”运行,便于开发;
(4) 学习和使用比较简易,程序的开发产能优于运行性能。
2.1.3脚本语言适用的审计需求
脚本语言的特点正是审计工作最需要的(如表1所示)。
表1 脚本语言适用的审计需求
2.1.4脚本语言的分类
脚本语言可以分为:(1) 工作控制语言,如MS-DOS command;(2) GUI 脚本,如AutoHotKey;(3) 应用程序定制的脚本语言,如VBScript;(4) Web编程脚本,如HTML、ASP、JavaScript;(5) 文本处理语言,处理基于文本的记录;(6) 通用动态语言,比如Perl;(7) 扩展/可嵌入语言,如Tcl;(8) 其他。
3脚本技术对审计需求的解决之道
3.1几种脚本语言的介绍
脚本语言很多,在此仅介绍几种与审计工作结合紧密、使用效果较好的脚本语言。
3.1.1审计软件AO中的脚本语言
ASL(Audit Script Language)[8]是审计署专为审计人员书写计算机审计方法而开发的编程语言,内嵌在AO软件中,属于应用程序定制的脚本语言。它的变量设置、语句判断、结果输出等语句都十分简单明了,使得没有计算机编程经验的审计人员容易接受。并且,在使用过程中,随时可以动态调整代码,实时生成和执行。
ASL功能简单、结构清晰、可读性强。
(1) 基本结构
Begin
Write(‘欢迎使用ASL’);
End.
(2) 关键技术
ASL功能简单、结构清晰、可读性强,具备一般高级语言的必备部分(如read、write、while-do、if-then、call、begin-end、数组、过程、函数等)。ASL与其他脚本语言一样,以文本形式存在,但具有数据库操作、图表输出等一系列扩展功能。例如创建查询函数:
CreateQ(’SQL语句’,查询变量)
这种特制的脚本语言与AO软件相结合,可以将宝贵的计算机审计方法用编写代码程序的形式保存下来,帮助审计人员实现审计知识的积累、资源的共享和有效利用。突显了脚本语言在计算机审计工作中,具有十分重要的作用。
3.1.2交互式操作的脚本语言
AutoHotKey是GUI脚本的代表软件。它是面向普通电脑用户的自由开源的自动化软件工具[9],让用户能够快捷或自动执行重复性任务。它能够在用户和图形界面、菜单、按钮等之间互动,同时在热键、热字符串实现的快捷、高效、强大方面没有其他语言能超越。
(1) 关键技术
用AutoHotKey脚本语言进行替代手工点击鼠标操作的编程。首先要选择操作对象的窗口,例如激活窗口的语句:
winActivate [,WinTitle]
然后,将手工操作用脚本语句来模拟,例如送出回车键的语句:
send {enter}
这样,将需要的每一步操作都用代码的形式组合在一起,成为一个完整的动作集合,这是一个创建脚本的过程。在高效的计算机性能下,创建好的脚本能瞬间完成手工操作。
(2) 编程环境
AutoHotKey可以在任何的文本编辑器中进行编写代码,编程环境宽松。
(3) 使用环境
将AutoHotKey的脚本文件通过Ahk2Exe转换成EXE可执行文件,使得程序在没有安装AutoHotkey的机器上就能够运行,大大拓展了该脚本程序的使用范围。使得随时、任意部署脚本语言编写的可执行程序成为可能,突破了脚本语句与解释器分离的使用限制。
3.2运用案例
3.2.1ASL编写审计方法
浦东新区审计局投资建设审计处有个项目是检查城市基础设施配套费是否全额上缴国库和是否按照政府文件规定及时征收的情况。审计过程中要对开发商分阶段逐步缴纳的配套费进行核查,查找是否有未上缴的情况、是否按规定分阶段征收到位。
用ASL脚本语言编写项目的审计方法,将查找问题的分析过程固化,进而在AO中推广应用到类似的收缴分离的审计工作中。“住宅配套费未按期征收的审计方法”的部分ASL脚本代码如下:
//财务收款与业务台账逐项金额比对
Var
strSql,dSet,isEmptyC,isEmptyT;
Begin
strSql:=′select [开票票号],[开票日期],[征收金额],[配套费缴纳合计],[建设单位],[通知单号] from (select * from [业务_ 配套费财务收款] c left join [业务_ 配套费缴纳台账] t on c.[征收金额]=t.[配套费缴纳合计]) as tmpTbl where [建设单位] is null′; //找出财务有账,业务无账的记录
dSet:=CreateQ(strSql,-1);
isEmptyC:=qeof(dSet);
if isEmptyC=1 then
AddTransRslt(dSet,′财务有账,业务无账的记录′);
⋮
if (isEmptyC=1 and isEmptyT=1) then
begin
showmsg(′财务入账与业务收账一致!′); //左右连接都无不匹配的记录
end
else
begin
showmsg(′财务入账与业务收账有不一致的情况!′);
end;
End.
⋮
//计算问题项目的数量和金额占比
strSql:=′select sum(配套费缴纳合计) as ptfjnhj from [业务_ 配套费缴纳台账 2009]′;
dSet:=CreateQ(strSql,-1);
a:=QFDvalue(dSet,'ptfjnhj');
write(′缓缴项目: ′,hjsl,′ 当年征收项目数: ′,xmsl,′ 占比: ′,hjsl/xmsl);
write(′缓缴金额: ′,hjje,′ 当年征收金额数: ′,a,′ 占比: ′,hjje/a);
End.
该审计方法入选2011年审计署计算机审计方法,并被评为“优秀审计方法”。
3.2.2AutoHotKey替代AO软件中人机交互时的重复操作
在用AutoHotKey脚本语言编写的“Tools in AO2008”软件中,脚本程序协助AO完成电子数据导入(如图1所示),对电子数据实现自动多项选择、删除(如图2所示)等操作,大大简化了人机交互时的大量、重复的手工操作,提高了AO软件的使用效率,而开发代码只有少量的几行。
图1 脚本程序自动完成电子数据导入
图2 脚本程序实现自动多项选择、删除操作
程序“Tools in AO2008”的部分脚本代码如下:
//AO进行数据采集和转换时的手工操作
⋮
WinActivate,会计核算标准接口数据采集
send !i
⋮
winWait,,立即账表重建吗
WinActivate,,立即账表重建吗
send !y
winWait,,重建账表完成
WinActivate,,重建账表完成
send {enter}
⋮
//AO对电子数据实现自动多项选择、删除等操作
⋮
winActivate,电子数据管理
Loop, %nmbr%
{
MouseClick,left,88,30
send {Left}{enter}
}
3.2.3AutoHotKey实现数据清理,完成特定审计功能的程序开发
由于各种各样的原因,审计人员采集到的数据会出现一些影响审计工作质量的问题,如值缺失、空值、数据冗余、字段类型不合法、数据域定义不完整等。对这些问题必须加以修正,才能满足审计工作需要。这就需要对电子数据进行数据清理。
用AutoHotKey脚本语言编写的“Treating data from Kingdee GB transcoder for AO2008”软件(见图3),能对文本格式的数据进行清理,包括值缺失处理、空值处理、清除冗余数据、不易识别数据项的变换、去除重复的会计代码和将文件编码转换为unicode形式等。后续,通过代码叠加就可以实现更多的功能。该脚本程序还具有恢复源数据的功能,提高了数据处理的安全性。
该脚本程序还可以经过AutoHotKey的转换,成为独立的可执行应用程序,不再受到脚本环境的制约,使得运行环境大为扩展。
图3 “Treating data from Kingdee GB transcoder for AO2008”程序运行截图
软件“Treating data from Kingdee GB transcoder for AO2008”的部分脚本代码如下:
/*-------------------------------------------------
Name:Treating data from Kingdee GB transcoder for AO2008
Author:XuHuan
对导入数据进行清理,转换为AO2008能够识别的源数据。
*/
GuiMenu:
Gui,-sysmenu
Gui, Add, GroupBox, x46 y27 w300 h70 , 第一步:确定数据转换方向
⋮
return
⋮
main:
{fun_GSSMDir()}
⋮
MsgBox,,X,,文件已转换为Unicode编码格式。,10
{fun_GSSMOriginalDir()}
MsgBox,,X,,文件还原为初始格式。,10
}
⋮
fun_GSSMDir(){……} ;查找需要进行清理的数据目录
fun_GSSMOriginalDir(){……} ;在数据备份目录下,恢复原始数据
fun_all2unicode(){……} ;将文件编码转换为unicode形式
“Treating data from Kingdee GB transcoder for AO2008”程序被发布在上海市审计区县共享平台上,被更多的审计人员使用,受到了大家的赞许。
3.2.4案例启示
上文中提到的用脚本语言编写的应用程序,是在审计工作中比较有代表性的。这仅仅是一小部分,但也已经可以看出脚本语言在审计工作中无限的发展潜力——脚本语言能内嵌入专业应用程序中(见3.2.1节);脚本语言能辅助专业软件实现缺乏的功能,而不用对专业软件进行修改(见3.2.2节);脚本语言能够完成特定审计功能的程序开发,并且可以转换为随时、任意部署的EXE可执行程序(见3.2.3节)。对于非计算机专业的审计人员来说,简洁明了的编程语法易学易用。
展望今后,审计工作中的软件也许将更多地整合进脚本的身影,比如AO中引进宏的概念,用脚本语言记录使用人的操作步骤,能修改、能重复使用,从而提高AO审计软件的效率。
4结语
尺有所短,寸有所长,某些情况下,高级编程语言也是不够有效的。因此,不得不用脚本编写应用程序,而脚本语言作为系统程序设计语言的有效补充,被越来越多的案例所证实。随着编程语言的发展,脚本语言与非脚本语言都在学习彼此的长处和优点。虽然两者间有着诸多的不同,但彼此的最终目标是一致的,那就是为软件最初的设计目标服务。
审计工作已离不开信息化技术的运用,而灵活多变的脚本语言能够提高专业审计软件的效率、满足特定功能的审计需求。脚本语言技术将与其他软件技术一起促进信息化技术在审计工作中的更好运用。
参考文献
[1] 石爱中.国家审计信息化发展报告[M].北京:中国时代经济出版社,2013.
[2] 陈伟.审计软件现状及发展趋势研究[J].计算机科学,2009(2):1-4.
[3] Pawan K Bhardwaj.Windows系统管理之道:命令行脚本应用与解决方案[M].北京:中国水利水电出版社,2008.
[4] 刘红梅.脚本语言在数据采集系统中的应用研究[J].电子科技,2009,22(11):72-75.
[5] 千叶滋.两周自制脚本语言[M].北京:人民邮电出版社,2014.
[6] 何非,叶萃娟.Excel VBA高效办公从入门到精通[M].北京:中国青年出版社,2006.
[7] 斯科特.程序设计语言:实践之路[M].3版.电子工业出版社,2012.
[8] 编写组.AO2011实用手册[M].北京:清华大学出版社,2011.
[9] AutoHotKey-维基百科.http://zh.wikipedia.org/wiki/AutoHotkey#.
收稿日期:2015-01-31。徐欢,工程师,主研领域:计算机硬件,软件技术及互联网技术等在审计信息化中的应用。
中图分类号TP3
文献标识码A
DOI:10.3969/j.issn.1000-386x.2016.07.026
DISCUSSING THE USE OF SCRIPTING LANGUAGE IN AUDIT WORK
Xu Huan
(ShanghaiPudongNewAreaAuditManagementandInformationCenter,Shanghai200125,China)
AbstractIn application process of audit informatisation, there are the problems of imperfection in auditing software’s functions and diverse users’ needs. In view of these, we proposed to solve such problems with scripting language technology. First, we summarised the practical technical demands in audit work, analysed the characteristics and advantages of the scripting language, and the reasons that the scripting language technology is applicable to audit work. Then in specific auditing cases, we discussed in detail the scripting language used and their roles played, these further explained that the scripting language technology can improve the efficiency of auditing software and satisfy the audit demand in particular function. Scripting language technology is a programming technique easily to learn and to use, it can help auditors to develop a convenient and efficient program with specific functions so as to better satisfy auditing demands. With this article we hope to broaden the ideas of audit informatisation construction work, and to better serve the development of auditing business.
KeywordsAudit informatisationAuditing softwareScripting language