首页 > 学技术 > 技术网文 > IBM AS400应用论坛 > 正文

[精华] 关于打印报表的几点心得


来源 chinaunix.net 酷勤网整理

其实也没什么很技术的,只是以前做报表总是COPY的,所以经常是不改还好,一改就错。搞得很长一段时间,很怕画报表,直到这一两年,摸索到了一点点规律,共享一下:

1、关于记录格式
其实这个本来没什么可说的,不过我就经常搞错,还是说说吧。
同一个记录格式之下,应该是
  记录格式名
0001.00+           打印内容
0002.00+           打印内容
0003.00+
这样的一个格式。
每行要有这个+,才归属于同一个记录格式。如果是个点的话,也就是说明这一行并不属于该记录格式,如果想让它属于这个记录格式,就用CLC命令;
当我们用19编译的时候,如果是3来COPY记录行,系统经常会自动在COPY处新增一个记录格式,所以要注意。(说来简单,但是我最开始画报表的时候,就曾经被这个问题折磨)

2、关于变量的命名
不同的记录格式,可以使用相同的变量名。
有的时候,为了少写赋值语句,可以直接将变量命名得与PF中的字段相同。(不过我不太喜欢这种写法)
如果在RPG程序中,给某个变量赋值,但没有对相应的记录格式进行WRITE操作,编译会不通过,报4030字段未定义的错。

3、关于打印时会错行的问题
有的时候,打印会错行,比如记录格式定义
0001.00+      变量A(比如说10个字符长)
0002.00+                 变量B(比如说5个字符长)
变量A的起始处位于第一列
变量B在变量A的下一行,且起始处位于第五列
当变量A='AAAAAAAAAA', 变量B='BBBBB'时,会打印出
AAAAAAAAAA
        BBBBB
这很正常。

但当A='        A'或空时,本来我们是希望打印出:
            A(或者这里就是一空行)
        BBBBB
这样的效果,但是系统就会打印成为
     BBBBBA  或
     BBBBB    (没有打印出空行)
也就是说,当某一行的前面为空时,(好象空格也算空)如果下一行有数据,就会挤上来。解决办法是在将A字段的首位赋值为非空,如果想让客户看不见,可以考虑使用汉字指示器。想打印空行,也可以用这个办法。(报表的这个特点困扰我最久,去年才想明白)

4、关于报表的测试
其实这个东西最简单,不过我以前一向很少去留意。
以前测试报表,尤其是测试换页的时候,总是老老实实的用打印机去打,打出来了再检查换页对不对,慢不说,还费纸。
其实我们进到SPLF里,右上角就有当前的页数,行数,如第1页第1行,右上角就是1/1,第2页第3行,就是3/2,好象页数在后面。
在position to这里,+1 就是下一行,W+1就是向右移一列,慢慢+,就可以看到换页是否正确了。



 qingzhou 回复于:2006-06-22 17:01:42

恩,感谢分享~~~

哈哈。

最近天气比较热,大家都去潜水了,,,发些帖子可以让大家出来冒冒泡 ○○○○○○

:m01::mrgreen:


 qingzhou 回复于:2006-06-22 17:02:46

另外,不明白为什么不用RLU来处理表格呢。。。


 wnai 回复于:2006-06-22 17:19:45

简单,很是实用。相信有不少朋友都被报表打印折磨过:em16:


 fairyboy 回复于:2006-06-23 08:39:12

恩,很少认真的去做个报表了,一般都是COPY后,用19进去拉拉位置而已...


 fxf_china 回复于:2006-06-23 10:16:12

谢谢,不过没怎么写过报表:em15:


 zhaoming1214 回复于:2006-06-23 10:40:01

不错,不过偶也很少写报表


 居士 回复于:2006-06-23 10:59:33

好贴,加精华


 blogliou 回复于:2006-06-23 11:18:23

RLU屏幕编辑是有这些麻烦,但掌握熟了,还是不错的.
另外如要随心所欲控制报表打印页, 打印文件的信息结构INFDS结构几个参数是需要掌握的:

FTEST01P1  O    E             PRINTER INFDS(PR01DS)          
F                                     OFLIND(*IN99)          

D PR01DS          DS                      
D  PR01PG               152    153B 0     
D  PR01OF               188    189B 0     
D  PR01LN               367    368B 0     
D  CUR_PAGE             369    372B 0  


PR01OF是每页行数,一般是66,是创建打印文件时的编译参数,可用chgprtf
PR01LN是当前打印行数,
CUR_PAGE是当前页数


 胖有型 回复于:2006-06-23 11:50:49

呵呵,宝哥的东西技术性就强喽。


 blogliou 回复于:2006-06-23 12:21:44

引用:原帖由 胖有型 于 2006-6-23 11:50 发表
呵呵,宝哥的东西技术性就强喽。 



我晕,感情你认识我?


 blogliou 回复于:2006-06-24 14:19:07

查看了胖有型的精华帖, 很不错也! 不知道是哪位兄弟?


 l.rover 回复于:2006-06-24 23:10:20

多贴点这些心得会好一些。


 hornit 回复于:2006-06-28 10:20:45

谢了!!


 82893772 回复于:2007-05-15 21:08:51

谢谢楼主.. :)


 居士 回复于:2007-05-16 11:58:34

精华,加入常见问题集


 bobofish29 回复于:2007-05-16 13:56:50

呵呵..好久不做报表了,想当初我也是经常做报表的,也有过许多心得!帮顶一下楼主,谢谢有好东西拿来分享!




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=778492
转载请注明作者名及原文出处



收藏本页到: