Appearance
第14章 报表创建基础
14.1 DELPHI环境下使用方法
要开始报表,使用控件面板上的TRMReport控件。
在创建报表之前必须做到:
- 放置TRMReport控件到窗体上
- 若使用数据库数据,放置TTable、TQuery等数据感知控件到窗体上
- 对于每个data-band,创建管道(TRMDBDataSet或TRMUserDataSet)并设置属性
14.2 安仕达ERP系统下使用方法
我们需要启动安仕达ERP系统,然后通过点击 编码 或者 单据 窗口的报表按钮,进入我们的 报表管理窗口,然后进行新增报表。

14.3 报表的数据来源
动态报表的内容来自于数据,因此要对数据的概念有所了解。
直观上,数据是我们报表中的内容,实际上数据是无所不在的,我们打印的数据都是计算机软件所管理的数据,所以我们必须了解数据在计算机中是怎样存放的。
在现实生活中,数据是丰富多彩,多种多样的。我们先来看以下两个表:
图一:学生成绩一览表
| 学号 | 姓名 | 课号 | 课程名称 | 平时成绩 |
|---|---|---|---|---|
| 01 | 张三 | 1 | 化学 | 85 |
| 01 | 张三 | 2 | 语文 | 85 |
| 02 | 李四 | 2 | 语文 | 90 |
| 03 | 王五 | 3 | 数学 | 75 |
图二:学生档案卡
| 学号 | 01 | 姓名 | 张三 | 性别 | 男 |
|---|---|---|---|---|---|
| 出生日期 | 1982 | ||||
| 备注 |
从以上两张表我们来理解字段、记录、表、数据库的含义以及它们之间的关系:
- 字段:表格中的一列或卡片中的一项,是最基本的元素。
例:图一学号、姓名、课号、课程名称、平时成绩;图二学号、姓名、性别、出生日期、备注都是字段。 - 记录:表格中的一行或一张卡片,由若干字段组成。
例:图一(01, 张三, 1, 化学, 85)组成一个记录;图二(01, 张三, 男, 1982年)组成一个记录。 - 表:一个表格或一组卡片,由若干记录组成。
例:学生成绩一览表、学生档案卡两个表。 - 数据库:若干相关联的表格和卡片组的集合。
14.4 数据元素的层级包含关系
数据库 > 表 > 记录 > 字段
数据库(DATABASE)
你可以将数据库想象成一个大图书馆,里面保存有许多的数据,也就是书籍吧,每个数据(书籍)都包含有你需要管理的各种信息,例如“人员档案”、“商品目录”、“商品价格表”等等。
表(TABLE)
- 表的含义:表是数据库中保存所有数据的对象。表格由两个基本对象构成——字段与记录。
- 表的英文名称:Table
- 表的开发名称
- 表的索引
具体在我们的报表中,我们会使用BAND来绑定这些数据源,例如

字段(FIELD)
- 字段的含义:字段包含一定的信息类型,如姓名,学号,也称为列。
- 字段的英文名称:Field
记录(RECORD)
记录的含义:记录是一组相关字段,包含一个实体(如学生)的所有字段信息,记录也称为行。
表的主从关系
- 又叫一对多关系
- 表的关联
14.5 报表和数据的连接
只有将报表和数据连接起来,才可以制作出我们所需要的动态报表。具体是怎么连接的,在一些专业的软件设计语言(例如VB,FOXPRO)中,是比较困难和复杂的。在安仕达ERP软件中,已经最大程度地简化该操作,现将报表设计的原理列示如下。
- 报表中的显示内容可以分为以下几类:
- A:在所有页面中只出现一次的;
- B:在每一页的特定位置都要出现的,如页头和页脚;
- C:根据数据表记录的内容每行都要出现的;
- D:在第一行或者最后一行出现的;
- E:其它的情况。
- 只要在报表中可以指定某部分显示的内容和某个数据表的某个字段有关,那么在打印之前报表会自动去数据表中将该字段的值读出来,打印在报表上。
- 为了帮助你方便准确地判断,报表系统将自动地列出可用表和字段的中文含义。
- 如同 WORD 和 EXCEL 一样,报表设计的过程是分多次完成的,可以反复地修改。
- 报表设计的过程可以总结为:
分析报表内容分类→摆放报表内容→绑定内容与数据表字段→反复预览、调整修改
14.6 报表与数据库流转链路
数据库 → 安仕达ERP软件 → 记录集/数据集 → 动态报表
第15章 报表类型详解
15.1 简单报表(列表)
放置“主项数据”Band到页面上,在它上面放置所需的对象,连接Band到适当的数据集。
绝大部分的 编码窗口 和 业务单据 打印,我们都是使用这个报表类型。

15.2 主-从报表
放置“主项数据”和“细项数据”Band,数据表必须建立主-从关系。若相应细项数据列表为空,主项数据移到下一条记录。

少数的定制化报表,会使用到这个报表类型。
15.3 主-细-子细报表
放置“主项数据”、“细项数据”和“子细项数据”Band。
15.4 交叉报表
用于打印栏目可变的表。放置“主项数据”和“交叉表数据”Band。
交叉表由两次生成:第一次确定最大行高,第二次输出数据。
15.5 动态报表
Band高度依赖于Band中包含的对象。对象的伸展由文本长度决定。
“伸展”选项必须被激活才允许对象伸展。若有多个伸展对象并排,所有对象的底边将与最底的Band对齐。
15.6 Bands分隔
打印Band时若页面空间不够,将生成新页面。Band不必激活“伸展”选项,但必须激活“分隔”。
“Text”、“RoundRect”和“RichText”对象能够分隔内容,其它对象当空间不够时输出到下一页。
15.7 分栏报表
在页面选项中设置分栏数即可将普通报表转为分栏报表。“栏目头”和“栏目脚”为每个分栏提供头和脚。
也可分别指定各个Band的分栏数。
15.8 带封面的报表
创建多页报表(首页为封面,接着是其它信息)。要创建或删除页,选择工具栏和菜单中的功能项。
多页报表就是一个报表中包含多个报表。
15.9 嵌套报表(子报表)
在报表中放置“子报表”对象,连接到另一个报表。
限制:
- 不能在子报表中使用分栏
- 不能使用报表标题、报表合计、页头、页脚、栏目XXX Bands
- 不能分隔Bands
- 不能使用分组
15.10 主-从-从报表
在页面上放“主项数据”和两个“细项数据”Bands。
15.11 复合报表
使用TRMCompositeReport对象,在运行时设置“Reports”属性包含其它报表。
15.12 包含BLOB字段报表
插入相关字段到对象的Memo(或在对象观察器中设置“DataField”属性)。
15.13 没有Band的报表
所有对象直接放在页面上,按摆放位置打印。
15.14 分组报表
使用ReportMachine表达式作为分组条件。当表达式的值变化时,开始新组。
放置“分组头”和“主项数据”Band。在分组头编辑器中输入表达式。
限制:不能在子报表中使用分组。
注意:用于“主项数据”的数据集必须已按分组条件排序。
15.15 图表报表
至少需要一个数据Band并指定到适当的TRMDataSet。在Band上放置Chart对象。
在图表编辑器中选择图表类型,在数据页中输入图例和数据的Memo名称。
