用DELPHI编写特殊报表


======================================================
注:本文源代码点此下载
======================================================

用delphi编写特殊报表

广西省 韦明

---- 我用delphi为某单位编写信息管理系统时,财务要求工资统计等报表每一页的最后一行都应有合计。用delphi提供的tquidkrep部件的hassummary边条制作时是每一个报表的最后一页才有合计,不符合财务要求。虽然不用tquidkrep部件重头开始编程编写报表打印可以做到每页有合计,但工作量极大。能不能用qreport面板下提供的部件完成呢?本人仔细分析了qreport面板下的各功能强大的部件,完全可以做到。具体如下:

---- 1、 数据表manpay.db的结构为:

manname员工名

justclass台班

justtotal工资

waitclass台班

waittotal工资

repair修理工资

jobpay计件工资

total合计

---- 2、 新建一表单form1,在其上放一个ttable部件,其tablename设为manpay.db;

---- 3、 在表单form1上放tquidkrep部件quidkrep1,设置quidkrep1的bands属性值为:haspagefooter,hasdetail,hascolumnheader;此时在quidkrep1上有三个边条分别为:pageheaderband1,detailband1,columeheaderband1。象上表一样设置好报表结构,如:在pageheaderband1边条上放一个tqrlabel部件,设其caption属性为‘员工工资表’; 以此类推,在columeheaderband1放相应数量tqrlabel部件,并按报表列的标题的要求进行列标题的而设置相应的tqrlabel部件的caption属性。在detailband1边条上放八个tqrlabel部件,其name属性分别为rlb1, rlb2, rlb3, rlb4, rlb5, rlb6, rlb7, rlb8。设置quidkrep1的dataset为空;

---- 4、 在表单form1上放tqrsubdetail部件qrsubdetail,在qrsubdetail上放九个tqrlabel部件,其中一个tqrlabel部件的caption属性设为'合计',其中五个的name属性分别为:rsl1,rsl2, rsl3, rsl4, rsl5。另外三个的caption属性分别为:‘制表:’‘审核:’‘审批:’;

---- 5、 报表的线条用tqrshape部件,在此略。设置好的报表应如上表一样。

---- 6、 编程:

---- 一、双击quickrep1的onneeddata事件,输入如下代码:

procedure tform1.quickrep1needdata(sender: tobject;

var moredata: boolean);

begin

moredata:=true;//允许打印记录边条

with tabel1 do

begin

if not eof then

begin

rlb1.caption:=fieldbyname('fixingname').asstring;

rlb2.caption:=fieldbyname('justclass').asstring;

rlb3.caption:=fieldbyname('justtotal').asstring;

rlb4.caption:=fieldbyname('waitclass').asstring;

rlb5.caption:=fieldbyname('waittotal').asstring;

rlb6.caption:=fieldbyname('repair').asstring;

rlb7.caption:=fieldbyname('jobpay').asstring;

rlb8.caption:=fieldbyname('total').asstring;

fjusttotal:= fjusttotal +fieldbyname('justtotal').asfloat;

fwaittotal:= fwaittotal +fieldbyname('waittotal').asfloat;

frepair:= frepair +fieldbyname('repair').asfloat;

fjobpay:= fjobpay +fieldbyname('jobpay').asfloat;

ftotal:=ftotal+fieldbyname('total').asfloat;

end

else

begin

//设定每页打印13行,最后一页不够13行时用空行代替。

打印行数可根据//实际情况要求设定。

if fnum

---- 二、双击qrsubdetail1的onafterprint事件,输入如下代码:

procedure tform1.qrsubdetail1afterprint(sender: tqrcustomband;

bandprinted: boolean);

begin

if fnum=14 then

begin

if not table1.eof then

begin

form1.quickrep1.newcolumn;//建立新页

fnum:=1;

end;

end;

end;

---- 三、双击qrsubdetail1的onbeforeprint事件,输入如下代码:

procedure tform1.qrsubdetail1beforeprint(sender: tqrcustomband;

var printband: boolean);

begin

if fnum=14 then

begin

rsl1.caption:=floattostr(fjusttotal);

rsl2.caption:=floattostr(fwaittotal);

rsl3.caption:=floattostr(frepair);

rsl4.caption:=floattostr(fjobpay);

rsl5.caption:=floattostr(ftotal);

printband:=true;//打印明细边条

fjusttotal:=0;

fwaittotal:=0;

frepair:=0;

fjobpay:=0;

ftotal:=0;

end else printband:=false; //不打印明细边条

end;

---- 四、双击form1的on create事件,输入如下代码:

procedure tform1.formcreate(sender: tobject);

begin

fnum:=1;

fjusttotal:=0;

fwaittotal:=0;

frepair:=0;

fjobpay:=0;

ftotal:=0;

end;

在form1中的private下增加如下声明:

fnum: integer;//每页可打印行数控制器

ftotal: real;

fjusttotal,fwaittotal: real;

frepair,fjobpay: real;

---- 至此,一个可打印特殊报表的设计完成,达到财务的要求。

绿色通道:好文要顶关注我收藏该文与我联系


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值