Search
✏️

7-1. ABAP 반복문 & COLLECT & SORT 연습

SFLIGHT 테이블 집계

SFLIGHT 테이블을 사용
CARRID (항공사 코드)
CONNID (연결 ID)
PRICE (가격)
CURRENCY (통화)
SEATSMAX (최대 좌석 수)
COLLECT 문을 사용하여 동일한 항공사 코드(CARRID)와 연결 ID(CONNID)에 대한 PRICE와 SEATSMAX 필드를 집계
SUM을 사용하여 특정 기준에 따라 데이터를 더해보기
*&---------------------------------------------------------------------* *& Report Z7WEEK_ASS01 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT Z7WEEK_ASS01. TABLES: sflight. TYPE-POOLS: slis. TYPES: BEGIN OF t_sflight, carrid TYPE sflight-carrid, connid TYPE sflight-connid, price TYPE sflight-price, currency TYPE sflight-currency, seatsmax TYPE sflight-seatsmax, END OF t_sflight. DATA: it_sflight TYPE SORTED TABLE OF t_sflight WITH NON-UNIQUE KEY carrid connid, wa_sflight TYPE t_sflight. DATA: it_collect TYPE STANDARD TABLE OF t_sflight INITIAL SIZE 0, wa_collect TYPE t_sflight. DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE, gd_layout TYPE slis_layout_alv, gd_repid LIKE sy-repid. SELECTION-SCREEN BEGIN OF BLOCK part1 WITH FRAME TITLE text-001. SELECT-OPTIONS: s_carrid FOR sflight-carrid, s_connid FOR sflight-connid. SELECTION-SCREEN END OF BLOCK part1. START-OF-SELECTION. PERFORM data_retrieval. PERFORM build_fieldcatalog. PERFORM build_layout. PERFORM display_alv_report. *&---------------------------------------------------------------------* *& Form BUILD_FIELDCATALOG *&---------------------------------------------------------------------* * ALV 필드 카탈로그 설정 *----------------------------------------------------------------------* FORM build_fieldcatalog. fieldcatalog-fieldname = 'CARRID'. fieldcatalog-seltext_m = 'Airline Code'. fieldcatalog-col_pos = 0. fieldcatalog-outputlen = 10. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'CONNID'. fieldcatalog-seltext_m = 'Flight Connection Number'. fieldcatalog-lzero = 'X'. fieldcatalog-col_pos = 1. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'PRICE'. fieldcatalog-seltext_m = 'Airfare'. fieldcatalog-col_pos = 2. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'CURRENCY'. fieldcatalog-seltext_m = 'Currency'. fieldcatalog-col_pos = 3. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'SEATSMAX'. fieldcatalog-seltext_m = 'Max Seats'. fieldcatalog-col_pos = 4. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. ENDFORM. " BUILD_FIELDCATALOG *&---------------------------------------------------------------------* *& Form BUILD_LAYOUT *&---------------------------------------------------------------------* * ALV 레이아웃 설정 *----------------------------------------------------------------------* FORM build_layout. gd_layout-no_input = 'X'. gd_layout-colwidth_optimize = 'X'. gd_layout-zebra = 'X'. ENDFORM. " BUILD_LAYOUT *&---------------------------------------------------------------------* *& Form DISPLAY_ALV_REPORT *&---------------------------------------------------------------------* * ALV 그리드로 결과 표시 *----------------------------------------------------------------------* FORM display_alv_report. gd_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = gd_repid is_layout = gd_layout it_fieldcat = fieldcatalog[] i_save = 'X' TABLES t_outtab = it_collect EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE 'Error displaying ALV.' TYPE 'E'. ENDIF. ENDFORM. " DISPLAY_ALV_REPORT *&---------------------------------------------------------------------* *& Form DATA_RETRIEVAL *&---------------------------------------------------------------------* * SFLIGHT 테이블에서 데이터 조회 및 집계 *----------------------------------------------------------------------* FORM data_retrieval. SELECT carrid, connid, price, currency, seatsmax FROM sflight WHERE carrid IN @s_carrid AND connid IN @s_connid ORDER BY carrid, connid INTO TABLE @it_sflight. LOOP AT it_sflight INTO wa_sflight. COLLECT wa_sflight INTO it_collect. ENDLOOP. ENDFORM. " DATA_RETRIEVAL
ABAP
복사
*&---------------------------------------------------------------------* *& Report Z7WEEK_ASS02 *&---------------------------------------------------------------------* *& SFLIGHT 테이블 집계 SORTED TABLE, SUM 사용 *&---------------------------------------------------------------------* REPORT Z7WEEK_ASS02. TABLES: sflight. TYPE-POOLS: slis. TYPES: BEGIN OF t_sflight, carrid TYPE sflight-carrid, connid TYPE sflight-connid, price TYPE sflight-price, currency TYPE sflight-currency, seatsmax TYPE sflight-seatsmax, END OF t_sflight. DATA: it_sflight TYPE SORTED TABLE OF t_sflight WITH NON-UNIQUE KEY carrid connid, wa_sflight TYPE t_sflight. DATA: it_collect TYPE STANDARD TABLE OF t_sflight INITIAL SIZE 0, wa_collect TYPE t_sflight. DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE, gd_layout TYPE slis_layout_alv, gd_repid LIKE sy-repid. SELECTION-SCREEN BEGIN OF BLOCK part1 WITH FRAME TITLE text-001. SELECT-OPTIONS: s_carrid FOR sflight-carrid, s_connid FOR sflight-connid. SELECTION-SCREEN END OF BLOCK part1. START-OF-SELECTION. PERFORM data_retrieval. PERFORM build_fieldcatalog. PERFORM build_layout. PERFORM display_alv_report. *&---------------------------------------------------------------------* *& Form BUILD_FIELDCATALOG *&---------------------------------------------------------------------* * ALV 필드 카탈로그 설정 *----------------------------------------------------------------------* FORM build_fieldcatalog. fieldcatalog-fieldname = 'CARRID'. fieldcatalog-seltext_m = 'Airline Code'. fieldcatalog-col_pos = 0. fieldcatalog-outputlen = 10. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'CONNID'. fieldcatalog-seltext_m = 'Flight Connection Number'. fieldcatalog-lzero = 'X'. fieldcatalog-col_pos = 1. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'PRICE'. fieldcatalog-seltext_m = 'Airfare'. fieldcatalog-col_pos = 2. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'CURRENCY'. fieldcatalog-seltext_m = 'Currency'. fieldcatalog-col_pos = 3. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'SEATSMAX'. fieldcatalog-seltext_m = 'Max Seats'. fieldcatalog-col_pos = 4. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. ENDFORM. " BUILD_FIELDCATALOG *&---------------------------------------------------------------------* *& Form BUILD_LAYOUT *&---------------------------------------------------------------------* * ALV 레이아웃 설정 *----------------------------------------------------------------------* FORM build_layout. gd_layout-no_input = 'X'. gd_layout-colwidth_optimize = 'X'. gd_layout-zebra = 'X'. ENDFORM. " BUILD_LAYOUT *&---------------------------------------------------------------------* *& Form DISPLAY_ALV_REPORT *&---------------------------------------------------------------------* * ALV 그리드로 결과 표시 *----------------------------------------------------------------------* FORM display_alv_report. gd_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = gd_repid is_layout = gd_layout it_fieldcat = fieldcatalog[] i_save = 'X' TABLES t_outtab = it_collect EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE 'Error displaying ALV.' TYPE 'E'. ENDIF. ENDFORM. " DISPLAY_ALV_REPORT *&---------------------------------------------------------------------* *& Form DATA_RETRIEVAL *&---------------------------------------------------------------------* * SFLIGHT 테이블에서 데이터 조회 및 집계 *----------------------------------------------------------------------* FORM data_retrieval. SELECT carrid, connid, price, currency, seatsmax FROM sflight WHERE carrid IN @s_carrid AND connid IN @s_connid INTO TABLE @it_sflight. LOOP AT it_sflight INTO wa_sflight. AT END OF connid. SUM. APPEND wa_sflight TO it_collect. ENDAT. ENDLOOP. ENDFORM. " DATA_RETRIEVAL
ABAP
복사