欢迎
游客
,
注册
|
登录
|
会员
|
界面
|
简洁版本
|
在线
|
帮助
商都网教育宝典宝库
商都网教育宝典宝库
计算机
等级考试
在VFP报表中实现每页打印指定记录数
本主题被查看499次, 共1个帖子, 1页, 当前为第
1
页 选择页数: 1 跳转到第
页
上一主题
下一主题
标题: 在VFP报表中实现每页打印指定记录数
huahua
-[尕硴]
超级版主
UID: 71
来自:
精华:
130
积分: 14003
帖子: 12909
注册: 2007-10-22 17:59:00
状态:
离线
威望: 444.00
金钱: 3355.00 元
发短消息
用户资料
树型
回复
引用
只看楼主
2007-11-01 16:05
在VFP报表中实现每页打印指定记录数
VFP在各企事业单位中有着广泛的应用,我用它开发了本单位使用的元器件检测信息管理系统,现在是本单位日常工作中不可缺少的管理工具。开发中自有许多心得,但最想跟大家谈的是在报表中实现每页打印指定记录数这个问题。
方法一
在VFP的报表生成器中,编制报表,用调整报表页头带和页脚带高度的方法来控制每页要打印的记录数据,这是一种比较简单、容易实现的方法。但是由于不同的计算机中默认的纸张大小不一样,或者相同的纸型中的页边距设置不一样而使得每页打印的记录数发生改变。这对于固定的用户和固定的打印机、纸张来讲,没有什么问题,但如果软件要运行于多台电脑上或推广到更广泛的用户中,就要考虑不同的打印机及纸张的问题了。此时可以用下面介绍的方法二和方法三来实现。
另外,有很多用户要求当表中的记录数不是整页数时在最后一页中以空的表格填满报表,也只有在下面的两种方法中才能实现。
方法二
以下过程中假设报表中使用的表名为 TEMP.DBF
在报表设计器中:
1、将报表中的打印字段前面的别名前缀全部删除。
2、将报表数据环境中原来的表从数据环境中移去。
3、在报表的数据环境的 Init 中放入以下代码:
*-- DetailNum 是细节带中要打印的记录数,可在这里按需要进入修改
local DetailNum
DetailNum = 17
*-- 以下 SQL语句消除删除记录对分组字段的影响及对数据进行适当的排序
SELECT * FROM TempsintosTABLE TMP1swheresNOT DELETED() &&&&sgroupsby 排序条件
SELECT int((recno()-1)/DetailNum) as GroupCount, * ;
FROM Tmp1 ;
sintosCURSOR Temp2
USE IN TMP1
*-- 为保持一个干净的环境,删除刚刚建立的临时过渡表
delete file TMP1.dbf
if file("TMP1.fpt")
delete file TMP1.fpt
endif
*-- 注:你可以在上面的代码中设置 DetailNum 的值为你所希望每页报表要打印的记录数。
*-- 你也可以在第一句 SQL Select 中按你的需要设置sgroupsby 子句来排序数据。
4、在报表中增加一个分组并设置分组表达式为 GroupCount(即上面第二个 SQL Select 语句中的第一个字段名), 并选择每组从新的一页上开始复选框。
5、运行你的报表。
6、最后要说明的是:在运行报表前应设置正确的路径以便 VFP 可以找到报表所使用的表。
方法三
在该方法中,定义了一个全局变量tobePrint,该变量的值就是每页要打印的记录数,如果没有定义该变量,则使用默认的每页打印 15 条记录。
1、temp.dbf添加到报表数据环境中。
2、将temp.dbf的数据环境中的 BufferModeOverride 属性设置为 5。
3、在数据环境属性Destroy 事件中写:
=tablerevert(.t.)
4、在数据环境属性Init 事件中写:
if vartype(tobePrint) = "U" &&&& 如果全局变量还没有定义,在这里定义它的默认值为15
Public tobePrint
tobePrint = 15
endif
*-- 以下代码是为了当要打印的记录数不满一页时,打印空行来填满整个报表页
do while reccount("temp") % tobePrint <> 0
append blank
enddo
5、 在报表中新建两个报表变量如:nCount、nGroup,变量nCount的计算选项组中选择计数,在变量 nGroup 的要存储的值中写:
iif(nCount<>0 and nCount % tobePrint=0,nGroup+1,nGroup)
6、 在报表中增加一个分组并设置分组表达式为nGroup,并选择每组从新的一页上开始复选框。
7、 用以下代码来运行报表:
use temp
*-- 为避免重复定义变量错误,在定义全局变量前首先释放它
release tobeprint
*-- 定义全局变量,该变量中保存了每页要打印的记录数
public tobeprint
*-- 设置每页打印10条记录
tobeprint = 10
*-- 打印我们的报表
report form temp preview
方法二与方法三的异同
二者都是采用了数据分组的方法来实现“每页打印指定记录数”,向表中添加空记录来实现“表中的记录数不是整页数时在最后一页中以空的表格填满报表”。
二者不同之处在于:方法二是利用临时表来解决问题,数据的分组信息写在临时表中,方法三是利用报表变量来解决分组问题,数据分组是用报表变量来实现的。
#1
大
中
小
本主题被查看499次, 共1个帖子, 1页, 当前为第
1
页 选择页数: 1 跳转到第
页
论坛跳转...
胎教早教
准备怀孕
怀孕期
出生与分娩
婴儿期(0-1岁)
幼儿期(1-3岁)
学龄前(3-6岁)
中小学
课件
试题
中招
中招动态
招生快讯
相关政策
考试辅导
语文
数学
英语
物理
化学
生物
政治
历史
地理
家长交流
历年中招资料
满分作文
高考
高考动态
高考状元
历年试题
家长必读
志愿填报
心理减压
复习技巧
考生经验
备考辅导
高考大纲
历年分数线
高考常识
高考指南
语文
数学
外语
物理
化学
生物
历史
地理
政治
文综
理综
高考满分作文
家长
教师
读书
作文
郑州新东中学
学校动态
学生天地
高等教育
移民留学
成人高考
自学考试
考研
论文
外语
雅思
托福
四六级
实用英语
职称外语
公共英语(PETS)
商务英语
英语口语
小语种
英思力美语
在线留言
学校动态
课程
学生作业
英思力相册
学英语资料
计算机
办公应用
软件开发
平面动画设计
IT资格认证
等级考试
网络工程
初学者之路视频教程
计算机基础
Windows
Word2003
Execl2003
Powerpoint
Flash
Deamweaver
Fireworks
黑客基础
北大青鸟
青鸟新闻
开班信息
青鸟师资
在线问答
学员相关
技术文章
职业资格
企业培训师
资料库
历年试题
案例探讨
相关政策
财务会计
公务员考试
营养师
营养动态
职业前景
健康权威
学习指导
营养知识
健康食谱
心理咨询师
心理俱乐部
学习指导
花季少年
爱情婚姻
心理障碍
人在职场
职业前景
经典案例
导游
司法考试
建筑工程资格
外贸资格
医药资格考试
教师资格考试
电子商务师
人力资源师
资料库
历年试题
案例探讨
相关政策
技能培养
汽车驾驶
美容美发
美容
美发
化妆
整体形象设计
相关课程
人才信息
茶艺
调酒
厨师烹饪
手机维修
音乐乐器
舞蹈健身
企业管理
人力资源
市场营销
管理激励
管理书籍
管理视频
信诺专栏
职场招聘
招聘信息
职场沙龙
现在的时间是 2008-08-29 12:24:28
版权所有
商都网教育宝典
Powered by
Discuz!NT
1.0.6666 Copyright © 2001-2008
Comsenz Inc
.
Processed in 0 seconds