第 9章 报 表 设 计
TO PRINTER 打印命令
LIST|DISPLAY STRUCTURE TO PRINTER && 打印当前表的结构
LIST|DISPLAY TO PRINTER && 打印当前表的内容
LIST|DISPLAY MEMORY TO PRINTER && 打印当前的变量和数组内容
LIST|DISPLAY STATUS TO PRINTER && 打印 VFP环境状态
DIR TO PRINTER && 打印当前目录中表的名字
TYPE <文件名,扩展名 > TO PRINTER && 打印 ASCII字符文件的内容字符串打印命令,<字符表达式 >
定向输出打印定向命令流式定向,SET PRINTER ON | OFF
格式定向,SET DEVICE TO SCREEN | TO PRINTER | TO FILE <文件名 >
打印输出命令,SET PRINTER TO [<文件名 > [ADDITIVE] | <打印端口 >]
图形打印 命令
@<行,列 > SAY <位图文件名 > BITMAP | <通用型字段名 > [ISOMETRIC |
STRETCH]
[SIZE <数值表达式 1>,<数值表达式 2>] [NOWAIT]
9.1 打印基础
9.2 传统的报表打印设计图 9.6 传统的报表打印流程 图 9.7 主要设备的价格
[例 9-2] 打印如图 9.7所示的主要设备价格表。
* E9-2.PRG
* SET DEVICE TO PRINTER && 若要打印去掉行首的 *号
zt= "FONT '宋体 ',12" && 为宏代换设置内存变量
@0,9 SAY '主要设备价格表 ' FONT '黑体 ',16 && 设置表头
@2,0 SAY '┌───┬────┬─────┐' &zt && 设置顶线
@3,0 SAY '│ 编 号 │ 名 称 │ 价 格 │ ' &zt && 设置标题栏
USE sb
i=4
SCAN FOR 主要设备
@i,0 SAY '├───┼────┼─────┤' &zt && 设置行间隔线
@i+1,0 SAY '│'+SPACE(1)+ 编号 +'│'+ 名称 +'│'+STR( 价格,10,2)+'│' &zt
&& 设置一行内容
i=i+2
ENDSCAN
@i,0 SAY '└───┴────┴─────┘' &zt && 设置底线
@i+1,20 SAY '制表部门,设备科 ' FONT '宋体 ',10 && 设置表尾
SET DEVICE TO SCREEN && 结束处理
* SET PRINTER TO LPT1 && 若要打印去掉行首的 *号
9.3 报表设计器的基本操作打开报表设计器窗口
MODIFY REPORT <报表文件名 >
快速制表报表菜单中的快速报表命令
[例 9-3] 利用快速制表功能为 SB.DBF设计一张包括编号、
名称和价格 3栏的报表。
(1) 打开报表设计器窗口:往命令窗口键入命令 MODIFY REPORT SBJGB,使屏幕上出现报表设计器窗口 (参阅图 9.12)。
(2) 设置数据源:在报表设计器窗口击右键,在快捷菜单中选定数据环境命令,在数据环境设计器窗口中添加 SB表。
(3) 启动快速制表:选定报表设计器窗口,然后在报表菜单中选定快速报表命令,使出现如图 9.11所示的快速报表对话框。
(4) 设置快速报表属性:选定快速报表对话框的字段按钮,在字段选择器对话框 (图略 )中依次选出编号、名称和价格等 3个字段,选定确定按钮返回快速报表对话框。选定确定按钮返回报表设计器窗口。
(5) 保存报表定义:选定文件菜单的保存选项,将产生报表文件 SBJGB.FRX及其备注文件 SBJGB.FRT。
图 9.11 快速报表对话框图 9.12 设备价格表报表设计器页面预览图 9.13 预览窗口与打印预览工具栏命令方式打印报表
REPORT FORM <报表文件名 >
[ENVIRONMENT] [<范围 >] [FOR <逻辑表达式 >]
[HEADING <字符表达式 >] [NOCONSOLE]
[PLAIN]
[RANGE 开始页 [,结束页 ]]
[PREVIEW [[IN] WINDOW <窗口名 > | IN
SCREEN] [NOWAIT]]
[TO PRINTER [PROMPT] | TO FILE <文件名 >
[ASCII]]
[SUMMARY]
9.4 报表设计器的高级操作页面设置 图 9.15 页面设置对话框设计报表带区表 9.1 报表带区的建立及作用带区名称 带区产生与删除 控件打印周期 控件打印位置标题 报表菜单的标题 /总结命令 整套报表一次 最先,可占一页页标头 默认存在 每页一次 标题后,页初列标头 用文件菜单的页面设置命令设置列数 每列一次 页标头后组标头 报表菜单的数据分组命令 每组一次 页标头、组标头或组注脚后细节 默认存在 每记录一次 页标头或组标头后组注脚 报表菜单的数据分组命令 每组一次 细节后列注脚 用文件菜单的页面设置命令设置列数 每列一次 页注脚前页注脚 默认存在 每页一次 页末总结 报表菜单的标题 /总结命令 整套报表一次 组注脚后,可占一页基本带区
[例 9-4] 在例 9-3所制报表的基础上,设计如图 9.17所示具有表格线的设备价格表。
图 9.17 设备价格表图 9.18 报表表格线设计标题与总结带区数据分组与组标头 /组注脚带区报表菜单的数据分组命令图 9.19 标题 /总结对话框图 9.20 数据分组对话框由报表向导产生一个经过数据分组的报表工具菜单中向导选项的报表命令
[例 9-5] 打印如图 9.21所示带费用总计的设备大修分类表。
图 9.21 数据分组对话框 图 9.22 向导选取对话框图 9.23 报表向导 (分组记录 )对话框图 9.24 总结选项对话框 图 9.25 报表向导产生的报表布局创建报表控件
[例 9-6] 打印如图 9.30所示设备大修费用表,要求相同的设备编号仅输出第一个。
(1) 定义快速报表,键入命令 MODIFY REPORT DXFY来打开报表设计器窗口 —— 在数据环境中添加 DX表?单击报表设计器窗口,然后选定报表菜单的快速报表命令 —— 选定快速报表对话框的确定按钮,使报表设计器窗口中出现编号、年月、费用等标签及字段控件。
(2) 增加总结带区,选定报表菜单的标题 /总结命令?在标题 /总结对话框中选定总结带区复选框。
(3) 调整带区高度及控件位置:将各带区调整至如图 9.31所示的高度。
图 9.30 设备大修费用表图 9.31 设备大修费用表设计
(4) 在总结带区建立费用控件,选定报表控件工具栏的域控件按钮 —— 单击总结带区中间,在报表表达式对话框 (参阅图 9.27)的表达式文本框内键入表达式费用 —— 选定计算按钮,在计算字段对话框中选定总和选项按钮 (见图 9.28)—— 选定确定按钮返回报表表达式对话框?选定确定按钮返回报表设计器窗口,费用控件就出现在总结带区之中。
(5) 修改编号字段区,双击编号字段,在报表表达式对话框中选定打印条件按钮 —— 在打印条件对话框中选定“否”按钮 (参阅图 9.29),使编号字段不打印重复的值 —— 选定确定按钮返回报表表达式对话框 —— 选定确定按钮返回报表设计器窗口。
(6) 如图 9.31所示画出表格线。
图 9.27 报表表达式对话框图 9.28 计算字段对话框 图 9.29 打印条件对话框报表变量
[例 9-7] 打印如图 9.32所示的主要设备的设备役龄表,要求包括记录序号和设备役龄,部门在打印时使用汉字部门名。
(1) 打开报表设计器窗口:键入命令 MODIFY REPORT SBYL。
(2) 设置数据环境:在数据环境中添加 SB表和 BMDM表,并使 SB.部门与 BMDM.代码关联
(从 SB.部门字段拖到 BMDM.代码索引 )。
(3) 定义快速报表:选定报表设计器窗口,然后选定报表菜单的快速报表命令?在快速报表对话框中选定字段按钮?在字段选择器对话框的 SB表中挑选编号、名称、部门 3个字段?
选定确定按钮返回快速报表对话框?选定确定按钮,使报表设计器窗口中出现编号、名称、
部门等标签及字段控件。
图 9.32 设备役龄表 图 9.33 设备役龄表报表设计器窗口
(4) 设置在 SB表部门字段控件的位置上输出汉字部门名:双击部门字段控件?将报表表达式对话框的表达式文本框中的 SB.部门改为 BMDM.名称?选定确定按钮返回报表设计器窗口,在该控件的位置上即能输出汉字部门名。
(5) 创建报表变量 XH(用作序号 ),选定报表菜单的变量命令?在如图 9.34所示报表变量对话框的变量列表中键入变量名 XH?在“要存储值”文本框中键入表达式 XH+1?选定确定按钮关闭报表变量对话框。
(6) 创建 XH变量控件,选定报表控件工具栏的域控件按钮?单击细节带区左部?在报表表达式对话框中选定表达式文本框右侧的对话按钮?在如图 9.35所示表达式生成器对话框的变量列表中双击报表变量 XH?选定确定按钮返回报表表达式对话框?选定确定按钮返回报表设计器窗口,XH变量控件便已产生。
图 9.34 报表变量对话框 图 9.35 含有报表变量的表达式生成器
(7) 建立计算役龄的表达式控件,选定报表控件工具栏的域控件按钮?单击细节带区右部?在报表表达式对话框的表达式文本框内键入 (DATE()-SB.启用日期 )/365?在格式文本框内键入输入掩码 99?选定确定按钮返回报表设计器窗口。
(8) 处理日期和页号:将页注脚带区的 Date()控件,_PAGENO控件、“页”标签控件移到页标头带区,然后创建一个“第”标签控件。
(9) 画表格线和创建表名、序号、役龄等标签控件 (步骤从略 )。
(10) 打印:在命令窗口发命令 REPORT FORM sbyl.frx FOR 主要设备,打印结果如图
9.32所示。
TO PRINTER 打印命令
LIST|DISPLAY STRUCTURE TO PRINTER && 打印当前表的结构
LIST|DISPLAY TO PRINTER && 打印当前表的内容
LIST|DISPLAY MEMORY TO PRINTER && 打印当前的变量和数组内容
LIST|DISPLAY STATUS TO PRINTER && 打印 VFP环境状态
DIR TO PRINTER && 打印当前目录中表的名字
TYPE <文件名,扩展名 > TO PRINTER && 打印 ASCII字符文件的内容字符串打印命令,<字符表达式 >
定向输出打印定向命令流式定向,SET PRINTER ON | OFF
格式定向,SET DEVICE TO SCREEN | TO PRINTER | TO FILE <文件名 >
打印输出命令,SET PRINTER TO [<文件名 > [ADDITIVE] | <打印端口 >]
图形打印 命令
@<行,列 > SAY <位图文件名 > BITMAP | <通用型字段名 > [ISOMETRIC |
STRETCH]
[SIZE <数值表达式 1>,<数值表达式 2>] [NOWAIT]
9.1 打印基础
9.2 传统的报表打印设计图 9.6 传统的报表打印流程 图 9.7 主要设备的价格
[例 9-2] 打印如图 9.7所示的主要设备价格表。
* E9-2.PRG
* SET DEVICE TO PRINTER && 若要打印去掉行首的 *号
zt= "FONT '宋体 ',12" && 为宏代换设置内存变量
@0,9 SAY '主要设备价格表 ' FONT '黑体 ',16 && 设置表头
@2,0 SAY '┌───┬────┬─────┐' &zt && 设置顶线
@3,0 SAY '│ 编 号 │ 名 称 │ 价 格 │ ' &zt && 设置标题栏
USE sb
i=4
SCAN FOR 主要设备
@i,0 SAY '├───┼────┼─────┤' &zt && 设置行间隔线
@i+1,0 SAY '│'+SPACE(1)+ 编号 +'│'+ 名称 +'│'+STR( 价格,10,2)+'│' &zt
&& 设置一行内容
i=i+2
ENDSCAN
@i,0 SAY '└───┴────┴─────┘' &zt && 设置底线
@i+1,20 SAY '制表部门,设备科 ' FONT '宋体 ',10 && 设置表尾
SET DEVICE TO SCREEN && 结束处理
* SET PRINTER TO LPT1 && 若要打印去掉行首的 *号
9.3 报表设计器的基本操作打开报表设计器窗口
MODIFY REPORT <报表文件名 >
快速制表报表菜单中的快速报表命令
[例 9-3] 利用快速制表功能为 SB.DBF设计一张包括编号、
名称和价格 3栏的报表。
(1) 打开报表设计器窗口:往命令窗口键入命令 MODIFY REPORT SBJGB,使屏幕上出现报表设计器窗口 (参阅图 9.12)。
(2) 设置数据源:在报表设计器窗口击右键,在快捷菜单中选定数据环境命令,在数据环境设计器窗口中添加 SB表。
(3) 启动快速制表:选定报表设计器窗口,然后在报表菜单中选定快速报表命令,使出现如图 9.11所示的快速报表对话框。
(4) 设置快速报表属性:选定快速报表对话框的字段按钮,在字段选择器对话框 (图略 )中依次选出编号、名称和价格等 3个字段,选定确定按钮返回快速报表对话框。选定确定按钮返回报表设计器窗口。
(5) 保存报表定义:选定文件菜单的保存选项,将产生报表文件 SBJGB.FRX及其备注文件 SBJGB.FRT。
图 9.11 快速报表对话框图 9.12 设备价格表报表设计器页面预览图 9.13 预览窗口与打印预览工具栏命令方式打印报表
REPORT FORM <报表文件名 >
[ENVIRONMENT] [<范围 >] [FOR <逻辑表达式 >]
[HEADING <字符表达式 >] [NOCONSOLE]
[PLAIN]
[RANGE 开始页 [,结束页 ]]
[PREVIEW [[IN] WINDOW <窗口名 > | IN
SCREEN] [NOWAIT]]
[TO PRINTER [PROMPT] | TO FILE <文件名 >
[ASCII]]
[SUMMARY]
9.4 报表设计器的高级操作页面设置 图 9.15 页面设置对话框设计报表带区表 9.1 报表带区的建立及作用带区名称 带区产生与删除 控件打印周期 控件打印位置标题 报表菜单的标题 /总结命令 整套报表一次 最先,可占一页页标头 默认存在 每页一次 标题后,页初列标头 用文件菜单的页面设置命令设置列数 每列一次 页标头后组标头 报表菜单的数据分组命令 每组一次 页标头、组标头或组注脚后细节 默认存在 每记录一次 页标头或组标头后组注脚 报表菜单的数据分组命令 每组一次 细节后列注脚 用文件菜单的页面设置命令设置列数 每列一次 页注脚前页注脚 默认存在 每页一次 页末总结 报表菜单的标题 /总结命令 整套报表一次 组注脚后,可占一页基本带区
[例 9-4] 在例 9-3所制报表的基础上,设计如图 9.17所示具有表格线的设备价格表。
图 9.17 设备价格表图 9.18 报表表格线设计标题与总结带区数据分组与组标头 /组注脚带区报表菜单的数据分组命令图 9.19 标题 /总结对话框图 9.20 数据分组对话框由报表向导产生一个经过数据分组的报表工具菜单中向导选项的报表命令
[例 9-5] 打印如图 9.21所示带费用总计的设备大修分类表。
图 9.21 数据分组对话框 图 9.22 向导选取对话框图 9.23 报表向导 (分组记录 )对话框图 9.24 总结选项对话框 图 9.25 报表向导产生的报表布局创建报表控件
[例 9-6] 打印如图 9.30所示设备大修费用表,要求相同的设备编号仅输出第一个。
(1) 定义快速报表,键入命令 MODIFY REPORT DXFY来打开报表设计器窗口 —— 在数据环境中添加 DX表?单击报表设计器窗口,然后选定报表菜单的快速报表命令 —— 选定快速报表对话框的确定按钮,使报表设计器窗口中出现编号、年月、费用等标签及字段控件。
(2) 增加总结带区,选定报表菜单的标题 /总结命令?在标题 /总结对话框中选定总结带区复选框。
(3) 调整带区高度及控件位置:将各带区调整至如图 9.31所示的高度。
图 9.30 设备大修费用表图 9.31 设备大修费用表设计
(4) 在总结带区建立费用控件,选定报表控件工具栏的域控件按钮 —— 单击总结带区中间,在报表表达式对话框 (参阅图 9.27)的表达式文本框内键入表达式费用 —— 选定计算按钮,在计算字段对话框中选定总和选项按钮 (见图 9.28)—— 选定确定按钮返回报表表达式对话框?选定确定按钮返回报表设计器窗口,费用控件就出现在总结带区之中。
(5) 修改编号字段区,双击编号字段,在报表表达式对话框中选定打印条件按钮 —— 在打印条件对话框中选定“否”按钮 (参阅图 9.29),使编号字段不打印重复的值 —— 选定确定按钮返回报表表达式对话框 —— 选定确定按钮返回报表设计器窗口。
(6) 如图 9.31所示画出表格线。
图 9.27 报表表达式对话框图 9.28 计算字段对话框 图 9.29 打印条件对话框报表变量
[例 9-7] 打印如图 9.32所示的主要设备的设备役龄表,要求包括记录序号和设备役龄,部门在打印时使用汉字部门名。
(1) 打开报表设计器窗口:键入命令 MODIFY REPORT SBYL。
(2) 设置数据环境:在数据环境中添加 SB表和 BMDM表,并使 SB.部门与 BMDM.代码关联
(从 SB.部门字段拖到 BMDM.代码索引 )。
(3) 定义快速报表:选定报表设计器窗口,然后选定报表菜单的快速报表命令?在快速报表对话框中选定字段按钮?在字段选择器对话框的 SB表中挑选编号、名称、部门 3个字段?
选定确定按钮返回快速报表对话框?选定确定按钮,使报表设计器窗口中出现编号、名称、
部门等标签及字段控件。
图 9.32 设备役龄表 图 9.33 设备役龄表报表设计器窗口
(4) 设置在 SB表部门字段控件的位置上输出汉字部门名:双击部门字段控件?将报表表达式对话框的表达式文本框中的 SB.部门改为 BMDM.名称?选定确定按钮返回报表设计器窗口,在该控件的位置上即能输出汉字部门名。
(5) 创建报表变量 XH(用作序号 ),选定报表菜单的变量命令?在如图 9.34所示报表变量对话框的变量列表中键入变量名 XH?在“要存储值”文本框中键入表达式 XH+1?选定确定按钮关闭报表变量对话框。
(6) 创建 XH变量控件,选定报表控件工具栏的域控件按钮?单击细节带区左部?在报表表达式对话框中选定表达式文本框右侧的对话按钮?在如图 9.35所示表达式生成器对话框的变量列表中双击报表变量 XH?选定确定按钮返回报表表达式对话框?选定确定按钮返回报表设计器窗口,XH变量控件便已产生。
图 9.34 报表变量对话框 图 9.35 含有报表变量的表达式生成器
(7) 建立计算役龄的表达式控件,选定报表控件工具栏的域控件按钮?单击细节带区右部?在报表表达式对话框的表达式文本框内键入 (DATE()-SB.启用日期 )/365?在格式文本框内键入输入掩码 99?选定确定按钮返回报表设计器窗口。
(8) 处理日期和页号:将页注脚带区的 Date()控件,_PAGENO控件、“页”标签控件移到页标头带区,然后创建一个“第”标签控件。
(9) 画表格线和创建表名、序号、役龄等标签控件 (步骤从略 )。
(10) 打印:在命令窗口发命令 REPORT FORM sbyl.frx FOR 主要设备,打印结果如图
9.32所示。