找回密码
 注册账号

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

初学者课程:T3自学|T6自学|U8自学软件下载课件下载工具下载资料:通资料|U8资料|NC|培训|年结积分规则 | 使用常见问题Q&A
知识库:U8 | | NC | U9 | OA | 政务U8|U9|NCC|NC65|NC65客开|NCC客开新手必读 | 任务 | 快速增金币用友QQ群[微信群]
查看: 8558|回复: 4

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

[复制链接]
发表于 2010-11-8 10:39:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

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

使用道具 举报

发表于 2012-8-4 18:37:00 | 显示全部楼层
赚钱。。。。。。。。。。。。。。
回复 点赞 拍砖

使用道具 举报

发表于 2012-9-2 16:14:27 | 显示全部楼层
给客户说做不了就行,太麻烦了。
回复 点赞 拍砖

使用道具 举报

发表于 2017-3-8 11:48:40 | 显示全部楼层
xuexi,zhengjinbi
回复 点赞 拍砖

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|站长微信|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号|51072502110008 )

GMT+8, 2024-3-29 01:20 , Processed in 0.038696 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表