利用UFO报表批处理制作合并报表_ufo报表日常业务处理
利用UFO报表批处理制作合并报表由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“ufo报表日常业务处理”。
利用UFO报表批处理制作合并报表
2008-1-28 1.报表路径:先把路径列出,大家稍微看一下。D:合并报表
你的下载权限 0 低于此附件所需权限 1, 你无法查看此附件 主要有三个内容
你的下载权限 0 低于此附件所需权限 1, 你无法查看此附件
合并报表编程过程说明: 1.由于第一次编合并报表,所以很多东西不知道,那么就查资料,主要参考三个资料,一个是UFO的二次开发帮助文件,第二个是孙勇写的《UFO报表高级应用培训讲义》,第三个是用友报表的PDF帮助 2.客户的要求:
客户要求将12张资产负债表(当然还有很多其他的表)做合并,这12张分别是不同的下属单位,由于在开始实施的时候,就考虑到合并报表的事情,所以但是在建立帐套的时候,要求所有单位的会计科目(包括辅助核算),报表格式都必须一致,所以这12张表的格式都是一模一样的。
开始动手了 1.现在第一步是建立一张合并报表模板,可以直接用现有的资产负债表模板,然后把公式清空,报表文件为“D:合并报表zt0032008资产负债表.rep” 2.报表归类:我们假设合并两张报表就可以了,zt003和zt013,路径如下: D:合并报表
D:合并报表zt0032008资产负债表.rep D:合并报表zt0132008资产负债表.rep
简单的合并方式:将zt013的资产负债表的对应的单元格与ZT003对应的单元格相加。
批处理放在以下文件夹: D:合并报表批处理2008
我们先简单建立一个批处理,用以实现两个单元格的简单合并,文件命名为“zt003zcfzb.shl” 批命令如下:
LET C7=C7+“D:合并报表zt0032008资产负债表.rep”->C7 RELA 年 WITH “D:合并报表zt0032008资产负债表.rep”-> 年,月 WITH “D:合并报表zt0032008资产负债表.rep”-> 月
起码知道以上的命令可以实现将C7单元格的数据加上“D:合并报表zt0032008资产负债表.rep”C7的数据。
但是如果这样做的话,每一个单元格就要一条语句,而且如果有多张表的话,就更加复杂,而且如果到时候要修改的话,比如到了2009年的话,每一条都要改一下,甚至如果单元格发生变化,要改的话,那不是要疯掉!
所以在想能不能通过变量来实现,便于后续修改。
经过翻查资料,大概知道了变量的应用,然后就来实现吧。
第一步,把报表路径变量化,可以直接设定一个变量&rep,然后赋值,语句如下:
let &rep=“D:合并报表zt0032008资产负债表.rep”
那么单元格的赋值就可以这样来写:
LET C7=C7+&rep->C7 RELA年 WITH &rep->年,月 WITH &rep->月
这样写可以减少修改报表路径的问题,至少改个路径变量值,其他就不用改了,相对来说比较方便一些,但是,问题是单元格也是比较麻烦,一条一来,有没有什么其他办法呢?
睡觉的时候突然想到能否用循环来处理,如果可以就好办多了,于是就开始实施,用while循环,但是问题是如何来表示列号和行号呢?
经过翻查资料,有一个意外的发现:
你的下载权限 0 低于此附件所需权限 1, 你无法查看此附件
有了这个意外的发现之后,我就想,干脆把路径、列号、行号都用变量表示算了,看看情况如何,代码如下:
//设置报表路径、合并起始列、起始行 let &rep1=“D:合并报表” let &rep2=“zt003” let &rep3=“2008”
let &rep4=“资产负债表.rep” let &col0=3 let &row0=7
//设置报表路径
let &rep=&rep1+&rep2+&rep3+&rep4
//设置列号 let &col=&col0
//设置行号 let &row=&row0
//通过循环合并数据,合并C7while &col
while &row
let!&col#&row=!&col#&row+&rep->!&col#&row rela 年 with &rep->年,月 with &rep->月
let &row=&row+
1end
let &row=&row0
let &col=&col+1 end
做了以上变动之后,至少修改起来事比较简单,可以把这段代码保存为“zt003zcfzb.shl” 通过以上的批处理命令,我们在执行此批命令的时候,就可以实现把一个表的C7格与ZT003的对应的单元格相加。
现在的情况有所变化,我们有两种需要合并的报表,比如 D:合并报表zt0032008资产负债表.rep D:合并报表zt0132008资产负债表.rep 最终合并到以下表:
D:合并报表 1母公司2008资产负债表.rep
55的单元
55的单元格
你的下载权限 0 低于此附件所需权限 1, 你无法查看此附件 如何实现呢?
如何来利用之前做的批命令呢?难道需要把批命令重复写一遍吗?
突然想到,能否通过调用批命令文件,相当于编程里面的“include”,那问题就可以解决了,也就是说,将一个合并的批命令写成一个批命令文件,然后来调用,只要有需要合并的时候,就调用此批命令,问题就可以解决了,减少重复工作,同时容易修改。在批处理里面是有一个调用批命令的命令,就是用”DO”命令。
我们把之前做的“zt003zcfzb.shl”重新另存为“zcfzb_hbbb.shl”,路径如下: DO “D:合并报表批命令2008 zcfzb_hbbb.shl ”
然后我们建立一个“zcfzb_main.shl”的批处理文件来调用。代码如下: //首先进入数据状态 DATA //报表取数
DO “D:合并报表批命令2008zcfzb_hbbb.shl ”
把此文件放在:
D:合并报表 0批命令 1母公司2008 zcfzb_main.shl
为了能够在进入报表的时候,将最终合并的报表的数据先清空,同样我们做一个清空的批处理命令。
//清空数据,合并数据前先把数据清空。CLEAR C755 CLEAR G7:H55
把文件命名为“D:合并报表批命令2008zcfzb_clear.shl”以备调用
然后我们对“zcfzb_main.shl”的批命令再次修改,加入清除数据的批处理。//首先进入数据状态 DATA //清空数据
DO “D:合并报表批命令2008zcfzb_clear.shl” //报表取数
DO “D:合并报表批命令2008zcfzb_hbbb.shl ”
那么以后不管有多少张表,资产负债表,损益表等等,只要每一张表都保存相应的三个批处理(主命令、清空命令、合并命令)。只是每张表需要修改的地方就是将“zcfzb_hbbb.shl”里面的参数做一些修改。比如路径、文件名称、年份,列名等等。
但是能否有更好的办法呢?能否将合并数据作为一个通用的模板,用来调用呢?然后把变量的赋值放在主程序中进行,这样不是更好吗? 模型:
这个时候,我们开始做统一规划了:D:合并报表批命令2008 主程序(主批处理):zcfzb_main.shl 子程序(清空数据):zcfzb_clear.shl 子程序(合并报表):zcfzb_hbbb.shl
先把主程序列出:
主程序(主批处理):zcfzb_main.shl
//---------------------程序开始---------//合并报表 //合并报表说明: //zt003广海本部
//---------------------首先进入数据状态-//--把变量清空,然后要求输入关键字。DATA free all if 年=0
disp “请先输入关键字” return else //--设置批处理命令的路径。let &shl01=“D:合并报表 0批命令” let &shl02=“ 1母公司” let &shl03=“2008” let &shl04=&shl01+&shl02+&shl03 let &shlclr=“zcfzb_clear.shl” let &shlhb=“zcfzb_hbbb.shl”
let &shlclr= &shl04+&shlclr let &shlhb= &shl04+&shlhb
//---------------------清空数据---------------------DO &shlclr
//---------------------初始化取数报表-------------let &rep1=“D:合并报表” let &rep2=“zt003”
// 设置取数帐套 let &rep3=“2008” let &rep4=“资产负债表.rep” let &col01=3
//设置列起始值 C let &colmax01=4
//设置列循环最大值D
let &col02=7
//设置列起始值 G let &colmax02=8
//设置列循环最大值H
let &row01=7
//设置行起始值 7 let &rowmax=55
//设置行循环最大值55
//----------------------报表取数----zt003 let &rep2=“zt003”
// 设置取数帐套 let &row0=&row01
//设置行起始值
//---------------------01.分列取数1 let &col0=&col01
//设置列起始值 C let &colmax=&colmax01 //设置列循环最大值 D DO &shlhb
//---------------------02.分列取数2 let &col0=&col02
//设置列起始值 G let &colmax=&colmax02 //设置列循环最大值H DO &shlhb //---------------------END-----------
//--------------------保存报表-----------//save free all end
//第一层IF的结尾 清空命令:zcfzb_clear.shl //清空数据 CLEAR c755 CLEAR g7:h5
合并命令:zcfzb_hbbb.shl //------------------------合并报表--------------//设置报表路径、合并起始列、起始行 let &rep=&rep1+&rep2+&rep3+&rep4 let &col=&col0 let &row=&row0
//通过循环合并数据 while &col
while &row
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
以后如果需要合并报表,其实要改的就是zcfzb_main.shl文件里面的两个段落,一个是“路径设置”,一个是“报表取数”。
比如需要修改批命令的路径和批命令对应的文件名,则改以下蓝色部分。//--设置批处理命令的路径。let &shl01=“D:合并报表 0批命令” let &shl02=“ 2合并口径” let &shl03=“2008” let &shl04=&shl01+&shl02+&shl03 let &shlclr=“zcfzb_clear.shl” let &shlhb=“zcfzb_hbbb.shl”
let &shlclr= &shl04+&shlclr let &shlhb= &shl04+&shlhb
如果需要修改需要合并的报表,那么就改以下内容: //----------------------报表取数----zt003 let &rep2=“zt003”
// 设置取数帐套 let &row0=&row01
//设置行起始值
//---------------------01.分列取数1 let &col0=&col01
//设置列起始值 C let &colmax=&colmax01 //设置列循环最大值 D DO &shlhb
//---------------------02.分列取数2 let &col0=&col02
//设置列起始值 G let &colmax=&colmax02 //设置列循环最大值H DO &shlhb //---------------------END-----------
如果需要合并的列和行需要修改,则改:
//---------------------初始化取数报表-------------let &rep1=“D:合并报表” let &rep2=“zt003”
// 设置取数帐套 let &rep3=“2008” let &rep4=“资产负债表.rep” let &col01=3
//设置列起始值 C
let &colmax01=4
//设置列循环最大值D
let &col02=7
//设置列起始值 G
let &colmax02=8
//设置列循环最大值H
let &row01=7
//设置行起始值 7
let &rowmax=55
//设置行循环最大值55
如果需要添加合并的报表,比如添加zt013,那么就在zt003的合并代码下,添加以下代码,其实就是复制。
//----------------------报表取数----zt013 let &rep2=“zt013”
// 设置取数帐套 let &row0=&row01
//设置行起始值 //---------------------01.分列取数1 let &col0=&col01
//设置列起始值 C let &colmax=&colmax01 //设置列循环最大值 D DO &shlhb
//---------------------02.分列取数2 let &col0=&col02
//设置列起始值 G let &colmax=&colmax02 //设置列循环最大值H DO &shlhb //---------------------END-----------