windy8848 发表于 2010-11-8 10:39:00

CDM万能打印中打印组内合计的解决方法

1. 用途
用于统计分组内的数量合计、金额合计、组内页码、组内页数等信息。
2. 解决思路
记录分组条件(货位),存储到titleArray中,扫描报表时,将上一页的货位titleArra,与当前页的货位titleArra进行比较。如果相同,则认为是同一分组内的数据,将当前数量累加存储到数组ll中,将当前金额累加存储到数组oo中;如果不同,则认为是不同分组的记录,数组下标k增加1,将当前数量直接存储到数组ll中,将当前金额直接存储到数组oo中。
3. 前提
单据上必须设置打印前排序字段。比如将打印前排序字段设置为货位;
分组头必须选中强制换页和每页显示;
必须勾选“两遍报表”。
4. 实现方法
假定单据明细中有三个不同的货位,每页能打印5行明细,总共将打印5页,其中有3条明细记录是HWI00000001的,4条HWI00000002的明细记录,13条HWI00000003的明细记录,几个数组中存储的数据如下:
a) titleArray
用于存储每页的货位信息(分组条件)
titleArray HWI00000001
titleArray HWI00000002
titleArray HWI00000003
titleArray HWI00000003
titleArray HWI00000003
即第1页的货位为HWI00000001,第2页货位为HWI00000002,第3、4、5页货位均为HWI00000003。
b) curPage
用于存储组内存储页码
curPage 1
curPage 1
curPage 1
curPage 2
curPage 3
即第1页的组内页码为1,第2页的组内页码为1,第3页的组内页码为1,第4页的组内页码为2,第5页的组内页码为3;
c) groupTotalPages
用于存储组内总页数
groupTotalPages 1
groupTotalPages 1
groupTotalPages 3
groupTotalPages 3
groupTotalPages 3
即第1页的组内总页数为1,第2页的组内总页数为1,第3页的组内总页数为3,第4页的组内总页数为3,第5页的组内总页数为3;
d) oo
用于存储组内的金额合计;
e) ll
用于存储组内的数量合计;
5. 打印方案设计
a) 页
页头上的脚本主要用于初始化变量、数组。
begin
if not then
begin
i:=0;
j:=0;
o := 0;
l := 0;
end
else
begin
s := 1;
q := 1;
for k := 1 to [ + 1] do
begin
groupTotalPages := 0;
if titleArray = titleArray then
s := s + 1
else
begin
for p := q to k - 1 do
begin
oo := oo;
ll := ll;
groupTotalPages := s;
end;
s := 1;
q := k;
end;
end;
end;
end
第一次扫描报表时,仅初始化变量;
第二次扫描报表时,会执行一个两重循环,用于处理组内总页数、金额合计和数量合计。第一重循环处理每页的数据,第二重循环用于处理相同分组的数据。其中s用于记录组内总页数,一组处理完成后,s置为1,k置为上一页的页码。
b) 分组头
begin
if not then
begin
i := i + 1;
titleArray := [单据明细."货位名称"];
titleArray := '';
curPage := 1;
end;
end
c) 分组头上的货位memo
begin
if not then
if titleArray <> titleArray then
begin
o := 0;
l := 0;
end;
end
d) 单据明细上的金额memo
if not then
begin
o := o + [单据明细."含税金额"];
l := l + [单据明细."数量"];
end;
e) 栏目脚
begin
while freespace>=65 do
showband(aa);
oo := o;
ll := l;
end
f) 页脚
begin
if then
begin
j := j + 1;
if titleArray = titleArray then
curPage := curPage + 1
else
curPage := 1
end;
end
如果上页货位titalArray与本页货位titalArray相同,则组内页码加1,否则当前页的组内页码为1。
g) 页脚上的组内合计memo
金额:]元;页码:]/];数量:]
6. 扩展
如果需要增加组内小计,方法同组内页码;
如果其它内容的组内合计,方法同数量合计;

jihuili1982 发表于 2012-2-3 09:30:21

这个地方怎么连个脚印也没有呢

bingyuw 发表于 2012-8-4 18:37:00

赚钱。。。。。。。。。。。。。。

lenovo2012 发表于 2012-9-2 16:14:27

给客户说做不了就行,太麻烦了。

yaozhuce 发表于 2017-3-8 11:48:40

xuexi,zhengjinbi
页: [1]
查看完整版本: CDM万能打印中打印组内合计的解决方法