fastreport的世纪巨难问题,,,,,,,,,,,,,,,,,,难道只有等FR的老总出马?(50分)

  • 主题发起人 主题发起人 delphiyesterday
  • 开始时间 开始时间
D

delphiyesterday

Unregistered / Unconfirmed
GUEST, unregistred user!
程序运行时自定义fastreport报表的一些问题:
我是第一次用fastreport,因为看到fastrepot可以自定义报表,
我的目的如下述:
例如销售发货单有很多种打印格式(要按收货单位的格式进行套打),我的做法是在打印时允许用户自已定义好格式,保存到数据存中,然后调用打印。
有下列问题急待解决:
1.在程序中有许多query(table),我在调用frReport1.DesignReport设计报表时如何只指定其中某几个query出现在设计表中;
2.query中的字段的中文名称如何加进去,在它的数据字典的字段别名中可以加,但我是想在设计前就加上(不能让用户去加)
最终我做成的打印管理器会编译成一个bpl,所有程序都可以调用,在调用之前,只要将相应的query(table)准备好即可。
望各位经验丰富之大侠把我从打印报表中解脱出来,不胜感激!
 
这两个问题可以看作是“无理要求”,驳回!
 
象这种要求恐怕只有你自己重新做一个自己的报表组件了。
 
如果想实现呢,
自己可以去看代码的啦,
呵呵~~~~~~~~~~~~~~~~~~~~~~
 
各位,给点真东西出来呵.....
 
还是用QREPORT吧,能实现的。
 
qreport能实现?
 
who can help me???
 
I Think no man if you really to used the fastreport
fastreport is good control but it isn't the omnipotence
 
up............................................................
 
实现并不难:用代码生成数据字典即可
 
whf,如何用代码生成数据字典呢?
 
Fastreport 动态连接库
[内容]
一、目录清单
bin目录用于fr24目录下的FastReport2.47包文件编译后的bpl文件存放目录
dcu目录用于存放编译后的dcu文件
demo目录为演示目录,当觉得此动态库有利用价值的话可以将其下的相关文
件复制到其它目录以备将来所用。
fr24目录为FastReport2.47经本人修改后的所有源代码及新增的几个报表控
件fr_AngLbl.pas及fr_MoneyMemo.pas,用户只需将fr24/source下的
fr7.dpk项目文件编译安装即可。
report目录为动态连接库源代码目录。
二、功能说明
本动态连接库主要目的是将报表与系统分开,为缩小应用系统的大小,同时也
为统一管理报表提供了可能,在应用系统中只需按提供的接口进行调用即可,
在使用之前请仔细阅读以下内容:
1、请将下列文件复制到指定目录
1>将demo目录下的uDll.pas文件复制到源代码目录且应用程序源项目可以
找到的地方。
2>将demo目录下的reports目录,report.ini, report.dll文件复制到应
用系统的运行目录.
3>uDll.pas文件对调用函数进行了详细的描述。
uReport.pas文件对修改的FastReport部分函数进行了详细的描述。
2、当您发布系统时,为了清除掉演示数据(如果您不想清除可以不做),请将
上面复制的reports目录下的所有文件删除,将report.ini文件内容清空。
3、uDll.pas文件调用说明
在此文件中声明了所有动态连接库中的可以调用的功能接口,只需按相应
的调用参数调用即可,具体调用信息请参考uDll.pas中的函数备注。
4、report.ini文件内容说明
在此文件中描述了动态连接库调用的一些相应信息,其中图示如下:
[System] <------------此项为系统段
Total=3 <------------此项为系统中所有的报表总数
[ERP_Order]<------------此项为功能模块段[mID=ERP dID=Order]
Count=3 <------------此项为功能模块段的报表计数,此处为3
Index=2 <------------此项为功能模块段用户最后选择的报表索引
1=R00001,2003/07/31 14:47:44,订单清单
2=R00002,2003/07/31 14:49:21,订单清单(日期)
3=R00003,2003/07/31 14:52:19,订单清单(页码)
<-------上面的三项为报表的信息,以逗号分隔,分别为
=> 1,2,..表示第一,二,..张报表。
=> R00001,R00002,..表示报表在reports目录下的文件名。
=> 2003/07/31 14:47:44 .. 表示报表修改的时间。
=> 订单清单.. 表示报表名称。
当有其它的功能模块调用时将会产生新的功能模块段,此处不再赘述。
三、版权声明
本程式没有加密,完全公开,如果您觉得不错或提供更宝贵的意见或您加强了
部分程式的功能请给我发邮件,我们大家交流一下。
my e_mail: dragon_lsw@163.com
四、愿我们大家共同进步, 谢谢您的支持。
2003.10.20
http://www.51delphi.com/delphi/soft?type=报表
也许你想要的就是这种方式呢???去看看吧
 
delphiyesterday1.
1. 你试试以下方法是否可行 ?
原理: 把你不想要显示的表名放在报表的 DisabledDatasets 列表中
ts1 := TStringList.Create();
try
//屏蔽数据源
RptFr1.Dictionary.GetDatasetList(ts1);
for i := 0 to ts1.Count - 1do
begin
if ts1.Strings <> 'djmxtable' then
RptFr1.Dictionary.DisabledDatasets.Add(ts1.strings);
if ts1.Strings <> 'XXXXX' then
// 此处写上你不需要显示表的名称
RptFr1.Dictionary.DisabledDatasets.Add(ts1.strings);
end;
finally
ts1.free;
end;

2. 第二个问题刚才也是我做过的, 我做的程序允许用户在运行时可以自己设计报表,但是你总不能全部字段都用英文显示吧, 因此我把他转成了中文. 我的做法如下:

1) 首先将你使用的表的字段名及中文名称保存在表中, 如果是固定的或者以后再不需要改动,也可直接写在程序中.
2) 在设计前 找到报表中相应的字段名称 换成中文,下面是我写的代码:
s1:= 'frmQuery1.Tquery';
qry1.Open;
// 里面放的是 英文字段和中文字段
with fr1.Dictionarydo
begin
while not qry1.Eofdo
begin
s2 := s1 + qry1.FieldByName('fdName').AsString;
// fdname 为英文字段名称
FieldAliases[s2] := qry1.FieldByName('ChnName').AsString;
// chname 为中文字段名称
qry1.Next;
end;
end;
 
app2001的看来也是好东东,不过我暂时看不明,我会慢慢研究......
但yhw1999的对我来讲真是我这几年一直所想得到的东东,,,,,,
朋友,你真的是太好了.....
我现在能做什么?
除了高兴之外还有的.....
也许是高兴得流眼泪吧. 我的QQ:23425998, MSN:yesterday97@hotmail.com
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2257794
 
我来试一试,先谢谢delphiyesterday1及yhw1999
 
s1:= 'frmQuery1.Tquery';
qry1.Open;
// 里面放的是 英文字段和中文字段
with fr1.Dictionarydo
begin
while not qry1.Eofdo
begin
s2 := s1 + qry1.FieldByName('fdName').AsString;
// fdname 为英文字段名称
FieldAliases[s2] := qry1.FieldByName('ChnName').AsString;
// chname 为中文字段名称
qry1.Next;
end;
end;

?????????????????????
请问yhw1999,s2里是什么东西 s2 frmQuery1.Tquery字段名 这是什么?我这样试没什么反映
 
fr的老縱出馬肯定不行的啦!老縱只認識錢!
 
他说的是总工程师吧
 

Similar threads

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