SAP/ABAP 코드

(ABAP 코드) 금액 총 합계 (DATA_CHANGED_FINISHED)

haramang 2021. 10. 28. 17:49

  DATA: ls_modi    TYPE lvc_s_modi.              " Modified Cells
  DATA: lv_stbl    TYPE lvc_s_stbl.              " Row, Column 변수 ( Stable )
  DATA: lv_wog     TYPE c LENGTH 3 VALUE 'WOG'.  " 필드 이름 WOG 저장
  DATA: lv_mon_cnt TYPE n LENGTH 2 VALUE '01'.   " 월 카운터

  FIELD-SYMBOLS: <fs_val> TYPE any.              " 필드심볼

* 현재 Cell이 수정되었는지 확인
  CHECK pe_modified IS NOT INITIAL.

* 수정된 Cells LOOP - 월 필드만 LOOP
  LOOP AT pt_good_cells INTO ls_modi WHERE fieldname = 'WOG01'
                                        OR fieldname = 'WOG01'
                                        OR fieldname = 'WOG02'
                                        OR fieldname = 'WOG03'
                                        OR fieldname = 'WOG04'
                                        OR fieldname = 'WOG05'
                                        OR fieldname = 'WOG06'
                                        OR fieldname = 'WOG07'
                                        OR fieldname = 'WOG08'
                                        OR fieldname = 'WOG09'
                                        OR fieldname = 'WOG10'
                                        OR fieldname = 'WOG11'
                                        OR fieldname = 'WOG12'.



    " 변경 된 라인을 비용처리계획 테이블로 부터 읽음
    READ TABLE gt_t_plan INTO gs_t_plan INDEX ls_modi-row_id.

    " 데이터가 존재할 경우,
    IF sy-subrc EQ 0.

      " 비용처리계획 데이터의 해당 월을 필드심볼에 지정
      ASSIGN COMPONENT ls_modi-fieldname OF STRUCTURE gs_t_plan TO <fs_val>.

      " 값을 저장
      <fs_val> = ls_modi-value.
      UNASSIGN <fs_val>.

      " 총계를 0로 세팅 - 하지 않으면, 동일한 셀에 값을 붙여넣으면 총합이 계속 더해짐
      gs_t_plan-wog_sum = 0.

      " 12번 loop - 12개월
      DO 12 TIMES.

        " 1월부터 12월까지의 금액을 더하여 총계 세팅
        ASSIGN COMPONENT lv_wog && lv_mon_cnt OF STRUCTURE gs_t_plan TO <fs_val>.
        IF <fS_VAL> IS NOT ASSIGNED.
          EXIT.
        ENDIF.

        gs_t_plan-wog_sum = gs_t_plan-wog_sum + <fs_val>.
        lv_mon_cnt = lv_mon_cnt + 1.
        UNASSIGN <fs_val>.

      ENDDO.

      " 월 카운터를 1월로 다시 세팅
      lv_mon_cnt = '01'.

      " 변경된 값 수정
      MODIFY gt_t_plan FROM gs_t_plan INDEX ls_modi-row_id.

    ENDIF.

    CLEAR: gs_t_plan, ls_modi.





  ENDLOOP.


* ALV 데이터 새로고침
  PERFORM refresh_alv       USING go_grid gs_layo.

  " 저장했던 셀 위치로 세팅
  CALL METHOD go_grid->set_current_cell_via_id
    EXPORTING
      is_row_id    = gs_row
      is_column_id = gs_col.