Chinaunix首页 | 论坛 | 博客
  • 博客访问: 180743
  • 博文数量: 39
  • 博客积分: 1950
  • 博客等级: 中尉
  • 技术积分: 445
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-04 10:28
文章分类

全部博文(39)

文章存档

2017年(1)

2011年(1)

2010年(37)

分类:

2010-05-25 11:27:43

在松江做了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是当前页数
很可惜,此方法貌似只能运用于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
优点: 程序可以控制定位,可以设定线的粗细等类型,可以设定线的方向 
缺点: 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)
     
 
 
           另外,APW可以打印条形码,参考如下:
           写一个属性为APW的文件,文件里有这句
ADDAPW LINE(2) SYMBOL(115 13 CODE39 CODE39 LIBNAME)
ADDAPW LINE(行) SYMBOL(列 变量长度 FILE RECORD LIBNAME)
在(2,115)打出条形码
然后在CL里用
CRTAPW做成APW
然后MRGAPW合成.
PRT文件
  1. A          R HED10   
  2. A            P1BCD         13A       43                     
  3. A                                      TEXT(' バーコード ')  

    APW文件
  1. 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文件
  1. /* 印刷装置ファイル一時変更 */  
  2. OVRPRTF    FILE(PGMXXXP) PAGESIZE(72  80) LPI(7.5) CPI(12)  OVRFLW(72)        
  3. /* 作業票を実行 */   
  4. CALL       PGM(PGMXXX)
  5. /* 書式合成 */   
  6. MRGAPW     FORMD(PGMXXXA) FILE(WRKLIB/APWFORM) SPLF(PGM0XXXP) JOB(*) SPLNBR(*LAST) SCHEDULE(*FILEEND)                        
 
 
 
阅读(2043) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~