需求如下图:
做法1(不推荐)
DO.
CLEAR LW_NUM.
READ TABLE LTD_SCAN INTO LTH_SCAN INDEX 1.
READ TABLE LTD_KILL INTO LTH_KILL INDEX 1.
LW_NUM = LTH_SCAN-SCAN - LTH_KILL-KILL.
IF LW_NUM > 0.
DELETE TABLE LTD_KILL FROM LTH_KILL.
LTH_SCAN-SCAN = LW_NUM.
MODIFY TABLE LTD_SCAN FROM LTH_SCAN .
ENDIF.
IF LW_NUM < 0.
DELETE TABLE LTD_SCAN FROM LTH_SCAN.
LTH_KILL-KILL = ABS( LW_NUM ).
MODIFY TABLE LTD_KILL FROM LTH_KILL .
ENDIF.
IF LW_NUM = 0.
DELETE TABLE LTD_SCAN FROM LTH_SCAN.
DELETE TABLE LTD_KILL FROM LTH_KILL.
ENDIF.
IF LTD_SCAN IS INITIAL OR
LTD_KILL IS INITIAL.
EXIT.
ENDIF.
ENDDO.
做法2(正常做法)
LOOP AT TD_KTOPL INTO LTH_KTOPL.
* 有相杀值,需要相杀
IF LW_SUM_KTOFF > 0.
* 不能完全相杀 或者 刚好完全相杀
IF LW_SUM_KTOFF >= LTH_KTOPL-BDMNG.
LW_SUM_KTOFF = LW_SUM_KTOFF - LTH_KTOPL-BDMNG.
CONTINUE.
* 可以完全相杀 且有剩余
ELSE.
LTH_KTOPL-BDMNG = LTH_KTOPL-BDMNG - LW_SUM_KTOFF.
CLEAR LW_SUM_KTOFF.
APPEND LTH_KTOPL TO TD_KTOPL_OUT.
ENDIF.
* 已经全部相杀完毕,不需要再相杀
ELSEIF LW_SUM_KTOFF = 0.
APPEND LTH_KTOPL TO TD_KTOPL_OUT.
ENDIF.
ENDLOOP.
做法3:(只考虑了左边总和大于右边总和的情况)
LOOP AT LTD_SCAN INTO LTH_SCAN.
LW_NUM_SCAN = LW_NUM_SCAN + LTH_SCAN-SCAN.
ENDLOOP.
LOOP AT LTD_KILL INTO LTH_KILL.
LW_NUM_KILL = LW_NUM_KILL + LTH_KILL-KILL.
ENDLOOP.
LW_NUM = LW_NUM_SCAN - LW_NUM_KILL.
IF LW_NUM > 0.
CLEAR: LW_NUM_SCAN,
LW_NUM.
LOOP AT LTD_SCAN INTO LTH_SCAN.
LW_TABIX = SY-TABIX.
LW_NUM_SCAN = LW_NUM_SCAN + LTH_SCAN-SCAN.
IF LW_NUM_SCAN > LW_NUM_KILL.
LW_NUM = LW_NUM_SCAN - LW_NUM_KILL."
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
DESCRIBE TABLE LTD_SCAN LINES LW_LINES.
INSERT LINES OF LTD_SCAN FROM LW_TABIX
TO LW_LINES INTO TABLE LTD_NEW_SCAN.
READ TABLE LTD_NEW_SCAN INTO LTH_NEW_SCAN INDEX 1.
LTH_NEW_SCAN-SCAN = LW_NUM.
INSERT LTH_NEW_SCAN INTO LTD_NEW_SCAN INDEX 1.
DELETE LTD_NEW_SCAN INDEX 2.
原文:https://www.cnblogs.com/RinShow/p/13041665.html