当天的日期将以日,月,年的格式打印,并以“/”为分隔符。
1.1.5.3文件描述规范表
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+...
FFilename++IPEASFRlen+LKlen+AIDevice+.Keywords+++++++++++++++++++++++++++
FTRANSACT IP E K DISK FEMPLOYEE IF E K DISK FQSYSPRT O F 80 PRINTER
在文件描述规范表中定义了三个文件。
TRANSACT定义为输入文件,由ILE RPG/400程序周期控制从这个文件中读记录。 EMPLOYEE定义为输入的全过程文件,由计算规范表控制从这个文件中读记录。 QSYSPRT定义为输出的打印文件。
1.1.5.4 定义规范表
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... D+Name++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++
D Pay S 8P 2
D Heading1 C 'NUMBER NAME RATE H-
D OURS BONUS PAY ' D Heading2 C '______ ________________ ______ _-
D ____ _______ __________'
使用定义规范表,说明变量“Pay”储存雇员每周的工资,两个常量“Heading1”和“HEADING2”来做打印表头。
1.1.5.5 计算规范表
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+...
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq..
C TRN_NUMBER CHAIN EMP_REC 99 C IF NOT *IN99
C EVAL (H) Pay = EMP_RATE * TRN_HOURS + TRN_BONUS C ENDIF
计算表的代码项包括:
CHAIN操作,用交易文件中的字段TRN_NUMBER在雇员文件中查找有相同雇员号的记录。 如果CHAIN操作成功。(指示器99为OFF),则雇员的工资值确定,结果被四舍五入并保存于变量“pay”中。
1.1.5.6 输出规范表
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+...
OFilename++DF..N01N02N03Excnam++++B++A++Sb+Sa+...........................
O..............N01N02N03Field+++++++++YB.End++PConstant/editword/DTformat
OQSYSPRT H 1P 2 3
O 35 'PAYROLL REGISTER' O *DATE Y 60 O H 1P 2
O 60 Heading1 O H 1P 2
O 60 Heading2 O D N1PN99 2 O TRN_NUMBER 5 O EMP_NAME 24 O EMP_RATE L 33 O TRN_HOURS L 40 O TRN_BONUS L 49
O Pay 60 '$ 0. ' O D N1P 99 2 O TRN_NUMBER 5
O 35 '** NOT ON EMPLOYEE FILE **' O T LR
O 33 'END OF LISTING'
输出规范表描述了哪些字段要输出到QSYSPRT中。
如果1P指示器为ON,那么包含字符串常量‘PAYROLL REGISTER’的标题行及明细信息的标题就会被打印出来。1P指示器是由ILE RPG/400程序在第一程序周期置为ON的。 明细行的打印由1P指示器和99指示器决定,1P指示器为ON时,明细行不打印。当找到对应的雇员记录时,99指示器为OFF,则打印明细行。如果99指示器为ON,那么打印雇员号和字符串常量‘** NOT ON EMPLOYEE FILE**’。
总计行包含字符串常量‘END OF LISTING’。它在程序的最后一次周期时打印。
1.1.5.7 完整的源程序
下图包含了这个程序中使用的所有规范表,也就是应当输入的源程序。
*------------------------------------------------------------------------* * 这个程序生成雇员每周工资的打印输出。
*------------------------------------------------------------------------*
H DATEDIT(*DMY/)
*------------------------------------------------------------------------* * 文件定义 *
*------------------------------------------------------------------------* FTRANSACT IP E K DISK FEMPLOYEE IF E K DISK FQSYSPRT O F 80 PRINTER
*------------------------------------------------------------------------* * 变量说明 *
*------------------------------------------------------------------------* D Pay S 8P 2
*------------------------------------------------------------------------* * 常量说明 *
*------------------------------------------------------------------------* D Heading1 C 'NUMBER NAME RATE H-
D OURS BONUS PAY ' D Heading2 C '______ ________________ ______ _-
D ____ _______ __________'
*
*------------------------------------------------------------------------* * 对文件(TRANSACT)的每个记录。如果找到雇员,计算他的工资且打印详细 * * 信息。
*------------------------------------------------------------------------* C TRN_NUMBER CHAIN EMP_REC 99 C IF NOT *IN99
C EVAL (H) Pay = EMP_RATE * TRN_HOURS + TRN_BONUS C ENDIF
*------------------------------------------------------------------------* * 报表格式:
*
*
*
* -- 如果1P为ON,打印标题行。 * -- 如果找到记录,打印工资详细内容,否则打印例外记录。
*------------------------------------------------------------------------* OQSYSPRT H 1P 2 3
O 35 'PAYROLL REGISTER' O *DATE Y 60 O H 1P 2
O 60 Heading1 O H 1P 2
O 60 Heading2 O D N1PN99 2 O TRN_NUMBER 5 O EMP_NAME 24 O EMP_RATE L 33 O TRN_HOURS L 40 O TRN_BONUS L 49
O Pay 60 '$ 0. ' O D N1P 99 2 O TRN_NUMBER 5
O 35 '** NOT ON EMPLOYEE FILE **'
*
* -- 当LR为ON时,打印'END OF LISTING'。 *