RPG AS400程序员培训手册915420.docx
《RPG AS400程序员培训手册915420.docx》由会员分享,可在线阅读,更多相关《RPG AS400程序员培训手册915420.docx(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、8 其它 8.1 报报表打印在这里,简简单说一下下报表。其实据说RPG 设计之初,主主要就是为为了解决报表问题。不过发展到现现在,在我我接触过的系统中,觉得报表在RPGG 编程之中反反而退居其其次,大部部分程序都是对数数据库中磁盘文件(即即PF 文件件)的操作作。报表文件其其实在某种意义上与普通通的磁盘文件很类似,都是是有记录格式(ReecorddFormaat),都都可以进行写操作作(WRIITE),RPGGLE 的的程序对它们的操作方方式也比较较雷同。所所不同的是普普通的磁盘盘文件的数数据是存储储在数据库中,而报表文件WRRITE 了之后,是是以脱机文件(Sppool Filee)的形式式
2、存在。所所以在一个个库中,磁盘文件具有有唯一性,即即不能有同同名的磁盘文件;而在同一一个输出队列中,同同名的报表文件(即即生成的脱脱机文件),允允许有多个。要做一个全全新的报表打印,大大致上可以以分为画报表文件(PPRTF),与与编写打印程程序这两部分。一、画报表表文件(PPRTF)1、 新建建立一个属属性为PRTFF的文件,然然后使用119 进入报表编辑状态。(即STTRRLUU)2、 定义义一个新的的记录格式(Reecordd Forrmat):DR + F188 + FF10,注注意看下方方的功能键说明3、 在一一个记录格式之之下,追加加内容时,要在新新的编辑行前加加“CLC”,表表示此
3、行的内容,是是属于上面面记录格式的的。4、 编辑辑行前加:DC: 定定义常量CF: 使使当前行的的内容居中中5、 常用用功能键:F13:标记/ 取取消标记(光标所指的字字段)。多多试一下就知知道使用方方法,可以以将同一行的多多个相连的字段标记记成为一个块(对首尾两个个字段操作作F13 即可)。高亮部分表表示已被标标记的块。F14:将已标记的的块COPYY 到光标指定处。(其实这这个我用得得不多)F15:将已标记的的块MOVEE到光标指定处。(这个用得不不少)F16:删除已标记记的块。(这个用的频率也不少少)F11:定义新变量量F23:进入当前字字段的功能能菜单画面6、 对新新变量的定义,按F1
4、11 之后,见到画面如如下:Editeed leengthh . . . . . . . . . . . . : 11Recorrd foormatt . . . . . . . . . . . . : RRCD0001Numbeer off keyywordds . . . . . . . . . : 0Numbeer off inddicattors . . . . . . . . : 0Type choiices, preess EEnterr.Fieldd . . . . . . . . . . . . . . . . FLDD001 NameeOptioon inndicaators
5、s . . . . . . . . . . 01-99, N01-N99More indiicatoors . . . . . . . . . . NN Y=YYes, N=NooStartting linee . . . . . . . . . . . . 1-2255Startting posiitionn . . . . . . . . . . 6 11-2555, +nnnLengtth off datta . . . . . . . . . . . 1 1-378, +nnn, -nnn翻页,还有有:Data typee . . . . . . . . . . . . . . 1 1
6、1=Chaaractter2=Zonned3=Flooatinng pooint4=Opeen5=Graaphicc6=Datte7=Timme8=Timme sttampDecimmal pposittionss . . . . . . . . . . 0-331, +n, -nReferrencee a ffieldd . . . . . . . . . . N YY=Yess, N=NoUse rreferrenceed vaaluess . . . . . . . YY Y=YYes, N=Noo可以采用直直接定义长长度、类型的方法法,即在第第1 页的最末尾尾,Lenngth of d
7、data 处,填上字段长长度;如果果是字符型型,就不需需要再填其其它内容;如果是数数字型,在在第2 页Deciimalposittionss 处填上小数数位数。也可以采用用参照字段段的方法(即即参照已存存在的PFF 文件中中的字段)。如如果选用这种方法,就用用需要在LLengtth off datta 以及及Deciimal posiitionns 中填填写内容,将将Refeerencce afieldd 项填为“Y”,然后后按确认键键(好象F110 键也可以),然然后可以看看到该项高亮显示。此时再按FF10,可可进入该字段的功功能菜单(也可以以通过在报表编辑状态下,直接接在当前字段处按FF2
8、3 进进入):Opt KKeywoord OOpt KKeywoord OOpt KKeywoordALIASS DFTT IGCCCHRRRTTBARCOODE DDLTEDDT INNDTXTTBLKFOOLD EEDTCDDE MSSGCONNCDEFNNT EDDTWRDD PAGGNBRCHRIDD FLTTFIXDDEC PPRTQLLTYCHRSIIZ FLLTPCNN REFFFLDCOLORR FNTTCHRSSET SSKIPAACPI FFONT SKIPPBCVTDTTA HIIGHLIIGHT SPACCEADATE IGCAALTTYYP SPPACEBBDATFM
9、MT IGGCANKKCNV TEXTTDATSEEP IGGCCDEEFNT TIMEE以上菜单中中,标记为为蓝色的,是是我常用的的几个选项项。在这些选项项前面,选2,即是对当前字段段加注这些功能;选4,即是去去掉这些功能。要参照已知知字段定义义变量,则在“REFFFLD”选项前选2,可见Fieldd . . . . . . . . . . . . . . .Recorrd foormatt . . . . . . . . . .File . . . . . . . . . . . . . . .Libraary . . . . . . . . . . . . . *CUURLIBB各选项的
10、含含义:Fieldd: 当前前变量所参照照的字段Recorrd Foormatt: 当前前变量所参照照字段,在在PF 文件件中所属的的记录格式File: PF文件名名Libraary: PF 文件件所在的库库名7、 其它它几个常用用功能选项项的含义:SKIPAA:Skipp Aftter, 在WRIITE 操操作时,写该字段后,自自动换页;SKIPBB:Skipp Beffore 在WRITTE 操作作时,写该字段前,自自动换页SPACEEA:Spacce Affter 写该字段后,再再打印一个个空格;SPACEEB:Spacce Beeforee 写该字段前,打打印一个空空格(可用用来解决错
11、错行问题)EDTCDDE:定义当前字段段的显示方式,比比如说当前字段段为数字类型时,是否显示逗号,前前面是补零等等。根根据F1 键,看Hellp 中的的说明:Edit Codee Desscripptionn No Signn CR Signn - SSign(R) - Siggn(L)Commaas annd zeero bbalannces 1 A J NCommaas 2 B K OZero balaancess 3 CC L PPNo coommass or zeroo ballancees 4 D M QUser defiined editt coddes 55-9Date fiel
12、ld eddit WWDate editt YSupprress leadding zeroos Z二、编写打打印报表的程序序1. 对报报表文件的的声明:FEF43322P O E PRINNTER OFLIIND(*IN999)可以看到,操操作方式是是“O”,即只只写;文件类型为为“PRINNTER”,即即打印文件件;后面的OFFLINDD 关键字表示示该报表文件件的换页指示器器为99;即写写报表,当写写满一页时,*IN999 自动变为1;然后报表自动换页页,*IN999 再自自动变回0;其实这一项项我觉得控制起起来有点不不爽,所以以我通常都都是自行控控制换页,不用用这个指示器来来判断;我我
13、常使用的的自行控制制换页的方法法在下面会会说明。2. 对报报表文件的的处理和磁盘文件件(DISK)一一样,报表文件其其实也有OPEEN,CLOSSE,WRITTE 的操操作。不过使使用OPEEN,CLOSSE 操作作时,不需要要使用USSROPNN 关键字。同同时也因为生成的是脱脱机文件,所所以不能进进行CHAIIN、UPDAATE 等等定位、修修改的操作作。如果在程序序中,只需需要生成一一份报表,那么可以不使使用OPEEN/CLLOSE 操作,因为程序在在运行之初初,以及运运行结束时,已默认打开,关闭了一次次所有已声声明的文件,包括报报表打印文文件。但如果程序序在运行时时,需要生生成多份报报
14、表,那么必须在每次生成报表前使用用OPEN 操作;在在生成完报报表后,使使用CLOOSE 操操作,以保保证脱机文件件的完整。在生成完当当前报表前,还可能需要要使用CHHGPRTTF 的命命令,将报报表生成到到指定的输出队列列中。如果果不更改,那那么报表会生生成到当前前用户默认的脱机文件件存放处。当一个RPPGLE 中,生成成多份同名名报表时,常会在在生成报表前使用用CHGPPRTF,以以便于管理,避避免混乱。报表的操作作,也与磁磁盘文件(普普通PF 文件)类似,在OPPEN 与与CLOSSE 之间,对各字段进进行赋值,赋值完之后后再通过“WRITTE 记录录格式名” 的语句,来写写指定的记录格
15、格式。3. 自行行控制换页页在声明报表表时,可以通通过OFLIINE 关关键字,定定义换页指示示器,不过过可能是换页页指示器的使使用方法我我摸索得还还不够,所以使使用起来总总觉得不够自如。我通常是先先在报表文件中中,定义一个记录格式(Reecordd Forrmat),该记录格式式下只有一个字字段,同时时这个字段段的功能选选项处要标识为“SKIPPA”,然然后该字段尽量量做成不可见见字符。在在RPGLLE 程序序中,当程程序运行逻逻辑上判断断需要换页页时,WRITTE这个记录格格式,就可可以实现换换页了(也也就是通过过字段的SKKIPA 选项来实现换页页,当然大家也也可以使用用其它更便便捷的方
16、法法,这里只是介介绍我常用的的方法,因因为我觉得这个方法比比较稳定)。至于如何判判断换页,当然然要看具体体报表的需求求是如何要要求的。最最重要的,是是不要忘记定义义一个数字字型变量用来统计计当前页已打印过的行数,当当大于等于于60 行,要进行换页页处理(我我通常会留留出几行来来做为冗余,大大家可以自自已选择,但肯肯定不能大于66 行,否则会自动换页页)三、几点补补充呵呵,找出出我以前写写的关于报表打印的的贴子,做为使用时补充1、 关于于记录格式其实这个本本来没什么么可说的,不过我就经常搞错,还是说说吧。同一个记录录格式之下下,格式应应该如下:记录格式名名0001.00+ 打印内容容0002.0
17、0+ 打印内容容0003.00+每行要有这这个+,才归属于同一一个记录格式。如果果是个点的的话,也就是是说明这一行并不属于该该记录格式式,如果想想让它属于这个记录格式,就就要用CLLC 命令令;当我们用119 编辑辑的时候,如果果是3 来COPYY 记录行,系系统经常会自自动在COPYY 处新增一个记记录格式,所所以要注意意。(说来简单,但是是我最开始画报表的时候,就曾曾经被这个问题折折磨)2、 关于于变量的命名名不同的记录录格式,可可以使用相相同的变量名。有的时候,为了少写赋值值语句,可可以直接将将变量命名得得与PF 中的字段段相同。(不过我不不太喜欢这这种做法)如果在RPPGLE 程序中,
18、给给某个变量赋值,但没没有对相应的记录格式进行WRITEE 操作,编译译会不通过,报40300 字段未未定义的错。3、 关于于打印时会错行的问题有的时候,打打印会错行,比如如记录格式定定义0001.00+ 变量A(比如说10 个字字符长)0002.00+ 变量B(比如说5 个字符符长)变量A 的的起始处位于第一一列变量B 在在变量A 的下一一行,且起起始处位于第三三列当变量A=AAAAAAAAAAAA, 变量B=BBBBBBB时,会打印印出AAAAAAAAAAAABBBBBB这很正常。但当A= A或或空时,本来我我们是希望打打印出:A(或者这这里就是一一空行)BBBBBB这样的效果果,但是系系
19、统就会打印印成为BBBBBBA 或BBBBBB (没有有打印出空空行)也就是说,当当某一行的的前面为空时,(好象象空格也算算空)如果果下一行有有数据,就就会挤上来。解解决办法是在将将A 字段的的首位赋值值为非空;如果想让让客户看不见,可以考考虑使用汉字指指示器。想想打印空行行,也可以以用这个办法。又或者是将将该字段的功功能选项加上“SPACCEB”,即即打印前空空一格,也也可以解决决这个问题。(报表的这个特点困困扰我最久)4、关于报报表的测试其实这个东东西最简单,不过我以前一一向很少去去留意。以前测试报报表,尤其其是测试换换页的时候,都是是老老实实实的用打印印机去打,打打出来了再检查换页页对不
20、对,慢不说,还费纸。其实我们进进入到SPLLF 里,查看刚生成的报表文件,右右上角就有有当前的页页数,行数数,如第1 页页第1 行,右右上角就是是1/1,第第2 页第3 行,就就是3/22,好象页数在后面面。在“possitioon too”这里,+1 就是下一一行,W+1 就是是向右移一一列,慢慢慢+,就可以以看到换页是否否正确了。8.2 SSQLRPPGLE 在RPG/RPGLLE 程序序中,也是是可以使用用SQL 命令的,首首先,需要要将程序的的类型设置为SQLRPPG 或SQLRRPGLEE,SQL 语句的用法法都一样,RPG / RPPGLE 是指非SQQL 语句使用什什么格式。这这
21、类程序写写完之后与与普通的RRPG/RRPGLEE 程序一一样编译,运运行。不过需要注注意,SQQLRPGG 编译时时有一个“COMMMIT”参参数,此参参数如果没没有使用“*NONNE”,或或“*NCC”,那么SQL 语句中更改改的表将会会由系统默认加一个COOMMITT 声明。如果执行RRPG 程程序后没有有执行COMMMIT 操操作,那么么当时数据是更更改过来的,但但当用户SIGNOOFF 之之后,SQQL 更改改的表数据据将会回滚滚(这也是在维护护阶段常见的维护失误之一)。不过这个参参数只会影影响到SQQL 语句中做了了数据更改改的表,不不会影响到到RPG/RPGLLE 程序序段中的数
22、据。1、不带任任何参数的的SQL:C/EXEEC SQQLC+ UPPDATEE PFFFHS SSET FFHS011=0 WHEERE FFHS022=1C/ENDD-EXEEC2、动态游游标C* C* 定义义动态SQQL C* C/EXEEC SQQL C+ PRREPARRE W#SQL FROMM :A C/ENDD-EXEEC C* C* C* 执行行动态SQLL,结果保存到到游标C1 中中 C* C/EXEEC SQQL DEECLARRE C11 CURRSOR FOR W#SQQL C/ENDD-EXEEC C* C* C* C* 打开开游标C1 C* C/EXEEC SQQ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RPG AS400程序员培训手册915420 AS400 程序员 培训 手册 915420
限制150内