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
복사