数据结构如下:
A表(客户信息): 序号,姓名,地址
b表(消费信息): 序号,客户序号,消费物品,数量,金额需要生成如下报表,关键是格子如何绘制?
┏━━━━┳━━━━━┳━━━━┳━━━━━┳━━━┳━━━━┓
┃ 姓名 ┃地址 ┃消费合计┃ 消费物品 ┃数量 ┃ 金额 ┃
┣━━━━╋━━━━━╋━━━━╋━━━━━╋━━━╋━━━━┫
┃ ┃ ┃ ┃ 物品A ┃ 4 ┃ 80.00 ┃
┃张三 ┃地址1 ┃100.00 ┣━━━━━╋━━━╋━━━━┫
┃ ┃ ┃ ┃物品B ┃ 5 ┃ 20.00 ┃
┣━━━━╋━━━━━╋━━━━╋━━━━━╋━━━╋━━━━┫
┃ ┃ ┃ ┃物品A ┃ 5 ┃ 100.00 ┃
┃ ┃ ┃ ┣━━━━━╋━━━╋━━━━┫
┃李四 ┃地址2 ┃ 150.00 ┃物品B ┃ 5 ┃ 20.00 ┃
┃ ┃ ┃ ┣━━━━━╋━━━╋━━━━┫
┃ ┃ ┃ ┃物品C ┃10 ┃ 30.00 ┃
┣━━━━╋━━━━━╋━━━━╋━━━━━╋━━━╋━━━━┫
┃王五 ┃地址3 ┃75.00 ┃物品D ┃3 ┃ 75.00 ┃
┗━━━━┻━━━━━┻━━━━┻━━━━━┻━━━┻━━━━┛
现在只能做成这个样子:
┏━━━━┳━━━━━┳━━━━┳━━━━━┳━━━┳━━━┓
┃ 姓名 ┃地址 ┃消费合计┃ 消费物品 ┃数量 ┃ 金额 ┃
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
张三 地址1 100.00 物品A ┃ 4 ┃ 80.00
物品B ┃ 5 ┃ 20.00
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
李四 地址2 150.00 物品A ┃ 5 ┃ 100.00
物品B ┃ 5 ┃ 20.00
物品C ┃10 ┃ 30.00
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
王五 地址3 75.00 物品D ┃3 ┃ 75.00
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
A表(客户信息): 序号,姓名,地址
b表(消费信息): 序号,客户序号,消费物品,数量,金额需要生成如下报表,关键是格子如何绘制?
┏━━━━┳━━━━━┳━━━━┳━━━━━┳━━━┳━━━━┓
┃ 姓名 ┃地址 ┃消费合计┃ 消费物品 ┃数量 ┃ 金额 ┃
┣━━━━╋━━━━━╋━━━━╋━━━━━╋━━━╋━━━━┫
┃ ┃ ┃ ┃ 物品A ┃ 4 ┃ 80.00 ┃
┃张三 ┃地址1 ┃100.00 ┣━━━━━╋━━━╋━━━━┫
┃ ┃ ┃ ┃物品B ┃ 5 ┃ 20.00 ┃
┣━━━━╋━━━━━╋━━━━╋━━━━━╋━━━╋━━━━┫
┃ ┃ ┃ ┃物品A ┃ 5 ┃ 100.00 ┃
┃ ┃ ┃ ┣━━━━━╋━━━╋━━━━┫
┃李四 ┃地址2 ┃ 150.00 ┃物品B ┃ 5 ┃ 20.00 ┃
┃ ┃ ┃ ┣━━━━━╋━━━╋━━━━┫
┃ ┃ ┃ ┃物品C ┃10 ┃ 30.00 ┃
┣━━━━╋━━━━━╋━━━━╋━━━━━╋━━━╋━━━━┫
┃王五 ┃地址3 ┃75.00 ┃物品D ┃3 ┃ 75.00 ┃
┗━━━━┻━━━━━┻━━━━┻━━━━━┻━━━┻━━━━┛
现在只能做成这个样子:
┏━━━━┳━━━━━┳━━━━┳━━━━━┳━━━┳━━━┓
┃ 姓名 ┃地址 ┃消费合计┃ 消费物品 ┃数量 ┃ 金额 ┃
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
张三 地址1 100.00 物品A ┃ 4 ┃ 80.00
物品B ┃ 5 ┃ 20.00
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
李四 地址2 150.00 物品A ┃ 5 ┃ 100.00
物品B ┃ 5 ┃ 20.00
物品C ┃10 ┃ 30.00
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
王五 地址3 75.00 物品D ┃3 ┃ 75.00
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
明白偶的意思么?步骤如下:
1. "张三","地址"这些Memo由于“压缩重复值”,所以虽然有三条记录,但是只会显示一行,好,你有数据了。下一步你要做的就是补全表格线而已。
2. 在"张三","地址"等缺线的表格后面放上一些空的Memo,它的边框由你定,按你这张表,只需要画出左右两侧的线就行了,然后把这个Memo的填充色选成透明色,切记,这个空Memo不要“压缩重复值”。
3. 预览。效果出来了吧?一层Memo负责数据显示,另一层Memo负责表格线的绘制。^_^,我去年夏天也做报表,琢磨了好几天才想出这个办法,FastReport的确是个好东西。
还有个问题请教你,我这个报表时使用一个主数据和一个子报表实现的,不知道还有没有其他更好的方法阿?
要怎样让张三,地址1等垂直居中呢?
用脚本的办法是定义一个数组,每个单元记录一个汇总值,然后记得把报表设为2遍报表。
脚本中这样写:
if not finalpass then
SumCost := SumCost + ...; //汇总;
else
Memo1.Text := [SumCost]; //显示;
SumCost := 数量 * 金额; //当然,这里指的是变量
如果合计在子项前面……你还是不要用脚本了,挺复杂,:D
子项Band的脚本里面做累加
合计Band的脚本里面需要通过Finalpass来判断是否显示