- 论坛徽章:
- 0
|
先CODE吧.
PF: ACCTYPE
- A R RACCTYP
- A NAME 18A COLHDG('NAME')
- A DESC 12A COLHDG('DESC')
- A K NAME
复制代码
DSPF: WINDOW2
- A DSPSIZ(24 80 *DS3)
- A CF03
- A CA12(12)
- A R WINDOW1 OVERLAY
- A WINDOW(8 20 12 40)
- A WDWTITLE((*TEXT 'RECORD DETAILS') +
- A (*DSPATR HI))
- A 10 2'1-SELECT F12:CANCEL'
- A DSPATR(HI)
- A
- A** BLEOW IS SUBFILE
- A R SUBF SFL
- A SFLOPT 1A I 2 2VALUES('1')
- A SFLNAME 18A O 2 6
- A SFLDESC 12A O 2 25
- A R SUBFC SFLCTL(SUBF)
- A SFLSIZ(9999)
- A SFLPAG(0005)
- A WINDOW(WINDOW1)
- A 32 SFLDSP
- A 32 SFLDSPCTL
- A 40 SFLEND(*MORE)
- A 31 SFLCLR
- A 1 2'OPT NAME DESCRIPTION'
- A DSPATR(HI)
- A R DSP
- A CF05
- A 6 17'NAME'
- A 6 44'DESC'
- A W1NAME 18 O 7 17DSPATR(UL)
- A COLOR(WHT)
- A W1DESC 12 O 7 44DSPATR(UL)
- A COLOR(WHT)
复制代码
RPGLE: SUBPRO
- FACCTYPE IF E K DISK
- FWINDOW2 CF E WORKSTN
- F SFILE(SUBF:RRN1)
- DSELEC PR 30
- D*定义子过程
- DNAME 18 VALUE
- C Z-ADD *ZERO RRN1 4 0
- C* RRN1 必须在主程序里面定义,在子过程里定义对于主程序不起作用仍会提示RRN1未定义.
- C MOVEL *BLANK RESULT 30
- C*同样RESULT 也必须定义长度.
- C DOW NOT(*INKC)
- C EXFMT DSP
- C KE DO
- C EVAL RESULT=SELEC(W1NAME)
- C*调用子过程
- C MOVEL RESULT W1NAME
- C MOVE RESULT W1DESC
- C ENDDO
- C ENDDO
- C SETON LR
- C RETURN
- C*
- PSELEC B
- **子过程开始
- DSELEC PI 30
- DW1NAME 18 VALUE
- DRESULT S 30
- C SETON 31
- C WRITE SUBFC
- C SETOFF 31
- C* Z-ADD *ZERO RRN1 4 0
- C*这个很是要说明一下见下面
- C *LOVAL SETLL RACCTYP
- C READE RACCTYP 90
- C DOW *IN90='0'
- C ADD 1 RRN1
- C EVAL SFLNAME=NAME
- C EVAL SFLDESC=DESC
- C WRITE SUBF
- C*子过程开始如果执行Z-ADD 0 RRN1 到这一步就会报错。
- C READ RACCTYP 90
- C ENDDO
- C SETON 40
- C WRITE WINDOW1
- C SETON 32
- C EXFMT SUBFC
- C SETOFF 32
- C*取得选择的值
- C READC SUBF 80
- C N80 DO
- C MOVEL SFLNAME RESULT
- C MOVE SFLDESC RESULT
- C ENDDO
- C Z-ADD 0 RRN1
- C*见下面
- C RETURN RESULT
- P E
复制代码
下午一直在研究子过程,根据dazzling2000 给的程序,写了这个简单的。
结果也遇到了在WRITE SUBF时报错.
代码都改成一样,一个报错一个不报错.
只有将Z-ADD 0 RRN1 放到 子过程的结束,就不报错了.
还有种解决方法就是清空子文件放在子过程之外。
至于为什么子过程开始时Z-ADD0 RRN1不行,俺也不知道。
但是dazzling2000的程序却可以正常运行。程序代码改成一模一样还是一个报错,一个不报错。
……
不知道在程序里面用子过程有什么好处,感觉子过程就是一个带入口参数的CALL。
像这个在子过程中显示子文件,感觉很是不稳定。
到觉得不如子程序方便。
最后再附上dazzling2000大大的源程序。
各位可以看看到底为什么子过程开始时不能设为0
注:附件程序源自dazzling2000大大
[ 本帖最后由 uglyneo 于 2007-5-10 20:04 编辑 ] |
|