基于AC Report 组件报表打印设计和实现
来源:https://max.book118.com/html/2017/1203/142521360.shtm (原创力文档)
https://wenku.baidu.com/view/c4b2b379dcccda38376baf1ffc4ffe473368fdfa?fr=xueshu (百度学术)
基于AC Report 组件报表打印设计和实现
摘要:介绍了一种基于AC Report组件的报表打印的解决方案,提出了解决组件数据读取问题的通用方法,并通过一个例子详细说明了报表打印的设计与实现,具有较强的通用性和灵活性。
关键词:AC Report;组件;报表打印
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)10-2236-03
Abstract: This paper introduced a solution of report printing which is based on AC Report component. A method is proposed to solve the problem of reading data of the component. The design and implementation of the solution are illustrated through an instance, which have a strong versatility and flexibility. Key words: AC report; component; report printing
报表打印作为信息管理系统的重要组成部分,是系统开发工作的一项重要内容。目前,由于传统程序语言报表打印功能的处理能力较弱和用户要求越来越丰富的实际情况,组件技术凭借其较强的通用性、灵活性等优势,逐步成为软件开发人员进行报表打印功能开发的首要选择[1-3]。
当前应用较多的报表组件主要有Crystal Report、Grid++ Report和AC Report等,其中AC Report是一款国内最早的基于表格,支持图文混排、公式和脚本的中国式报表组件。由于AC Report组件具有表格的灵活性、功能的全面性、样式的多样性等特性,并且更适合中国本土化报表习惯,从而成为了国内报表开发领域使用的主流组件。该文以某被装管理信息系统中基于AC Report组件的报表打印的设计实现为例进行讨论。
1 报表打印的功能设计 1.1 打印流程 基于AC Report组件的报表数据是直接从数据库读取的,打印流程比较简单:
1)打印开始; 2)系统读取并加载数据库中的报表数据到报表模板的数据集中; 3)系统调用报表模板,模板根据插入的数据字段读取数据集中的数据,并将其加载到报表中,完成打印或打印预览动作。
1.2 数据库设计 如上节所述,AC Report组件在报表生成中会直接调用报表模板,模板再根据报表的数据字段读取数据库数据并将其输出。在此过程中,往往有两个问题需要注意。 一是数据转换问题。由于组件技术的通用特征,数据库中数据的格式和内容不一定正是程序开发人员想要的输出,这就需要对那些不符合要求的数据进行转换,主要是增加需要的数据,简单地如在日期数据中添加“年、月、日”等。为了不修改原始数据,通用的解决方法是在数据库中创建新的数据表,打印时将转换之后的报表数据写入到相应的表中,以备模板直接读取进行打印。 二是数据冲突问题。以上方案虽然解决了报表数据转换问题,但由于每次打印都需要读写数据库,这在分布式系统中,特别是在报表打印比较集中的时期,极有可能造成数据读写冲突。为此,提出了另一种解决方案,即在本地创建一个轻便的Access数据库,用它来储存打印所需的全部数据,打印时先清空相应的数据表,再把所需数据转换后写入其中,当系统调用报表模板后,模板读取库中数据并将其加载到报表中。由于数据库的读写都在本地,从而很好的解决了冲突问题。
1.3 报表模板设计 报表模板的设计都是在AC Report组件的报表设计器中完成的,它的风格近Word表格风格,但它比Word或Excel表格更加灵活,而且功能全面,支持多种报表样式和多种单元格样式。系统开发人员可以根据用户需求,很方便的完成清单式、分组式、交叉式以及子报表等样式设计,也可以在单元格中完成图像、图表、RICH文本、条形码等的编辑,还可以在报表中嵌入Word或Excel文档。设计完报表和单元格样式后,再插入需要的数据字段、变量、公式等。
2 报表打印的功能实现 为了更好的讨论报表打印的实现过程,现以Visual Studio 2005环境下MFC编写的基于AC Report2.89组件的被装服务系统为例,进行具体的阐述说明。
2.1 数据库的设计实现 在被装服务系统中,需要对进出库各项业务的相关清单报表进行打印,现在以正常入库为例来介绍数据库的设计实现。使用Access软件创建一个print.mdb数据库,建一张...