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