在松江做了1个多星期的报表开发,对于以前不怎么做报表的我来说,还是有收获的.总结如下:
1. OUTPUT QUEUE的选择
DSPUSRPRF 查看OUTPUT QUEUE 如果该QUEUE的LIB并不在编程环境的LIB LIST中.那么程序生成的报表将为'FIN'状态.无法查看. 解决方法:OVRPRTF OUTQ(&OUTQ) 指定OUTQ. 虽然是件很小的事,但也迷惑了我一会.应引起注意
2. 打印中文字
(a)定义中文的输出字段时,数据类型选'O',代表DBCS-OPEN(DBCS:double-byte character set).也可以不填数据类型,由系统自行判断.
(b)指定报表User specified DBCS data参数.方法为14编译报表时,IGCDTA设为(*YES). 通过OVRPRTF设置亦可
3. overflow运用
通过overflow来控制报表换页的方法有:
(a)设置指示器,例: FSSO670P O E 79 PRINTER
当指示器79为'ON'时,代表当前打印的行数已经大于等于指定的overflow行数.此时可以选择打起始页来换页.也可以按实际情况继续往下打印,例如打页尾.但不要超过设定的纸张line数.
(b)在程序中自行计算行数.
(c)通过参数控制:
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是当前页数
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是当前页数
很可惜,此方法貌似只能运用于RPGLE.RPGIII对应的参数没找到.
4. 画线
(a) 用"----" ..... 优点:简单 缺点:难看...
(b) DFNLIN
划横线如:DFNLIN(*HRZ 40 71 10) 此线是在坐标(40 71)处开始划10个长。
划纵线如:DFNLIN(*VRT 06 02 09) 此线是在坐标(06 02)处开始划9个长。
字体放大:CHRSIZ(2 2) 此命令放大4倍,此命令好像不能缩小。
优点: 简单 缺点:位置只能固定,无法程序控制. 线的类型无法选择
(c) LINE
LINE(&FLD1 &FLD2 4.25 *VRT 0.01 *LEFT)
FLD1 5S 3P
FLD1 5S 3P
优点: 程序可以控制定位,可以设定线的粗细等类型,可以设定线的方向
缺点: CRTPRTF时,需要设定DEVTYPE(*AFPDS)参数.而AFPDS(ADVANCE FUNCTION PRINT DATA STREAM)需要特定打印机的支持,普通的激光打印机根本无法打印.同样如此的还有BOX这个keyword
(d) APW
优点:可以设定线类型,画线与prtf分离,便于修改
缺点:需要license,位置貌似只能固定,无法程序控制
具体操作方法如下
创建一个APW格式的成员,基本语句:
1.注释:@/*
2.划线
DRAW边线
DRAWC中线
DRAWL下边线?
DRAW(线种 开始行 开始列 终了行 终了列)
线种:1细线 2粗线 3平行线 4细点线 5 粗点线 6平行点线
3.网线AMIKAKE(险种 开始行1,开始列1 。。。终了行1,终了列1)
网种 0~14
4.文字扩大ADDAPW LINE(开始行 终了行)
5.创建
CRTAPW FORMD(L02AP) 存放APW格式的记录名
FILE(TLIB/APWFORM) 存放物理文件的库名/存放APW格式的物理文件名
SRCFILE(TLIB/QAPWSRC) 存放APW成员的库名/源文件名
SRCMBR(L02AP) APW 成员名
REPLACE(*YES)
6.合并
MRGAPW FORMD(L02AP) 存放APW格式的记录名
FILE(APWFORM) 存放APW格式的物理文件名
SPLF(L02P) SPLF中的报表名
7.删除SPLF里面的报表
DLTSPLF FILE(L02P) SPLNBR(*LAST)
1.注释:@/*
2.划线
DRAW边线
DRAWC中线
DRAWL下边线?
DRAW(线种 开始行 开始列 终了行 终了列)
线种:1细线 2粗线 3平行线 4细点线 5 粗点线 6平行点线
3.网线AMIKAKE(险种 开始行1,开始列1 。。。终了行1,终了列1)
网种 0~14
4.文字扩大ADDAPW LINE(开始行 终了行)
5.创建
CRTAPW FORMD(L02AP) 存放APW格式的记录名
FILE(TLIB/APWFORM) 存放物理文件的库名/存放APW格式的物理文件名
SRCFILE(TLIB/QAPWSRC) 存放APW成员的库名/源文件名
SRCMBR(L02AP) APW 成员名
REPLACE(*YES)
6.合并
MRGAPW FORMD(L02AP) 存放APW格式的记录名
FILE(APWFORM) 存放APW格式的物理文件名
SPLF(L02P) SPLF中的报表名
7.删除SPLF里面的报表
DLTSPLF FILE(L02P) SPLNBR(*LAST)
另外,APW可以打印条形码,参考如下:
写一个属性为APW的文件,文件里有这句
ADDAPW LINE(2) SYMBOL(115 13 CODE39 CODE39 LIBNAME)
ADDAPW LINE(行) SYMBOL(列 变量长度 FILE RECORD LIBNAME)
在(2,115)打出条形码
然后在CL里用
CRTAPW做成APW
然后MRGAPW合成.
ADDAPW LINE(2) SYMBOL(115 13 CODE39 CODE39 LIBNAME)
ADDAPW LINE(行) SYMBOL(列 变量长度 FILE RECORD LIBNAME)
在(2,115)打出条形码
然后在CL里用
CRTAPW做成APW
然后MRGAPW合成.
PRT文件
- A R HED10
- A P1BCD 13A 43
- A TEXT(' バーコード ')
APW文件
- ADDAPW LINE( 4) SYMBOL(43 13 BARSET BARSETF)
写完APW后,要做成
CRTAPW FORMD(PGMXXXA) FILE(WRKLIB/APWFORM) SRCFILE(SRCLIB/QAPWSRC) SRCMBR(
PGMXXXA) CPI(12) LPI(7.5) REPLACE(*YES)
CL文件
- /* 印刷装置ファイル一時変更 */
- OVRPRTF FILE(PGMXXXP) PAGESIZE(72 80) LPI(7.5) CPI(12) OVRFLW(72)
- /* 作業票を実行 */
- CALL PGM(PGMXXX)
- /* 書式合成 */
- MRGAPW FORMD(PGMXXXA) FILE(WRKLIB/APWFORM) SPLF(PGM0XXXP) JOB(*) SPLNBR(*LAST) SCHEDULE(*FILEEND)