内表行操作逻辑

来源:互联网 发布:php set timezone 编辑:程序博客网 时间:2024/04/30 00:53
  LOOP AT GT_ITAB INTO GW_ITAB.
    GW_ITAB-POPER GW_ITAB-BLDAT+4(2).
    IF GW_ITAB-BUKRS IN S_RATE OR GW_ITAB-DFZGS IN S_RATE.
      GW_ITAB-RATE '0.009'.
    ELSE.
      GW_ITAB-RATE '0.008'.
    ENDIF.

    IF SY-TABIX 1.
      "若是第一行,余额不用算,只需要取下一行,计算计息天数,计算利息
      CLEAR LW_ITAB.
      CLEAR LV_LINE.
      LV_LINE SY-TABIX + 1.
      READ TABLE GT_ITAB INTO LW_ITAB INDEX LV_LINE.
      IF SY-SUBRC 0.
        GW_ITAB-DAY LW_ITAB-BLDAT GW_ITAB-BLDAT.
        GW_ITAB-LIXI GW_ITAB-DMBTR * GW_ITAB-DAY * GW_ITAB-RATE / 30.
      ELSE.
        IF LINESGT_ITAB 1.
          CLEAR LV_LASTDAY.
          CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
            EXPORTING
              I_DATE GW_ITAB-BLDAT
            IMPORTING
              E_DATE LV_LASTDAY.
          GW_ITAB-DAY LV_LASTDAY GW_ITAB-BLDAT + 1.
          GW_ITAB-LIXI GW_ITAB-DMBTR * GW_ITAB-DAY * GW_ITAB-RATE / 30.
        ENDIF.
      ENDIF.
    ELSE.
      CLEAR LW_ITAB.
      CLEAR LV_LINE.
      LV_LINE SY-TABIX + 1.
      READ TABLE GT_ITAB INTO LW_ITAB INDEX LV_LINE.
      IF SY-SUBRC 0.
        GW_ITAB-DAY LW_ITAB-BLDAT GW_ITAB-BLDAT.
      ELSE.
        "当处于内表最后一行时候,取值失败,计息天数为当月总天数 - 当前日期 + 1
        CLEAR LV_LASTDAY.
        CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
          EXPORTING
            I_DATE GW_ITAB-BLDAT
          IMPORTING
            E_DATE LV_LASTDAY.
        GW_ITAB-DAY LV_LASTDAY GW_ITAB-BLDAT + 1.
      ENDIF.
      "第二行开始的余额要根据第一行的余额 + 借方 - 贷方 得到
      CLEAR LW_ITAB.
      LV_LINE LV_LINE 2."上一行
      READ TABLE GT_ITAB INTO LW_ITAB INDEX LV_LINE.
      IF SY-SUBRC 0.
        GW_ITAB-DMBTR LW_ITAB-DMBTR + GW_ITAB-DMBTRS GW_ITAB-DMBTRH.
        GW_ITAB-LIXI GW_ITAB-DMBTR * GW_ITAB-DAY * GW_ITAB-RATE / 30 + LW_ITAB-LIXI.
      ENDIF.
    ENDIF.

    MODIFY GT_ITAB FROM GW_ITAB.
  ENDLOOP.
1 0
原创粉丝点击