高分求解FastReports问题

时间:2021-03-11 10:28:39
该教程看过多次,但总是实现不了,主要是打印空行部分。

http://dev.yesky.com/SoftChannel/72342371928440832/20040425/1791408.shtml

请各位高手试试,有没有用根据本教程实现的代码,或者用FastReports3.0以上版本实现的代码?

14 个解决方案

#1


没用过,我只用report machine

#2


report machine能实现吗?在试过在打印之前,在数据库表里进行判断,
当记录数 MOD 6(最多的行数)不为0时,就往数据表加多不足的空行,
这样基本可以实现,但是这样没有利用到报表设计器,在设计时比较烦麻。

#3


打印空行问题?我没有试过你给的链接里那种脚本的方法。
给你说说我的方法吧。
把你要打印空行的Band指向虚拟数据集,RecCount设为6,上面放上一堆空白的Memo,好,空行出来了吧?千万记得把这么Memo设为透明D。
然后,在这个Band上放一个子报表,没错,就是让子报表覆盖这些空白的Memo。
然后在子报表里面放你要显示的数据,OK,数据也出来了。

报表生成的时候,会首先就生成6行空白行,然后再根据你的数据库记录总数,生成数据行。

嘿嘿,给我分吧,这马甲刚上线,缺钱呢。

#4


楼上兄弟的妙招啊!只是没有试用过。

#5


拉几个空白的行. 然后判断数据集的记录数

band.visible := RecNO < 4;
band2.visible := RecNO < 3;
..

#6


用子Band,一个一个连,然后上面代码

#7


你双击一下Band,右下角不是有个记录数?默认是1,就是这个了,把它改成6。

===========================================================
编号: 2 发送者 lfcq 发送时间 2004-11-24 9:24:04 删除  回复  
内容 请问这个是指??
把你要打印空行的Band指向虚拟数据集,RecCount设为6,
怎么找不到reccount?有源码吗?分......一定给
先谢了! 
===========================================================

#8


我试过,可以留空行,但是这样仍然无法完成打印表格的功能.
    如:当数据表记录总数为4或者10时,表格的行数为6,这时就是
要打印4行数据为空白的表格.而您上面的方法好像实现不了.

#9


哦,终于明白你要做什么效果了,每页页尾不足6行的补空白行是吧?
说什么打印空行....我以为你要每行主项数据后面要放空行....-_-# 主啊,原谅我吧。

那就用脚本搞定就可以了
(1)在主项数据Band的脚本里面用个临时变量保存你主项数据的LINE#,比如:LineNo := [LINE#];
(2)然后放个子Band在主项数据Band后面,随便给个名称叫Child吧,上面放些空白Memo。
(3)放一个页脚Band,在页脚Band的脚本里面写下面这段脚本:
  LineNo := LineNo Mod 6;
  if LineNo > 0 then
    for I := 0 to (6-LineNo-1) do
      ShowBand(child);

说D很清楚了吧,嗯,来来来,give me 分,该死的CSDN居然关闭可用分转赠,诚彼娘之非悦。

#10


清楚,我试试:)
谢谢!
还有一个小问题,当打印了6行后,如何进行换页.
在新的页面打印后续的数据?

#11


d

#12


