-
8. 9주차 과제 - COLLECTSAP/과제 2025. 8. 1. 16:41
과제내용
- sflight 테이블의 데이터를 집계하여 출력하기.
입력화면 필드
- CARRID
출력화면 추가 필드- CARRID
- CONNID
- PRICE
- CURRENCY
- SEATSMAX
- SEATSOCC
결과 화면
* 소스코드
*&---------------------------------------------------------------------*
*& Report Z9WEEK_REP
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Z9WEEK_REP.
TABLES: sflight.
TYPE-POOLS: slis. "ALV Declarations
*Data Declaration
*----------------
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,
seatsocc TYPE sflight-seatsocc,
END OF t_sflight.
DATA: it_sflight TYPE STANDARD TABLE OF t_sflight INITIAL SIZE 0,
wa_sflight TYPE t_sflight.
DATA: it_collect TYPE STANDARD TABLE OF t_sflight INITIAL SIZE 0,
wa_collect TYPE t_sflight.
*ALV data declarations
DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,
gd_tab_group TYPE slis_t_sp_group_alv,
gd_layout TYPE slis_layout_alv,
gd_repid LIKE sy-repid.
*Sort options
DATA: gt_sort TYPE slis_t_sortinfo_alv.
DATA: wa_sort TYPE slis_sortinfo_alv.
DATA : t TYPE slis_t_sp_group_alv .
************************************************************************
*Start-of-selection.
SELECTION-SCREEN BEGIN OF BLOCK part1 WITH FRAME TITLE text-001.
SELECT-OPTIONS s_carrid FOR sflight-carrid.
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
*&---------------------------------------------------------------------*
* Build Fieldcatalog for ALV Report
*----------------------------------------------------------------------*
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-col_pos = 1.
fieldcatalog-lzero = 'X'.
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 = 'Local currency of airline'.
fieldcatalog-col_pos = 3.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'SEATSMAX'.
fieldcatalog-seltext_m = 'Maximum capacity in economy class'.
fieldcatalog-col_pos = 4.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'SEATSOCC'.
fieldcatalog-seltext_m = 'Occupied seats in economy class'.
fieldcatalog-col_pos = 5.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
ENDFORM. " BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*& Form BUILD_LAYOUT
*&---------------------------------------------------------------------*
* Build layout for ALV grid report
*----------------------------------------------------------------------*
FORM build_layout.
gd_layout-no_input = 'X'.
gd_layout-colwidth_optimize = 'X'.
gd_layout-zebra = 'X'.
* gd_layout-info_fieldname = 'LINE_COLOR'.
* gd_layout-def_status = 'A'.
ENDFORM. " BUILD_LAYOUT
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
* Display report using ALV grid
*----------------------------------------------------------------------*
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[]
it_sort = gt_sort[]
i_save = 'X'
TABLES
t_outtab = it_collect
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
*& Form DATA_RETRIEVAL
*&---------------------------------------------------------------------*
* Retrieve data form EKPO table and populate itab it_ekko
*----------------------------------------------------------------------*
FORM data_retrieval.
SELECT CARRID CONNID PRICE CURRENCY SEATSMAX SEATSOCC
FROM sflight
INTO TABLE it_sflight
WHERE carrid in s_carrid.
LOOP AT it_sflight INTO wa_sflight.
COLLECT wa_sflight INTO it_collect.
ENDLOOP.
ENDFORM. " DATA_RETRIEVAL
COLLECT 구문
COLLECT wa INTO itab.
- 인터널 테이블의 숫자 타입 칼럼을 합산하는 기능을 수행.
key 값을 기준으로 하여 합산을 수행하며, key 값이 없는 테이블일 경우 char 타입 컬럼들을 기준으로 합산 한다.
- key 값을 제외한 컬럼들은 Numberic Type(f, i, p)으로 선언되어야 한다.
- 같은 key 값이 있을 때는 숫자 타입 컬럼을 합산하고, 없을 때에는 APPEND 기능을 수행.
'SAP > 과제' 카테고리의 다른 글
9. 10주차 과제 - SUM (0) 2025.08.19 10. 11주차 과제 - 테이블 생성 (0) 2025.08.19 7. 8주차 과제 - 항공사 예약 조회 프로그램 #2 (0) 2025.07.21 6. 7주차 과제 - 항공사 예약 조회 프로그램 (0) 2025.07.10 5. 6주차 과제 - 검색 화면 구현 (0) 2025.07.02