본문 바로가기
ABAP

Field-symbols 2

by clode 2023. 2. 16.
728x90
반응형

실습

  • Internal Table에 1월 ~ 12월 필드를 선언
  • 필드심볼을 활용하여 1월에서 12월 합계를 출력
"변수선언
DATA: BEGIN OF GS_DATA,
          MON01 TYPE I,
          MON02 TYPE I,
          MON03 TYPE I,
          MON04 TYPE I,
          MON05 TYPE I,
          MON06 TYPE I,
          MON07 TYPE I,
          MON08 TYPE I,
          MON09 TYPE I,
          MON10 TYPE I,
          MON11 TYPE I,
          MON12 TYPE I,
          END OF GS_DATA,
          GT_DATA LIKE TABLE OF GS_DATA.

 DATA: GV_SUM TYPE I,
       GV_FNAME TYPE CHAR20,
        GV_NUM(2) TYPE N.

FIELD-SYMBOLS: <FS_DATA> LIKE GS_DATA,
                <FS>.

"데이터 입력
CLEAR GS_DATA.
GS_DATA-MON01 = 10.
GS_DATA-MON02 = 20.
GS_DATA-MON03 = 30.
GS_DATA-MON04 = 40.
GS_DATA-MON05 = 50.
GS_DATA-MON06 = 60.
GS_DATA-MON07 = 60.
GS_DATA-MON08 = 50.
GS_DATA-MON09 = 40.
GS_DATA-MON10 = 30.
GS_DATA-MON11 = 20.
GS_DATA-MON12 = 10.
APPEND GS_DATA TO GT_DATA.

CLEAR GS_DATA.
GS_DATA-MON01 = 10.
GS_DATA-MON02 = 20.
GS_DATA-MON03 = 30.
GS_DATA-MON04 = 40.
GS_DATA-MON05 = 50.
GS_DATA-MON06 = 60.
GS_DATA-MON07 = 70.
GS_DATA-MON08 = 80.
GS_DATA-MON09 = 90.
GS_DATA-MON10 = 10.
GS_DATA-MON11 = 20.
GS_DATA-MON12 = 30.
APPEND GS_DATA TO GT_DATA.

"월별 합계 계산
LOOP AT GT_DATA ASSIGNING <FS_DATA>.  
"1번째 루프때는 <FS_DATA>가 GT_DATA의 첫번째라인
  CLEAR GV_SUM.
  DO 12 TIMES.
   GV_NUM = SY-INDEX.
   CONCATENATE 'MON' GV_NUM INTO GV_FNAME.
   ASSIGN COMPONENT GV_FNAME OF STRUCTURE <FS_DATA> TO <FS>.
   "1번째 줄일때 GV_FNAME은 MON01이 되고
   " 첫번째라인의(FS_DATA) MON01의 필드값이 <FS>가 된다.
   GV_SUM = GV_SUM + <FS>.
  ENDDO.

  WRITE: GV_SUM.
ENDLOOP.

gt_data에는 현재 두줄이 있다. 첫번째 루프를 돌땐 첫번째 라인을 읽어 fs_data는 gt_data의 첫번째 라인이 된다. 1번째 do일때 gv_fname은 mon01이 되고 첫번째 라인(fs_data)의 mon01의 필드값이 <fs>가 된다.

합계가 나온다

728x90
반응형

'ABAP' 카테고리의 다른 글

엑셀 업로드  (2) 2023.02.16
BDC 프로그램  (0) 2023.02.16
Field-symbols 1  (0) 2023.02.16
RFC 6  (0) 2023.02.16
RFC 5  (0) 2023.02.16

댓글