【换页】
在主数据项Band的脚本里面写
  if [LINE#] > 6 then
    newpage;

#13


换页的OK了,但是补空白行的不行.
放一个页脚Band,在页脚Band的脚本里面写下面这段脚本:
        ShowBand(child);
一放到页脚,会出现错误!
真是痛苦......

#14


使用fastreport3.0,我在主项数据BAND的AFTERPRINT下可以实现.
但问题是需要传入数据表记录数总数及第页打印的记录数.我在程序中总无法实现.
yeliming(重返光荣) ,请再帮我相想办法?
procedure MasterData1OnAfterPrint(Sender: TfrxComponent);
var lin,linecount,rcount:integer;
begin
  lin:=<line#>;
  linecount:=7;
  rcount:=30;
  if <line#> =rcount then//传入记录数
  begin
  while lin mod linecount <>0 do
  begin
  Engine.showband(child1);
  lin:=lin+1;
  end;
  end;
  if (<Line#> -1 <>0) and ((<Line#>) mod linecount =0) then
  begin
  Engine.newpage;
  end;
end;

#1


没用过,我只用report machine

#2


report machine能实现吗?在试过在打印之前,在数据库表里进行判断,
当记录数 MOD 6(最多的行数)不为0时,就往数据表加多不足的空行,
这样基本可以实现,但是这样没有利用到报表设计器,在设计时比较烦麻。

#3


打印空行问题?我没有试过你给的链接里那种脚本的方法。
给你说说我的方法吧。
把你要打印空行的Band指向虚拟数据集,RecCount设为6,上面放上一堆空白的Memo,好,空行出来了吧?千万记得把这么Memo设为透明D。
然后,在这个Band上放一个子报表,没错,就是让子报表覆盖这些空白的Memo。
然后在子报表里面放你要显示的数据,OK,数据也出来了。

报表生成的时候,会首先就生成6行空白行,然后再根据你的数据库记录总数,生成数据行。

嘿嘿,给我分吧,这马甲刚上线,缺钱呢。

#4


楼上兄弟的妙招啊!只是没有试用过。

#5


拉几个空白的行. 然后判断数据集的记录数

band.visible := RecNO < 4;
band2.visible := RecNO < 3;
..

#6


用子Band,一个一个连,然后上面代码

#7


你双击一下Band,右下角不是有个记录数?默认是1,就是这个了,把它改成6。

===========================================================
编号: 2 发送者 lfcq 发送时间 2004-11-24 9:24:04 删除  回复  
内容 请问这个是指??
把你要打印空行的Band指向虚拟数据集,RecCount设为6,
怎么找不到reccount?有源码吗?分......一定给
先谢了! 
===========================================================

#8


我试过,可以留空行,但是这样仍然无法完成打印表格的功能.
    如:当数据表记录总数为4或者10时,表格的行数为6,这时就是
要打印4行数据为空白的表格.而您上面的方法好像实现不了.

#9


哦,终于明白你要做什么效果了,每页页尾不足6行的补空白行是吧?
说什么打印空行....我以为你要每行主项数据后面要放空行....-_-# 主啊,原谅我吧。

那就用脚本搞定就可以了
(1)在主项数据Band的脚本里面用个临时变量保存你主项数据的LINE#,比如:LineNo := [LINE#];
(2)然后放个子Band在主项数据Band后面,随便给个名称叫Child吧,上面放些空白Memo。
(3)放一个页脚Band,在页脚Band的脚本里面写下面这段脚本:
  LineNo := LineNo Mod 6;
  if LineNo > 0 then
    for I := 0 to (6-LineNo-1) do
      ShowBand(child);

说D很清楚了吧,嗯,来来来,give me 分,该死的CSDN居然关闭可用分转赠,诚彼娘之非悦。

#10


清楚,我试试:)
谢谢!
还有一个小问题,当打印了6行后,如何进行换页.
在新的页面打印后续的数据?

#11


d

#12


【换页】
在主数据项Band的脚本里面写
  if [LINE#] > 6 then
    newpage;

#13


换页的OK了,但是补空白行的不行.
放一个页脚Band,在页脚Band的脚本里面写下面这段脚本:
        ShowBand(child);
一放到页脚,会出现错误!
真是痛苦......

#14


使用fastreport3.0,我在主项数据BAND的AFTERPRINT下可以实现.
但问题是需要传入数据表记录数总数及第页打印的记录数.我在程序中总无法实现.
yeliming(重返光荣) ,请再帮我相想办法?
procedure MasterData1OnAfterPrint(Sender: TfrxComponent);
var lin,linecount,rcount:integer;
begin
  lin:=<line#>;
  linecount:=7;
  rcount:=30;
  if <line#> =rcount then//传入记录数
  begin
  while lin mod linecount <>0 do
  begin
  Engine.showband(child1);
  lin:=lin+1;
  end;
  end;
  if (<Line#> -1 <>0) and ((<Line#>) mod linecount =0) then
  begin
  Engine.newpage;
  end;
end;