空心雨毕业论文网提供毕业论文、职称论文、硕士论文、计算机论文等的代写服务,同时还提供各种期刊论文的发表。如果你有需要,请联系我们QQ:5599630;电话:13350726595;E-mail:singlehearted@vip.qq.com
RSS
 

浅谈VFP报表打印问题

来源:网络转载 作者:okxy168.com 时间:2008-01-10 浏览:3 字体:【

摘要:本文简介了在VFP报表打印时如何解决经常遇到的几个问题。

关键字:报表设计器

1.如何打印指定的页

通常情况下,VFP默认打印当前报表的全部内容,这给使用者带来不便,那么如何实现让系统打印指定范围的内容呢?其实很简单,只需在报表打印语句中加上关于打印范围限制的关键字短语RANGE即可。如:打印报表XXX.FRX的第2至第5页,可使用如下命令

REPORT FORM XXX.FRX RANGE 2,5 TO PRINTER

为增强该语句功能的灵活性,可引入表示欲打印范围的两个参数x和y,分别代表打印的起始和终止页码,将打印命令改写为

REPORT FORM XXX.FRX RANGE x,y TO PRINTER

2.如何计算总页数,以实现每页均打印“第x页 共y页”字样

VFP系统变量 _PAGENO 可提供当前的打印页号,但却没有能返回总页数的系统变量,若要实现在报表的每一页均打印“第x页 共y页”字样,打印前可根据细节区所打印的记录条数,进行计算,然后再打印,实现方法如下:

PUBLIC mPAGE

SELE XXX

&& XXX为欲打印报表的数据源

XX=35

&& XX为每页报表细节区所打印的记录条数

mPAGE=IIF(MOD(RECC(),XX)=0,RECC()/XX,INT(RECC()/XX) 1) &&mPAGE为报表总页数

在报表页脚注(或其他合适位置)添加如下信息即可:

"第 " allt(str(_pageno)) " 页 共 " allt(str(mPAGE)) " 页"

3.如何使计算机打印纸张类型适合于所设计报表

报表在设计时能够正常打印,可是安装到其他计算机或重装系统后,就会出现“XXX 带区太大不能放入页中”等提示,而且无法正常退出(尤其是对报表设计时采用自定义纸张的程序),这是为什么呢?现作如下解释:

我们用报表设计器设计的报表打印程序,保存退出后,磁盘上就会出现 .FRX和.FRT文件,我们的所有设计均保存在这两个文件中。在VFP中 .FRX相当于.DBF表,.FRT相当于.FPT备注型文件,我们用USE XXX.FRX可以象打开.DBF文件一样打开.FRX文件,在.FRX文件中有个Expr备注型字段名,在这个字段名中有如下与打印设置相关的内容(不同设置内容稍有差别):

DRIVER=winspool

DEVICE=Epson LQ-1600K

OUTPUT=LPT1:

ORIENTATION=0

PAPERSIZE=256

PAPERLENGTH=2800

PAPERWIDTH=2400

DEFAULTSOURCE=8

PRINTQUALITY=180

YRESOLUTION=180

TTOPTION=1

其中:

DEVICE=Epson LQ-1600K 表示系统默认打印机类型为Epson LQ-1600K

PAPERSIZE=256 该值256表示是自定义纸张(若=9 表示A4纸张、=13表示B5纸张)

PAPERLENGTH=2800

表示报表设计时纸张长度

PAPERWIDTH=2400

表示报表设计时纸张宽度

实际打印时之所以会上述提到的问题,是因为在用户环境中或Windows系统重新安装后,系统一般默认的是A4打印纸,与我们设计时保存在.frx文件里的纸张类型不符,因而造成打印出错。为此,笔者编写了如下一段检测纸张类型的代码,这段代码可以帮助我们很好地解决因纸张类型不符所带来的问题。

USE xxx.frx IN 0 ALIAS mFrx

&&在空闲工作区以mFrx别名打开xxx.frx文件

x=atcline('PAPERSIZE',mFrx.Expr)

&&取得参数PAPERSIZE在Expr字段中的行

mTYPE_1=subs(mline(mFrx.Expr,x),11) &&取得设计时保存的纸张类型

mTYPE_2=allt(str(Prtinfo(2)))

&&取得当前打印机默认的纸张类型

x=atcline('PAPERLENGTH',mFrx.Expr) &&取得纸张长度在Expr字段中的行

mLEN=subs(mline(mFrx.Expr,x),13)

&&取得纸张长度

x=atcline('PAPERWIDTH',mFrx.Expr)

&&取得纸张宽度在Expr字段中的行

mWIDTH=subs(mline(mFrx.Expr,x),12) &&取得纸张宽度

use in 'mFrx'

&&关闭xxx.frx文件转

if mTYPE_1=mTYPE_2

&&如果相符,则正常打印

report form xxx.frx to printer noconsole

else

Messagebox('请设置打印机纸张类型为自定义:长=' mLEN ',宽=' mWIDTH,0 48 0,'提示')

report form xxx.frx to printer prompt

end

注:本文中相应命令和程序段均在VFP6.0环境下运行通过。转贴(完,空心雨论文网)

3
最新评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
      本站是由一个众多学科的博士群体组建而成,主要创办者为成都各重点高校博士。本论文网内理工科写手均为博士,文科类写手大部分为博士,且领域涵盖广泛,写作势力强大,若有部分专业,没有相关的写手,我们给你寻找合适的写手! 依托强大的人力资源,我们本着诚心交流的宗旨,专门为您排解写作上的难题。从在科研及实践工作中稳扎稳打的经历,我们具备了研究问题,解决问题的能力。论文写作和论文发表,作为教育体系的一个重要环节,我们确实有能力给您解决好问题,正所谓,真金不怕火来炼,请相信我们的势力,没有把握的事,我们不会做!
      本站受多家期刊委托,其中包括国家级中文核心期刊目录正刊,CSSCI目录正刊,增刊,省级以上公开出版的优秀期刊正刊,本站负责论文推荐发表,加急1个月即可发表。本站负责论文发表,不发表承诺退款!!目前主要负责法律,管理,经济,理工,农学,行政,医学,艺术,英语等类论文发表论文代写。详细期刊目录见本站相关内容。
赞助商链接