如何用Fastreport设计这样的报表,全分送上,谢谢! ( 积分: 300 )

  • 主题发起人 主题发起人 songyang
  • 开始时间 开始时间
S

songyang

Unregistered / Unconfirmed
GUEST, unregistred user!
单位 姓名 职务 调查次数 调查时间 课节 讲课教师
-----------------------------------------------------------------
| aa 11 2 15日 1 dd
| 16日 2 33
校区领导 | ----------------------------------------------------
|bb 22 2 15日 3 88
| 16日 1 55
|-------------------------------------------------------
|cc 33 1 15日 4 66
-------------------------------------------------------------
要列出单位中听课人的姓名和该人的全部听课记录,并汇总听课次数。请帮帮忙,谢谢!
 
单位 姓名 职务 调查次数 调查时间 课节 讲课教师
-----------------------------------------------------------------
| aa 11 2 15日 1 dd
| 16日 2 33
校区领导 | ----------------------------------------------------
|bb 22 2 15日 3 88
| 16日 1 55
|-------------------------------------------------------
|cc 33 1 15日 4 66
-------------------------------------------------------------
要列出单位中听课人的姓名和该人的全部听课记录,并汇总听课次数。请帮帮忙,谢谢!
 
sql:语句 select * from 表
报表: 分组头:字段:姓名
主项数据:字段: 职务,调查次数....教师
主项教:[LINE#]
分组脚
基本上可以实现你的功能了。
你自己做一下吧,具体的还有靠你自己哦,因为报表很难表达出来的。你对Fastreport
要了解才行。
 
建议用RM吧,否则"社区领导"这一列无法做到那个效果
 
对于姓名,职务,调查次数字段,相同的记录只显示一次,这个效果可以用代码来实现,但我没做过把"校区领导"放在中间,我只能将它放在第一行
 
首先
select t1.* , t2.次數
from table t1
join
(select 姓名, 次數 =count(姓名) from table group by 姓名) t2 on t1.姓名 = t2.姓名
這樣可以得到次數得合計值
然後fr中對需要重複行不顯示設一下就可以了, 只要用masterband就可以了
 
谢谢传呼机的提示,但生成报表后怎样让格式居中呢,就像单位字段中的“校区领导”要居中放置那样,谢谢!
 
這個在fr中很難實現了
 
本人已完全用FRASTREPOET解決此問題
請看
http://www.denguo.com/mx.asp?id=184
 
用分组是可以实现的!
 
在Fr3中可通过脚本控制达到重复单元格压缩垂直居中显示,但挺麻烦的,不如直接用RM,它本身就能很好的实现这种效果。
 
在 FR3 中实现相同值单元格压缩打印 脚本
(设置为两遍报表)
var
li:integer;
lastv:string;
List: TStringList;
procedure Page1OnBeforePrint(Sender: TfrxComponent);
begin
lastv:='';
li:=0;
end;

procedure frReport1OnStartReport(Sender: TfrxComponent);
begin
List := TStringList.Create;
end;

procedure frReport1OnStopReport(Sender: TfrxComponent);
begin
List.Free;
end;

procedure Memo2OnAfterData(Sender: TfrxComponent);
begin
list.add('0');
if Memo2.text =lastv then
begin
if Engine.FreeSpace>Memo2.height then
begin
Memo2.text:='';
Memo2.frame.width:=0;
list[li]:=inttostr(strtoint(list[li])+1);
end else
begin
li:=<line>;
lastv:=Memo2.text;
Memo2.frame.width:=1;
if Engine.FinalPass then
Memo2.height:=(strtoint(list[li])+1)*Memo2.height;
end;
end else
begin
li:=<line>;
lastv:=Memo2.text;
Memo2.frame.width:=1;
if Engine.FinalPass then
Memo2.height:=(strtoint(list[li])+1)*Memo2.height;
end;
end;

begin

end.
********************************************************************************
以上脚本实现了Memo2的重复值压缩后垂直居中显示,如果有多个Memo列需要的话,就麻烦
得很了。
人家孩子他爸的方法一来要在打印前统计重复值的行数不方便,二来可能并不考虑到跨页
显示的问题。
建议还是改用Rm,3.0是免费的。
********************************************************************************
 
孩子他爸的方法只能有一个分组字段,而这里有2个分组字段,“单位”和“姓名”,不知该如何实现,谢谢大家的帮忙!
 
不要困在一棵树上,用QR就很容易实现
 
能否说的详细点?不管用什么工具最好能有实例或代码,请大家帮帮忙。
 
多個分組可在子報表中嵌套啊,自己試驗一下
 
孩子他爸,你的例子是一个分组,是一个主从表,而我这里单位、姓名、职务都是分组,也就是不能显示重复值,这样就不好办了,你能具体说一说吗?谢谢了!
 
我已完全实现了你的要求,有需要请上QQ联系(251770004),我可把源码发给你
 
我已经加了你的qq,有空要向你多学习啦。
 
這個問題其實用RM3.0很容易實現了
只要設定MEMO的屬性中的REPEATED OPTIONS中的MERGEREPEATED和SUPPRESSREPEATED為TRUE就行了
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部