- 论坛徽章:
- 0
|
整理了一个能对SUBFILE中的列出的数据进行自动累加的技巧,本人自觉得非常实用,特地拿出来和大家分享! 
DSPF代码:
- A DSPSIZ(24 80 *DS3)
- A CA03(99)
- A*-------------------------------------------------------------------
- A R SUBDAT SFL *SUBFILE
- A SUBOPT 1A B 3 3CHECK(ER) *选项字段
- A SUBAMT 7Y 2B 3 9EDTWRD(' . ') *数值字段
- A*-------------------------------------------------------------------
- A R SUBCTL SFLCTL(SUBDAT) *SUB CONTROL
- A OVERLAY
- A 65 SFLDSP
- A 75 SFLDSPCTL
- A 30 SFLINZ
- A 50 SFLCLR
- A 40 SFLEND(*MORE)
- A SFLSIZ(0099)
- A SFLPAG(0012)
- A DSPRCD 4S 0H SFLRCDNBR(CURSOR) *显示当前光标行数的字段
- A RELRCD 5S 0H *用于控制光标行数的字段
- A 2 2'Opt. Amount '
- A DSPATR(HI)
- A DSPATR(UL)
- A*-------------------------------------------------------------------
- A R TOTFMT
- A OVERLAY
- A 18 1'Total:'
- A TOTAMT 8Y 2O 18 8EDTCDE(3) *显示累加结果
复制代码
RPGLE代码:
- FCNDDBG CF E WORKSTN SFILE(SUBDAT:RRN)
- C*-------------------------------------------------------------------
- C** MAIN ROUTINE
- C*-------------------------------------------------------------------
- C DOW *IN99='0'
- C*WRITE DATA TO SUBDAT *往SUBFILE里赋值
- C 1 DO 20 X 2 0
- C EVAL SUBAMT=X * 10
- C EVAL RRN=RRN + 1
- C WRITE SUBDAT
- C CLEAR SUBDAT
- C ENDDO
- C*DISPLAY SUBCTL *显示SUBFILE和累加结果
- C LOOP_TAG TAG
- C WRITE TOTFMT
- C SETON 657540
- C EXFMT SUBCTL
- C SETOFF 657540
- C*CALCULATE TOTAL AMOUNT
- C IF *IN99='0'
- C READC SUBDAT 10 *读取SUBFILE的变化
- C IF *IN10='0'
- C IF RRN=20
- C EVAL RRN=1
- C ELSE
- C EVAL RRN=RRN + 1
- C EVAL DSPRCD=RRN *操作后光标置于后一项
- C EVAL RELRCD=RRN
- C*SELECT AMOUNT *累加操作
- C EVAL RRN=0
- C SETOFF 11
- C DOW *IN11='0'
- C EVAL RRN=RRN + 1
- C RRN CHAIN SUBDAT 11
- C IF *IN11='0' AND SUBOPT='Y'
- C EVAL TOTAMT=TOTAMT + SUBAMT
- C ENDIF
- C ENDDO
- C
- C ENDIF
- C ENDIF
- C GOTO LOOP_TAG
- C ENDIF
- C
- C ENDDO
- C SETON LR
- C*-------------------------------------------------------------------
- C** INITIALIZE
- C*-------------------------------------------------------------------
- C *INZSR BEGSR *初始化子程序
- C SETON 50
- C WRITE SUBCTL
- C SETOFF 50
- C
- C Z-ADD *ZEROS RRN 4 0
- C MOVEL *BLANKS TOTAMT
- C Z-ADD 1 DSPRCD
- C Z-ADD 1 RELRCD
- C
- C ENDSR
复制代码
图例: |
|