Programming/ABAP
FIELD-SYMBOL 예제 - 합계 구하기
_syd
2023. 8. 24. 23:05
문제
입력한 회계 년도에 해당하는 1월부터 입력 월까지의 합산을 구해 write 로 합산 금액을 출력한다.
*&---------------------------------------------------------------------*
*& Report ZRTEST_FS
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zrtest_fs MESSAGE-ID z000.
TYPES : BEGIN OF ts_sum.
INCLUDE TYPE ztfs_b00.
TYPES: sum TYPE ztfs_b00-tsl01,
END OF ts_sum.
DATA : gt_sum TYPE TABLE OF ts_sum,
gs_sum LIKE LINE OF gt_sum,
gv_sum TYPE ztfs_b00-tsl01,
gv_index TYPE n LENGTH 2,
gv_fname TYPE string.
FIELD-SYMBOLS : <fs_sum> TYPE any.
*--------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-s01.
PARAMETERS : pa_year TYPE ztfs_b00-gjahr DEFAULT sy-datum(4),
pa_month TYPE monat.
SELECTION-SCREEN END OF BLOCK b1.
*--------------------------------------------------------------------*
START-OF-SELECTION.
IF pa_month IS INITIAL.
MESSAGE s001 WITH TEXT-e01 DISPLAY LIKE 'E'. "입력 값 없을 경우
ELSE. "입력값 존재
*1)data 채우기
** 방법1. gt_sum 을 채운 후, READ TABLE 에서 조건 넣어 검색
* SELECT * FROM ztfs_b00 INTO CORRESPONDING FIELDS OF TABLE gt_sum.
** 방법2. 입력값을 조건으로 넣어 select single 로 gs_sum 만 채우기(best)
SELECT SINGLE * FROM ztfs_b00 INTO gs_sum
WHERE gjahr = pa_year.
*2) 합계 구하기
DO pa_month TIMES.
gv_index = sy-index.
** 방법1. index 활용해 필드 순서대로 합계 구하기
* READ TABLE gt_sum INTO gs_sum WITH KEY gjahr = pa_year.
ASSIGN COMPONENT gv_index + 2 OF STRUCTURE gs_sum TO <fs_sum> .
** 방법2. field name 활용해 합계 구하기
* CONCATENATE 'TSL' gv_index INTO gv_fname.
* gv_fname = 'TSL' && gv_index.
* ASSIGN COMPONENT gv_fname OF STRUCTURE gs_sum TO <fs_sum> .
gv_sum = gv_sum + <fs_sum>.
CLEAR : gv_fname, <fs_sum>.
ENDDO.
*3) 결과 출력
WRITE : gv_sum CURRENCY gs_sum-waers, gs_sum-waers.
ENDIF.
728x90