一种自定义动态报表系统的设计与应用
2013-08-16巫乔顺彭海波
巫乔顺,彭海波,李 杰
(武钢集团昆明钢铁股份有限公司信息中心,云南昆明 650302)
报表主要用来展现一些综合数据,计算机广泛应用之前多以人工填报方式完成,不仅工作效率低下,劳动强度大,而且出错率较高。随着计算机技术的发展,在目前的实际应用中,有的企业购买专门的报表软件来完成报表填报,有的企业则在计算机程序语言中采用硬编码绘制。这些方法在实施成本、维护成本及灵活性等方面都存在这样或那样的不足,尤其当用户报表需求变化时,往往要等待开发人员来修改报表,甚至要重新开发新程序后才能实现,往往满足不了报表需求经常变化的实时性要求,即使勉强满足,也会让开发维护人员疲于奔命,增加实施和后期维护成本。而对于已出现的部分应用Excel做介质的报表处理技术,除了在灵活性及可配置性方面有欠缺外,只能在Windows系统上实现,在Linux或者Unix等系统上就无能为力了。
有鉴于此,为克服现有技术的不足,本文设计了一种以低成本、易用性、可配置、自定义为目的的动态报表系统,以满足用户多变的需求。
1 总体设计
首先,利用XML具有的自定义性、可扩展性等优势[1],选定其来定义各种类型报表的数据乃至报表格式,作为报表数据和格式的定义语言;其次,选定目前市场上用途最广、使用人数最多的电子表格系统Excel来定义报表模板,借助其强大的展现和数据处理功能,方便用户根据需求自己编辑、定义所需报表以方便处理复杂的中国式报表,实现所见即所得功能[2]。
本文设计的是一种自定义动态报表系统,由数据层、定义层、业务层和展现层构成,如图1所示。
图1 报表系统结构图
数据层为任何能提供报表原始数据的数据源,如数据库、文本文件等,可以是异构的。
定义层是基于XML的配置文件,由报表宏观定义、报表头定义、报表体定义、报表尾定义共4部分组成。报表宏观定义主要用来定义报表的类型、最终处理方式、打印机名、打印份数、数据源获取方式等;报表头定义、报表体定义、报表尾定义用来定义报表数据具体对应的数据层数据和显示位置、计算公式。
展现层是基于Excel的模板文件,在模板中定义共性的报表元素或者特征,或者由程序根据配置文件生成报表,如报表的风格、描述性文字及其内容、字体、颜色、计算公式等信息。
业务层具有解析配置文件、加载报表模板、处理报表数据、生成最终报表的功能。
本文设计的报表系统根据报表头、报表体、报表尾的特征按下列类型进行划分。
Ⅰ类报表:表中的行、列数据格式均固定不变,报表数据以填充单元格形式提供。
Ⅱ类报表:报表头和报表尾格式固定,报表体的列格式及其中的数值类型、数量、描述固定,而行格式及其中的数据为动态可变,如图2所示。
图2 报表分类示意图
Ⅲ类报表:报表头和报表尾格式固定,表中的行、列格式及其中的数值类型、数量、描述为动态可变。
2 具体实现
下面以自定义带条形码打印的某钢材标牌报表的实现作为示例,介绍报表在本系统中的实现,标牌报表如图3所示,实现流程如图4所示。
图3 Excel模板文件示例图
101,根据报表需求定义报表类型。如图3所示,该标牌报表是一种钢材产品标牌,报表显示的行、列格式固定,需要打印二维条码,数据来源于数据库,但标签打印纸的高度、长度、报表元素等格式为动态可变,需要根据生产情况和标签纸消耗实际情况决定,因此根据报表需求将带条形码打印的标牌报表定义为Ⅰ类报表。
图4 自定义动态报表生成流程图
102,根据步骤101的Ⅰ类报表类型定义XML配置文件。
第一步,在计算机硬盘指定路径下新建以该报表名字命名的文件夹“热轧钢带大牌”。
第二步,在“热轧钢带大牌”文件夹下新建一个Excel文件,命名为“热轧钢带大牌.xls”。内容包含品名、标准、级别、重量、规格、钢种、检验员、日期班别、二维条码控件等。建立后的模板文件如图3所示,其中的文字描述最好与生产实际的相似,能让人一目了然,而二维条码控件则是Excel自带的ActiveX控件,值指向单元格A7。
图5 XML配置文件示例图
第三步,在“热轧钢带大牌”文件夹下新建一个XML文件,命名为“Declare.xml”。建立后的配置文件如图5所示,包含报表宏观定义、报表头定义、报表体定义、报表尾定义4个定义部分,其中报表宏观定义中定义了报表的类型为Ⅰ,报表的处理方式为直接打印,打印机名为K28,打印数量为2。由于默认的数据来源于数据库,所以本示例省略了数据源方面的定义。由于此报表可以看作Ⅱ类型的特殊形式,即只有报表头的报表,因而也只对报表头进行了定义,如图5所示。“FS PRINTMATERIAL”这一数据字段对应图3所示的“热轧钢带大牌”所在单元格,即行索引为2,列索引为B,其他字段定义依此类推。
103,通过业务层解析 XML配置文件,得到“Declare.xml”配置文件信息,同时“热轧钢带大牌.xls”模板文件加载至计算机内存中,以形成普通报表。
104,根据步骤103得到的配置文件信息,从数据层获取原始数据并加工成报表数据。本步骤中,系统根据“Declare.xml”配置文件首先从数据库中找到FS_PRINTMATERIAL、FS_STANDARD等原始数据并进行处理,如是否求和、求平均值、小数位数处理等,本示例中的IsSum=“0”表示不需要进行求和计算。实际操作中,大多数公式可以在Excel模板中直接进行定义,并不需要报表系统解析公式后再单独处理,“Declare.xml”配置文件中的公式定义功能是在情况比较复杂、Excel模板很难定义的情况下才使用。
105,将步骤104加工的报表数据与步骤103加载的展现层即Excel模板文件结合后,在系统内存中生成报表。本步骤中,报表系统会将步骤104中处理好的报表数据依据配置文件定义信息填充到Excel模板对应位置,如“品名”对应的数据源FS_PRINTMATERIAL输出到第二行的B列,生成后的报表驻留在内存当中。
106,根据步骤103得到的配置文件信息对步骤105生成的报表进行处置后,打开或下载保存或直接打印出报表。本步骤中,报表系统会根据“Declare.xml”配置文件的配置信息处置驻留在内存中的报表,处置完成后将Excel报表模板、XML定义文件、报表对象注销,释放内存资源,在本示例中,将调用名为“K28”的打印机进行打印,打印数量为2。
3 结束语
本系统能够满足多变的报表需求,既可应用于C/S系统,也可应用于B/S系统。报表制作简单,使用灵活,数据层、业务层、定义层及展现层的相互分离,使得用户只要会使用Excel就可自己调整和定义,实现所见即所得。同时能使报表系统的实施和维护成本大幅降低,通过简单的配置即可自定义动态生成报表,服务端的部署可以在Linux或者Unix等系统上完成,具有极高的灵活性、易用性和实用性。
[1] 凌宇.基于XML的动态报表实现[J].计算机工程,2004(增刊1):607-609.
[2] 文静华,张梅,田建强.基于Excel的企业通用动态报表生成工具的设计[J].计算机工程,2005(4):221-223.