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.