这样的一个数据集(我可以根据需要再调整,添加一些其他的信息列,保证报表的打印),要打印成这样的报表,应该怎么打客户名称 结算单号 产品 数量 金额
张三 0001 A 10 100
张三 0001 B 20 300
张三 0001 C 15 45
张三 0001 D 70 350
张三 0002 E 30 150
张三 0002 F 8 320
.
.
.打印出的格式要求是--------------------------------------- 结算单号: 0001 客户: 张三
A 10 100
B 20 300
C 15 45
D 70 350
小计 115 795
大写金额 柒佰玖拾伍元零角
操作员 : Admin 日期 : 2008.04.29
第一张 累计金额: 795---------------------------------------
结算单号: 0002 客户: 张三
E 30 150
F 8 320
.(后面如果没有记录了,要补足每张单子4行的高度)
.
小计 38 470
大写金额 肆佰柒拾零元零角
操作员 : Admin 日期 : 2008.04.29
第二张 累计金额: 1265 (说明:这个值是本张报表小计金额与上一张的累计金额的和)---------------------------------------我用FastReport作,分组和小计是好实现的,我用GroupHead和MasterData,GroupFoot三个Band实现了,现在还有三个问题
1.我在GroupHead上放了一个Memo,写上[FrxData."结算单号"],结果打出来,两张上的结算单号都是0001,第二张应该是0002
2.每张上的小计我用GroupFoot实现了,但是由于小计结果是动态产生的,转化成大写形式应该怎么作,自定义函数么
3.现在每张单子要求是4条记录,最后一张很可能出现不足4条的情况,比如只有1条,这时候小计结果会打印到第2条记录的位置,底下的信息都跑到上面去了,这个应该怎么处理希望给予指点的朋友能说的详细写,那些信息放到哪个Band上,象现在,操作员和日期是死的,但是这一栏上下的内容又都是动态生成的,比较麻烦
张三 0001 A 10 100
张三 0001 B 20 300
张三 0001 C 15 45
张三 0001 D 70 350
张三 0002 E 30 150
张三 0002 F 8 320
.
.
.打印出的格式要求是--------------------------------------- 结算单号: 0001 客户: 张三
A 10 100
B 20 300
C 15 45
D 70 350
小计 115 795
大写金额 柒佰玖拾伍元零角
操作员 : Admin 日期 : 2008.04.29
第一张 累计金额: 795---------------------------------------
结算单号: 0002 客户: 张三
E 30 150
F 8 320
.(后面如果没有记录了,要补足每张单子4行的高度)
.
小计 38 470
大写金额 肆佰柒拾零元零角
操作员 : Admin 日期 : 2008.04.29
第二张 累计金额: 1265 (说明:这个值是本张报表小计金额与上一张的累计金额的和)---------------------------------------我用FastReport作,分组和小计是好实现的,我用GroupHead和MasterData,GroupFoot三个Band实现了,现在还有三个问题
1.我在GroupHead上放了一个Memo,写上[FrxData."结算单号"],结果打出来,两张上的结算单号都是0001,第二张应该是0002
2.每张上的小计我用GroupFoot实现了,但是由于小计结果是动态产生的,转化成大写形式应该怎么作,自定义函数么
3.现在每张单子要求是4条记录,最后一张很可能出现不足4条的情况,比如只有1条,这时候小计结果会打印到第2条记录的位置,底下的信息都跑到上面去了,这个应该怎么处理希望给予指点的朋友能说的详细写,那些信息放到哪个Band上,象现在,操作员和日期是死的,但是这一栏上下的内容又都是动态生成的,比较麻烦
解决方案 »
- 求DbGrid中加checkbox控件(与数据表不关联)的好控件或好方法,搜索没找到合适的答案
- 怎么判断Variant的类型?
- 请问两台在网络的电脑有相同的SQL数据库,如何远程同步更新
- 如何用DELPHI判断两附图中的内容差别
- 反编译的问题
- 请问:画图控件—PaintBox不再工作,怎么回事?
- 离开公司了,老板叫我欠保密协议,我要不要欠?是否合法???公司的注册资金不足50W
- GGJJ们!救急!!!给分!!!!!!!!!!!!!!
- 如何判断一个应用程序正在运行
- 线程中的synchronize(procedure A) 这个synchronize加不加为何都一样?
- 嵌入式脚本引擎 Lysee 1.1.0.1891 发布,请伙计们下载试用!
- 获取打印机状态的问题
const
s1: string = '零壹贰叁肆伍陆柒捌玖';
s2: string = '分角元拾佰仟万拾佰仟亿拾佰仟万'; function StrTran(const S, s1, s2: string): string;
begin
Result := StringReplace(S, s1, s2, [rfReplaceAll]);
end;
var
S, dx: string;
i, Len: Integer;
begin
if mmje < 0 then
begin
dx := '负';
mmje := -mmje;
end;
S := Format('%.0f', [mmje * 100]);
Len := Length(S);
for i := 1 to Len do
dx := dx + Copy(s1, (Ord(S[i]) - Ord('0')) * 2 + 1, 2) + Copy(s2, (Len - i)
* 2 + 1, 2);
dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零仟', '零'), '零佰',
'零'),
'零拾', '零'), '零角', '零'), '零分', '整');
dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零零', '零'), '零零',
'零'),
'零亿', '亿'), '零万', '万'), '零元', '元');
if dx = '整' then
Result := '零元整'
else
Result := StrTran(StrTran(dx, '亿万', '亿零'), '零整', '整');
end;
//////////
procedure TJzpzEdit1.FormCreate(Sender: TObject);
begin
frxReport1.AddFunction('function MoneyCn(mmje: Double): String;','Myfunction','小写金额转大写的函数');
end;
//////////
function TJzpzEdit1.frxReport1UserFunction(const MethodName: string;
var Params: Variant): Variant;
begin
if UpperCase(MethodName) = UpperCase('MoneyCn') then
Result := MoneyCn(Params[0]);
end;
//////////
报表中调用方法
MoneyCn(50000000)
其他几个问题没人能回答了么
SQL的查询语句可以达到效果
看看这个是否能够解决?
2.加空行,用脚本解决,根据FreeSpace的值,详见附件。
3.金额累加,用脚本解决,设置全局变量,我是在报表表中设置的,不知道可不可以有更好的地方设置。
提供多个MasterDataBand就可以了.