精品文档 2008-1-28
1. 报表路径:先把路径列出,大家稍微看一下。 D:\\合并报表
主要有三个内容 用于存放批处理文件 (SHL文件) D:\\合并报表 01母公司 02合并口径 03管理主体 00批命令 01母公司 02合并口径 03管理主体 用于存放最终合并后 的报表 用于存放最终需要合ZT023 ZT003 ZT013 并的报表 合并报表编程过程说明:
1. 由于第一次编合并报表,所以很多东西不知道,那么就查资料,主要参考三个资料,一个是UFO的二次
开发帮助文件,第二个是孙勇写的《UFO报表高级应用培训讲义》,第三个是用友报表的PDF帮助 2. 客户的要求:
客户要求将12张资产负债表(当然还有很多其他的表)做合并,这12张分别是不同的下属单位,由于在开始实施的时候,就考虑到合并报表的事情,所以但是在建立帐套的时候,要求所有单位的会计科目(包括辅助核算),报表格式都必须一致,所以这12张表的格式都是一模一样的。
开始动手了
1. 现在第一步是建立一张合并报表模板,可以直接用现有的资产负债表模板,然后把公式清空,报表文件
为“D:\\合并报表\\zt003\\2008\\资产负债表.rep”
2. 报表归类:我们假设合并两张报表就可以了,zt003和zt013,路径如下:
D:\\合并报表
D:\\合并报表\\zt003\\2008\\资产负债表.rep 精品文档
精品文档
D:\\合并报表\\zt013\\2008\\资产负债表.rep
简单的合并方式:将zt013的资产负债表的对应的单元格与ZT003对应的单元格相加。
批处理放在以下文件夹: D:\\合并报表\\批处理\\2008
我们先简单建立一个批处理,用以实现两个单元格的简单合并,文件命名为“zt003zcfzb.shl” 批命令如下:
LET C7=C7+\合并报表\\zt003\\2008\\资产负债表.rep\RELA 年 WITH \合并报表\\zt003\\2008\\资产负债表.rep\年,月 WITH \合并报表\\zt003\\2008\\资产负债表.rep\月
起码知道以上的命令可以实现将C7单元格的数据加上“D:\\合并报表\\zt003\\2008\\资产负债表.rep”C7的数据。
但是如果这样做的话,每一个单元格就要一条语句,而且如果有多张表的话,就更加复杂,而且如果到时候要修改的话,比如到了2009年的话,每一条都要改一下,甚至如果单元格发生变化,要改的话,那不是要疯掉!!
所以在想能不能通过变量来实现,便于后续修改。 经过翻查资料,大概知道了变量的应用,然后就来实现吧。 第一步,把报表路径变量化,可以直接设定一个变量&rep,然后赋值,语句如下: let &rep=\合并报表\\zt003\\2008\\资产负债表.rep\ 那么单元格的赋值就可以这样来写: LET C7=C7+&rep->C7 RELA年 WITH &rep->年,月 WITH &rep->月 这样写可以减少修改报表路径的问题,至少改个路径变量值,其他就不用改了,相对来说比较方便一些,但是,问题是单元格也是比较麻烦,一条一来,有没有什么其他办法呢? 睡觉的时候突然想到能否用循环来处理,如果可以就好办多了,于是就开始实施,用while循环,但是问题是如何来表示列号和行号呢? 经过翻查资料,有一个意外的发现:
1)变量使用 关键字年、季、月、日为数值型,单位名称、单位编号为字符型。
表示报表名:&REP_NAME->单元格名 表示表页号:@&TAB 表示行号:#&ROW 表示列号:!&COL
有了这个意外的发现之后,我就想,干脆把路径、列号、行号都用变量表示算了,看看情况如何,代码如下:
//设置报表路径、合并起始列、起始行 let &rep1=\合并报表\let &rep2=\let &rep3=\
let &rep4=\资产负债表.rep\let &col0=3 let &row0=7
//设置报表路径 精品文档
精品文档
let &rep=&rep1+&rep2+&rep3+&rep4 //设置列号
let &col=&col0 //设置行号
let &row=&row0
//通过循环合并数据,合并C7:D55的单元格 while &col<=4 while &row<=55
let !&col#&row=!&col#&row+&rep->!&col#&row rela 年 with &rep->年,月 with &rep->月 let &row=&row+1 end
let &row=&row0 let &col=&col+1 end
做了以上变动之后,至少修改起来事比较简单,可以把这段代码保存为“zt003zcfzb.shl” 通过以上的批处理命令,我们在执行此批命令的时候,就可以实现把一个表的C7:D55的单元格与ZT003的对应的单元格相加。
现在的情况有所变化,我们有两种需要合并的报表,比如 D:\\合并报表\\zt003\\2008\\资产负债表.rep D:\\合并报表\\zt013\\2008\\资产负债表.rep 最终合并到以下表:
D:\\合并报表\\01母公司\\2008\\资产负债表.rep
Zt003 资产负债表 合并 Zt003 资产负债表 01母公司 资产负债表
如何实现呢?
如何来利用之前做的批命令呢?难道需要把批命令重复写一遍吗? 突然想到,能否通过调用批命令文件,相当于编程里面的“include”,那问题就可以解决了,也就是说,将一个合并的批命令写成一个批命令文件,然后来调用,只要有需要合并的时候,就调用此批命令,问题就可以解决了,减少重复工作,同时容易修改。
在批处理里面是有一个调用批命令的命令,就是用”DO”命令。
我们把之前做的“zt003zcfzb.shl”重新另存为“zcfzb_hbbb.shl”,路径如下: DO \合并报表\\批命令\\2008\\ zcfzb_hbbb.shl \
然后我们建立一个“zcfzb_main.shl”的批处理文件来调用。代码如下: //首先进入数据状态 精品文档