郑明钊,张建强
(1. 中国移动通信集团设计院有限公司山东分公司,山东 济南 250101)
基于NPOI的通信工程概预算系统的设计与实现
郑明钊1,张建强1
(1. 中国移动通信集团设计院有限公司山东分公司,山东 济南 250101)
随着通信行业的不断发展,通信设计工作人员的工作压力也越来越大。当前市面上存在这一些通信工程概预算软件,通信设计人员在使用它们进行概预算工作时,其产生编制文件速度慢,且不支持“营改增”,使得其工作效率低下。本文提出的基于NPOI的通信工程概预算系统,使用.Net framework实现,使用第三方组件NPOI来生成编制文件,不但可以大大提高编制文件生成速度而且还很好的支持“营改增”,提高了设计人员的工作效率。
通信工程概预算;营改增;NPOI;.Net
随着通信行业的不断发展,通信工程设计工作也变得越来越杂起来。对于工程设计人员来说为了减轻其工作中的压力,提高其工作效率,市面上已经开发出了一些概预算系统[1]。但是,这些软件大多是基于Microsoft Office Excel的com组件来生成预算文件,其生成速度相对较慢,这样就降低了通信工程设计人员做预算的效率。另外,不同版本的Microsoft Office Excel版本存在兼容性问题,也对设计人员的工作产生了影响。目前,2016年5月1日起,我国实施了“营改增”[2]试点方案,很多行业都实施了最新的增值税率,而旧版的通信工程概预算系统并未对营改增方案进行很好的支持。
所以,基于以上提出的编制文件生成速度慢、兼容性不好和营改增方案支持不好的问题,本文提出使用第三方组件NPOI[3]来实现《基于NPOI的通信工程概预算系统》的方法,并对2016年5月1日起实施的营改增方案进行了很好的支持。
通信工程概预算系统主要是对通信工程项目的所有单项工程进行概算、预算操作,通过一系列的计算的到概(预)算结果,然后通过概预算系统制成编制文件,从而实现最大化的概预算自动化。
本系统的概预算所要生成概预算表格[4]主要有:
1、汇总表:主要汇总项目中每个单项工程的各项费用;
2、表一:汇总单项工程各项费用;
3、表二:汇总建筑安装工程费,包括直接费、间接费、利润和税金(销项税额);
4、表三甲:汇总建筑按安装工程量;
5、表三乙:汇总建筑安装工程机械使用费;
6、表三丙:汇总建筑安装工程仪器仪表使用费;
7、表四甲:汇总国内器材使用费用;
8、表四乙:汇总引进器材使用费用;
9、表五甲:汇总工程建设其他费用;
10、表五乙:汇总引进设备工程建设其他费用。
另外,根据营改增的新要求,上述表格格式会有所改变,具体如下:
1、汇总表、表一:人民币变为除税价、增值税、含税价三项;
2、表二:税金变为销项税额;
3、表四:单价与合计分别变为除税价、增值税、含税价三项。
1.1 功能性需求
根据上述系统所需生成的表格和营改增的要求,从功能性需求角度来分析,本系统需要有工程概预算方面的功能和系统管理两方面的功能。
工程概预算类功能需求如下:
信息录入功能:基本信息录入和概预算编制信息录入。基本信息录入包括项目、单项工程、编制人员、设计单位、是否为引进等信息;概预算编制信息录入,即对表三至表五的编制信息进行输入。
费用计算功能:计算各个表格所需要填写的费用,包括表一至表五;
编制文件预览功能:对表一至表五Excel表格文件进行预览;
编制文件生成功能:表一至表五Excel表格文件生成;
关联生成:表三甲定额有的会关联一些材料,系统会自动关联材料到表四甲中;
系统验证:在系统启动时,需要对系统进行版权验证和版本信息验证,若版权信息不符则不能启动系统,若版本过低则提示更新。
另外,系统有很多地方需要进行配置和维护,所以就需要有一个系统管理功能,其需求如下:
定额库维护:包括自定义定额库维护和标准定额库维护,主要对定额信息进行导入、删除、编辑等维护操作;
材料库维护:对材料的名称、规格、单价进行导入、删除、编辑操作;
仪表库维护:对仪表的名称、规格、单价进行导入、删除、编辑操作;
机械库维护:对机械的名称、规格、单价进行导入、删除、编辑操作;
系统设置:精度设置、汇总表设置、编制办法切换以及软件注册等。
1.2 非功能性需求
为了让本系统运行更加安全和流畅,本系统需要满足如下系统指标:
单个Excel生成时保证生成时间在30秒内,以提高工作效率;
系统兼容性:系统生成的Excel可以兼容不同版本的Excel。
1.3 系统用例分析
经过上述对系统的功能性和非功能性需求分析后,可以得出系统所需要实现的功能,概预算子模块的用例图如下图1-1所示,系统管理模块的用例图如下图1-2所示:
图1-1 概预算子模块用例图
图1-2 系统管理模块用例图
经过上述对通信工程概预算系统的需求分析,系统整体模块图如下图2-1,由图可知系统整体分为4大模块:系统接口模块、概预算子模块、系统管理模块和数据存储模块,另外底层说明了系统实现所用到的技术。下面将对各个模块的设计与实现进行详细的阐述。
图2-1 通信工程概预算系统模块图
本系统所面向的人员主要为设计人员,所以其使用系统主要为Windows系统,所以本系统使用具有良好面向对象开发特性的.net framework[5-7]框架来实现,整体功能编码通过C#语言来编写。底层对数据库的操作使用Nhibernate[8]来完成,另外使用Castle[9]的IOC机制来实现对底层数据的调用。展示模块使用Developer Express[10]来实现。
2.1 系统数据存储
为了很好的分析通信工程概预算系统内的数据流向,可以使用数据流程图来进行描述,本系统的数据流图如下图2-2所示。通信工程概预算系统对数据进行操作的部分总共分为概预算子模块和系统管理两个模块。概预算子模块在进行概预算操作时会读取配置文件和access数据库内的存储的配置信息和一些定额、材料、机械和仪表的信息。在预览和导出Excel文件时会读取Excel文件模板来生成编制文件。系统管理模块需要对系统的一些环境进行设置,比如数据精度、汇总表设置、切换编制办法以及软件注册等。这些都需要读写access数据库或者配置文件。
所以,综上所述可以得出通信工程概预算总共分为三种数据:配置文件、access数据库、Excel文件模板。下面将对这几种数据进行分别的详细阐述。
配置文件:在进行软件注册时,需要找到指定的版权验证网址,通过webservice发送注册信息来完成软件注册,而这些验证网址需要存储到一个配置文件内。
图2-2 通信工程概预算系统数据流图
Access数据库:数据库内分为三类数据,项目相关数据、标准库信息、费率相关数据。项目相关数据,即存储的是项目的基本信息包括单项工程名称、表格编号字头、建设项目名称、建设单位以及设计单位等信息;标准库信息,即存储的是在编制设计文件时所需的定额、材料、机械和仪表等信息;费率相关数据,存储的是编制设计文件时所需的费率信息,包括表二至表五的一些计算费用所需的费率。
Excel文件模板:当完成编制文件后,需要按照标准的格式导出Excel文件。所以,Excel文件模板就是存储的导出时所需要的标准格式。
2.2 系统业务逻辑
通信工程概预算系统主要依托于.net framework框架来实现,其各个业务模块之间协调工作,其调用关系如下图2-3所示。
图2-3 系统业务逻辑调用关系图
整个系统启动时,需要先对版本信息和身份信息进行验证,若信息正确则进入初始界面。此时,打开信息录入模块进行信息录入,将项目信息存储到Access数据库内。保存项目信息,完成一个项目的创建。因为项目版本可能为营改增或者非营改增的情况,所以需要手动的选择是否为营改增。此时,点击编制办法切换,对系统所涉及到的一些费率和费用进行修改。关联生成及对表三和表四所用到的信息进行自动生成,此时生成后的信息金额需要自行填写。在信息填写完成后,系统会自动对各项费用进行计算,并得到出结果。再通过预览功能对将要生成的Excel文件进行预览。通过导出功能,读取Excel文件模板,生成Excel编制文件。系统管理模块对系统涉及到的一些定额、材料、机械、仪表进行维护,另外还对计算精度和小数保留位数进行设置。
费用计算为业务逻辑实现的核心模块,其业务实现的时序图如下图2-4所示。
图2-4 费用计算模块时序图
其他模块首先需要将自己必要的费用参数和调用公式类型请求发送给公式解析模块请求计算费用。公式解析模块通过解析请求创建公式模板,请求公式计算模块进行计算。费率读取模块读取Access数据库内相关费率,设置公式计算模块的相关费率,公式计算模块再读取外部模块的费用参数,使用两部分数据对公式进行填充,最后计算公式得出结果,返回给外部模块。
编制文件预览和编制文件生成两个功能其实是非常类似的两个功能,其核心都是通过NPOI来生成Excel编制文件。下图2-5为编制文件生成模块业务时序图。费用计算完成后,通过读取Excel文件模板,获取到Excel文件的表头信息,以及样式信息。再通过Excel文件生成模块,将费用计算的结果填充到Excel文件内,设置好Excel文件页眉页脚和费用信息。最终生成Excel编制文件,将生成结果路径返回。
3.1 使用NPOI生成编制文件
传统的概预算软件都是使用Microsoft Office Excel的com组件来实现Excel文件的生成,其缺点就是生成速度慢,而且在批量编制文件生成或者用户机器性能差时,可能出现系统卡死现象或者崩溃现象。不同的Microsoft Office Excel版本之间存在兼容性问题。当用户的电脑上未安装Microsoft Office Excel时,就不能使用这种方式生成Excel。此外,在生成Excel编制文件时,NPOI不支持预览功能,而且概预算编制文件格式要求每个Excel分页在内容不满一页时,需要使用带边框的空行填充满。这样又对使用NPOI的使用带来了非业务性困难。
综上所述,可以归纳出本系统在生成编制文件时遇到的难点有如下:1、Excel文件生成速度慢;2、不同Microsoft Office Excel版本之间兼容性不好;3、对Microsoft Office组件有依赖性;4、NPOI不支持预览功能;5、Excel分页需要使用空行填充满页。下面将详细论述对上述问题的解决方案。
3.1.1 兼容性和生成速度问题
使用NPOI能够很好的解决Microsoft Office Excel的兼容性问题和生成慢的问题。下表3-1展示了分别使用两种不同方法生成Excel文件所需时间的对比。测试环境为:x86机器,Windows7操作系统,2 G内存,500 G硬盘,CPU主频2.65 Hz。
图2-5 编制文件生成模块业务时序图
表格3-1 生成时间对比表
经过上述测试,我们可以得出使用NPOI来生成Excel文件相对于Office的组件生成Excel,有很大的速度提升。综合来讲,本系统使用NPOI很好的解决了Excel文件生成速度慢和对Microsoft Office的依赖。
因为NPOI对Excel文件生成不依赖MicrosoftOffice Excel,即使在没有安装Microsoft Office Excel的机器上面,使用NPOI也可以生成Excel文件。所以使用NPOI生成Excel文件不存在兼容性问题。
3.1.2 Excel文件填充满页问题
在生成Excel编制文件时,要求最后一页若不满页的话需要使用带边框的空行进行填充满。这样的话就会产生两个问题:1、如何分页;2、如何填充最后一页。对于如何分页,我们可以固定Excel文件的页高,当写Excel文件达到页高时就换页。到最后一页时,若不满一页在使用等高空行进行填充即可。所以,在写入Excel时需要计算每一行的高度,将所有行的高度相加。最后将所有行的高度和去除页高,得到的余数与页高做差,然后使用该差值除以默认空行行高,即得到需要填充的空行数。
但NPOI对于正在生成中的Excel文件得到的行高为Excel默认行高,实际写入时该行可能会存在换行,使用默认行高就不正确。所以需要检测写入时具体的每一行的行高是多少。
因为Excel的写入是按照Excel模板表头的格式写入的,所以在检测写入时每一行的高度时需要按照先检测表头行的宽度。使用写入的文字宽带除以行宽即得到写入行的行数,再乘以默认行高即得到写入的行高。详细的计算行高步骤如下:
检测Excel模板文件表头行的宽度占字节数,设为N;
得到默认行高高度设置为H;
计算写入每行的文字字节数为M;
计算一行Excel写文字所占行数:若M%N>0,则L=M/N + 1;若M%N=0,则L=M/N;
行高为Height=L*H。
3.2 “营改增”变化支持
营改增后通信设计行业在做概预算时有很多费用计算方式产生了变化,下面将详细阐述这些变化以及本系统的计算方式。
1、表一:在“总计”下面增加两行:“增值税”和“含税总价”。
2、表二税金在营改增之前计算方式为:
税金 = ((直接费+间接费+利润-国内主要材料费不计税金部分)×3.41%
在营改增之后表二税金名字改为销项税额,其计算方式变更为:
销项税额 = (人工费+乙供主材费+辅材费+机械使用费+仪表使用费+措施费+规费+企业管理费+利润)×11%+甲供主材费*适用税率。
3、表四中“单价”为不含增值税的金额。增加“增值税”和“含税总价”两列。按设备、材料、软件、服务等相关合同约定计算“增值税”和“含税总价”。
4、另外下表为营改增后发生变化的一些费率:
表格3-2 增值税率表
对于通信工程设计人员工作来说,当前的设计工作量还是相当大的。本文提出的基于NPOI的通信工程概预算系统,相比以往的系统来说,优化了很多文件生成部分的速度,以及新增了营改增的支持。这样设计人员在进行概预算工作时,就不会因为这些琐碎的事情耽误工作。如此,便获得了工作效率的大幅提升。最后,希望本系统能够在通信行业中得到广泛的使用来帮助通信设计人员减轻工作压力。
[1] 张延彬. 通信工程概预算编制系统的设计与实现[D]. 山东大学, 2010.
[2] 李文. 全面实施营改增探讨[J]. 现代商贸工业, 2016, 19: 102-103.
[3] 昌兆文, 刘湖平, 曾绍军. 基于NPOI导出Excel文件的研究与实现[J]. 中国管理信息化, 2013, 15: 93-94.
[4] 胡定. 通信建设工程概预算编制系统的分析与设计[D].北京邮电大学, 2008.
[5] 陆正, 周晨, 谷瑞..NET反射在Excel文件比较中的应用[J].软件, 2013, 34(10): 27-29.
[6] 王念桥. ASP.NET MVC 模型绑定应用研究[J]. 软件,2013, 34(12): 167-169
[7] 程宁. 基于.NET MVC 架构的网上考试系统的设计与研究[J]. 软件, 2013, 34(6): 20-22.
[8] 陈龙. 基于. NET平台ORM技术—NHibernate的研究与应用[D]. 长春理工大学, 2007.
[9] 杨扬. 基于Castle框架组件机制的研究及其应用[D]. 武汉理工大学, 2008.
[10] 魏志明, 李家, 吕天阳. Developer Express.Net控件中内嵌的Ajax技术研究[J]. 绿色科技, 2016, 20: 154-156+159.
Design and Implementation of Budget System for the Telecommunication Engineering Based on NPOI
ZHENG Ming-zhao1, ZHANG Jian-qiang1
(China Mobile Group Design Institute Co., LTD Shandong, Jinan 250101, China)
With the continuous development of the telecommunication industry, designers of telecommunication face increasingly high pressure. At present, there is project budget software for the telecommunication engineering in the market. When the telecommunication designers use such software in doing the budget work, the speed for generating complied documents is slow. What’s more, the software does not support the business tax transferring to value added tax. Therefore, the working efficiency is low. This paper proposes the NPOI-based telecommunication engineering budget system which is realized through. net framework. It uses the third-party component NPOI to develop the documents. By doing so, it does not only improve the speed for the documentation generation, but also supports the business tax transferring to value added tax, which improves the working efficiency of designers.
Budget for the telecommunication engineering; Business tax transferring to value added tax; NPOI; .Net
TP311
A
10.3969/j.issn.1003-6970.2016.12.013
本文著录格式:郑明钊,张建强. 基于NPOI的通信工程概预算系统的设计与实现[J]. 软件,2016,37(12):54-58