一.数组的使用。
1.定义(用E表定义)
E TEXT 1 2 10
说明:按下F4时,TEXT对应的是Name,1对应的是Record,2对应的是Table,表示数组的元素个数,10对应的是of Entry,表示每个元素的长度。
2.赋值
在RPG程序的最后
0701.00 **
0702.00 添加成功!
0703.00 更新成功!
说明:**的下一行表示数组元素第一个元素的值,再下一个行是数组的第二个元素的值......
3.数组的使用
0601.00 MOVELTEXT,1 变量1
0602.00 MOVELTEXT,2 变量2
说明:第0601.00行表示把数组的第一个元素的值赋给变量1,第0602.00行表示把数组的第一个元素赋给变量2......
二.画面
1.布局一个日期到另一个日期的画面,既 "日期1 -日期2"的格式
A D1FROM 8Y OB 3 28EDTWRD('_ _ _ _ /_ _ /_ _')
A EDTMSK('_ _ _ _ &_ _ &_ _')
A 3 40'-'
A D1TO 8Y OB 3 43EDTWRD('_ _ _ _ /_ _ /_ _')
A EDTMSK('_ _ _ _ &_ _ &_ _')
说明:EDTWRD为数据的显示格式,比如2010/11/06,EDTMSK为输入日期时的格式,输入日期的时候,输入年后,&全都会变成空格,所以年、月、日之间都会空格,这样很清楚。
三.subfile文件的显示
1.定义
A*****************************************
A R PNLS01 SFL
A S1LLNO 8A O 6 2
A S1YDDT 8Y 0O 6 11
...
A*****************************************
A R PNLC01 SFLCTL(PNLS01)
A OVERLAY
A PROTECT
A SILSIZ(16) SFLPAG(15)
A 25 26 SFLDSP SFLEND
A 25 SFLDSPCLT
A N25 SFLCLR
A SFLCSRRN(&CLRECN)
A C1RRN 4S OH SFLRCDNBR(CURSOR)
A C1RECN 5S OH
A C1PAGN 5S OH SFLSCROLL
A MODE 1A H
A 5 2'单号'
A COLOR(WHT)
......
A*********************************************
说明:
1)SUBFILE的主要关键字
(1) SFL
(2) SFLCTL(PANEL名)
(3) SFLSIZ
(4) SFLPAG
(5) SFLDSP
(6) SFLDSPCTL
(7) SFLEND(当尚有数据时,会在SUBFILE右下端显示*more)
(8) SFLCLR(subfile的清空)
(9) SFLINZ(subfile的初始化, 此时,数值域均为0)
(10)SLFDLT
(11)SFLLIN(RECORD间隔的SPACE数)
(12)SFLDROP(CA**)(CF**)
适用于每个record占多行的subfile,按了CF**或CA**,则多行显示状态和每个record仅显示第一行的状态互相切换. 注意, 初始状态为每个record仅显示第一行的状态.
(13)SLFFOLD(CA**)(CF**)
同SFLDROP. 不同的是初始状态为多行显示状态
(14)ROLLUP(**)---à page down
(15)ROLLDOWN(**)--à page uP
2)SUBFILE的主要命令
(1) WRITE(SUBFILE记录的写入)
(2) UPDAT(SUBFILE记录的更新)
(3) CHAIN(SUBFILE记录的CHAIN,用相对记录号RRN CHAIN)
(4) READC(SUBFILE中有变更的记录顺次读取)
3)RPG中操作subfile文件
(1)subfile文件的引入
/***F 文件的引入
FxxxxxD CF E WORKSTN
F RRN KSFILE PNLS01
F KINFDS CURPOS
/*****在subfile显示前,要注意清空subfile
C*************************************************
C Z-ADD0 RRN 5O
C Z-ADD0 W@MRRN 50
C Z-ADD C1RRN
C MOVEL *OFF *IN25
C WRITEPNLC01
C***************************************************
/*****赋值
C***************************************************
C MOVEL*ON *IN25
C MOVELD1FROM S1YDDT
C ......
C ADD 1 RRN
C WRITEPNLS01
C Z-ADDRRN W@MRRN
C***************************************************
/****** 处理
C***************************************************
C RRN IFEQ 0
C MOVEL*OFF *IN26
C ENDIF
C****************************************************
/****** 显示
C****************************************************
C WRITEPNLD99
C WRITEPNLD01
C EXFMTPNLC01
C****************************************************
说明:在subfile的使用中,要特别注意以上的25、26标志位控制,SFLSIZ表示最大可显示的行数,SFLPAG表示要显示的行数,如果添加一条数据后,行号RRN要加1.
四.I表的使用
1.定义
/****** I
I*************************************************
I SDS
I 1 10PGMD
I 254 263USID
I***************************************************
ILDA DS
I 1 10OUTQ
I 11 14FDCD
I 11 12FDCD1
I 13 14FDCD2
I***************************************************
I DS
I 1 14ODSTMDT
I 1 6ODSTIME
I 7 14ODSUDAT
I***************************************************
说明:第一部分为系统自动的I表,第二和第三部分为自己定义的,表名为LDA。
2.赋值
C****************************************************
C *NAMVAR DEFN *LDA LDA
C IN LDA
C TIME DSTMDT
C*****************************************************
说明:TIME是系统自带的时间,把它赋给DSTMDT后,也就自动把1到6位赋给了DSTIME,7到14位赋值给了DSUDAT.
五.PRG程序的调试
1.输入命令strisdb,填好RPG程序名和所属的库名后,有一个参数Udate production files *NO 表示要调试的程序是否有文件的更新操作,如果有,无比要把此参数设为YES,然后会弹出参数的提示,程序有入口参数则要输入参数。
六.帐票文件
1.在其文件名前,输入14表示编译,19表示显示。WRKSPLF 报表指定的打印机.
七.一些命令
1.CALL 一本有参数的RPG程序
CALL PGM(LIB/OBJ) PAM('1''2')
2.查看某本程序编译到那个库了。
WRKOBJ *ALL/STUDR /*STUDR是要查看的程序的名称*/
八.快捷键
1. Ctrl+Insert 复制选中的
2. Shift+PageDown 粘贴
3.Shift+F6 1)如果参看SP文件时(WRKJOB->4或WRKSPLF),其功能是翻到最后一页.2)如果是在某本程序前输入了14,既将要编译前,按下这个组合键,则可以填写要编译到那个默认的库.
4.Shift+Esc 填系统参数
5.Shift+F4 在编程时,在命令行输入某个值后,进行对该值的查找。
九.错误提示
The length of KFLD is not equal to the length of the corresponding key in the file.
原因:定义的KLIST的顺序和对应的数据库文件的KEY的顺序不同,解决办法,可以是新建一个逻辑(L)文件,使得KLIST的顺序和对应的数据库文件的顺序一致。