首页 > 其他 > 详细

ABAP简单相杀勘定

时间:2020-06-04 11:58:27      阅读:30      评论:0      收藏:0      [点我收藏+]

需求如下图:

技术分享图片

 

做法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.

ABAP简单相杀勘定

原文:https://www.cnblogs.com/RinShow/p/13041665.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!