1、表名称列表的设计
根据企业所需报表的分类,建立树型结构的报表分类表,即各大类报表下细分小类报表,依次到具体的报表名称,类似windows操作系统中资源管理器中的结构形式,建立“报表名称信息库”,其中必需包含的字段有:
报表代码 报表名的主关键字
主键值 树型结构中的主键值
父结点 树型结构中父结点的键值(为空则表示是根结点)
是否存在子结点 树型结构中是否存在子结点
报表名称 报表名称的中文名称
标题名称 报表名称的标题名称
数据库代码 报表所需数据的数据库代码
流程库代码 报表中部分数据的数据库代码
时间字段名称 数据表中时间字段的名称代码
时间字段特征 指定所需年、月、日的情况,以确定为年报、月报或日报
显示条件 对按指定的时间查询出的数据再增加特定的查询显示条件
报表类型 表示是共性表或个性表
行高 显示每行的高度(针对共性表)
是否统计 是否需增加一条对所查数据的统计信息记录(针对共性表)
数据表数量 所需查询数据表的数量(针对个性表,为0时需用户权限)
数据表位置 所查询数据表的具体位置(为空则为系统设置的网络路径)
程序设计时,在主form窗口中加入windows activex 的treeview控件,根据报表名称信息库中结构关系,在activate过程中给treeview加入各报表名称结点,并设置各报表名称的显示方式。这样在以后的管理中不需对程序进行任何修改即可任意地增删报表,调整报表的显示信息。
2、共性表的设计
共性表一般由标题部分、表头部分、数据信息体三部分构成,其典型式样如图1所示(本系统所设计的共性报表之一)。
图1 共性表示意图 设计方法分以下几点:
(1)根据报表数据内容,设计数据库(表)的结构,建立数据库。设计库(表)结构时应尽量考虑得全面,字段的类型设置准确,长度充足,所建数据库应放在网络服务器中。
(2)报表表头设计。为了使报表直观和美观,表头设计采用表格形式,经多方面的比较,从网上查到一种新开发的共享注册软件——flexcell控件,该控件比较适用于表头设计。
flexcell是一款美观、方便、易用的电子表格控件,可在程序中设置单元格(cell)各种属性和方法,附带flexcell表格设计器,提供图表、打印预览、打印等功能,不需要excel运行库支持就可以输出为excel workbook。使用flexcell控件,可以方便地制作出非常专业的报表和数据录入界面。
建立“表头信息库”,每个表头单元格作为一条记录,并输入其各显示属性。“表头信息库”中包含的字段有:
报表代码 报表名的主关键字
行号 表头单元所在行的行号
行高 表头单元所在行的行高
合并行数 表头单元所在行需进行的行合并数量,不需合并则为0
列号 表头单元所在列的列号
列宽 表头单元所在列的列宽
合并列数 表头单元所在列需进行的列合并数量,不需合并则为0
单元名称 单元格内需显示的文字信息
显示属性 单元格内显示的文字的字号、字体、粗细、前景色、背景色等
(3)报表数据信息体设计。报表数据信息体采用传统的系统控件——grid控件来实现。将查询结果库作为grid的数据源,根据表头所需显示的信息,设定各显示字段的属性和计算统计方法。
为了实现对报表数据项进行灵活的处理及对其显示属性设计,需根据报表所对应数据库的库结构,建立其相应的“查询信息辅助库”,其中需包含的字段有:
报表代码 报表名的主关键字
字段名称 显示字段的名称
字段类型 显示字段的类型
字段长度 显示字段的长度
字段小数位 显示字段的小数位长度
显示顺序 显示字段的在grid中的显示顺序
统计标识 在汇总记录中字段是否需要进行计数、求和、求平均数等操作
计算方法 根据原库中的有关字段进行计算处理形成新字段的方法
显示属性 单元格内显示的文字的字号、字体、粗细、前景色、背景色等
(4)报表数据查询。通过点击报表名称列表中的报表名称,运行报表查询程序(只限于报表名称项即最底端子结点才可,而报表类别项即父结点则不能,或“报表名称信息库”中无子节点的记录),按用户指定时间(年或年月或日期)查询网络数据库(共性表的数据源往往只含一个数据库),然后根据其“报表名称信息库”和“查询信息辅助库”来处理查询结果库,包括根据显示条件筛选数据记录、根据流程库筛选数据记录、筛选所需的字段、重新计算生成新字段、增加汇总合计记录及其各字段的值等处理过程,形成最终的结果库。
(5)报表生成与显示。由设定的查询时间和“报表名称信息库”中“标题名称”来确定报表的标题名称(caption)。根据“表头信息库”来设定报表表头(flexcell控件)的显示属性,计算其大小,根据系统显示版面的大小设置其显示位置。报表数据信息体(grid控件)中各数据项字段的显示属性由“查询信息辅助库”来决定,每列的列宽与表头对应的列宽相等,行高设为“报表名称信息库”中行高值,显示位置设在表头正下方,并紧贴表头,另还需根据系统显示版面的大小计算其高度,最后在共性表的显示页面中显示出报表。
3、个性表的设计
共性表一般只由标题部分和数据信息体(表体)部分构成,表体由提示信息部分和数据部分构成,其典型式样如图2(本系统所设计的较为复杂的个性报表之一)所示。
图2 个性表示意图 设计方法分以下几点:
(1)与共性表一样,根据报表数据内容,设计数据库(表)的结构,建立数据库。要注意对一份比较复杂的个性表,往往需要建多个数据表,其数量由“报表名称信息库”中的“数据表数量”来设定。
(2)表体设计使用flexcell控件。对提示信息部分的设计方法与共性表的表头设计一样;数据部分仍在flexcell控件中显示,其“查询信息辅助库”与共性表有所不同,其中需包含的字段有:
报表代码 报表名的主关键字
数据库代码 对复杂报表中可能含多个数据库信息,其代码也各不相同
字段名称 显示字段的名称
字段类型 显示字段的类型
字段长度 显示字段的长度
字段小数位 显示字段的小数位长度
行号 所在单元行的行号
行高 所在单元行的行高
合并行数 所在单元需进行的行合并数量,不需合并则为0
列号 所在单元列的列号
列宽 所在单元列的列宽
合并列数 所在单元需进行的列合并数量,不需合并则为0
计算方法 根据原库中的有关字段进行简单计算处理的方法
显示属性 单元格内显示的文字的字号、字体、粗细、前景色、背景色等
(3)报表数据查询。点击报表名称列表中的报表名称,按指定时间(年或年月或日期)查询网络数据库,对复杂个性表的数据源往往有多个数据库,需根据代码和数据库数量结合来查询各具体的数据库,然后对各结果库进行数据记录筛选和适当的数据项目计算处理,形成最终的结果库。
(4)报表生成与显示。报表的标题名称(caption)设定方法同上。根据“表头信息库”来设定提示信息部分的显示属性,方法亦同上。数据部分的显示应分别根据“查询信息辅助库”对各结果库进行处理,显示属性的设置方法与提示信息部分的设置方法类似,只是对某些含多条记录的结果库,显示处理时,只增加行号,各字段列号与第一记录相同。最后计算flexcell控件的大小,计算调整其显示位置,在个性表的显示页面中显示出报表。
4、系统的其他功能模块设计
(1)数据的安全性与访问权限。后台数据库的选择可用sql server、oracle、dbf等。用户访问后台数据库时,较常用的方法是进行身份验证,即在sql连接串中加入用户名和密码,为了别于对用户的管理,本系统设计了用户信息库,并对其进行加密处理,对所有普通用户和特殊用户对每一类报表设置访问权限,这样就保障了数据信息的安全性和保密性。
(2)数据的录入、加载(导入)、导出。对报表数据有操作权限的用户,可以直接在报表中进行数据修改或新数据的录入,根据“查询信息辅助库”中设置的各数据字段的对应关系,可按设定的时间加载到网络数据库中,同时应检查库中是否重复。数据导出可存储为dbf、txt或xls文件,flexcell控件本身就有直接导出到excel文件的功能。
(3)报表的打印。对于共性表可直接设计报表文件进行打印输出,亦可应用vb编制与excel的接口程序,将报表导出到excel中打印输出;对于个性表则可直接利用其打印方法——object.printpreview ()来实现,只是如控件未注册,将在输出的报表中加上“unregisted”的字样。
5、结束语
一套完善、系统的应用程序,能较大程度地提高工作效率,方便以后对系统管理与维护工作。本系统应用中只需安装一次,即可由管理员根据用户的需要随时将所需的报表信息添加到查询界面中,而不必对程序进行任何的修改。