-
3. 4주차 과제 - 서브토탈 구현SAP/과제 2025. 6. 27. 17:15
필수과제 내용
- SFLIGHT 테이블로 서브토탈 결과 조회하기
조건
CARRID key
CONNID key
PRICE =>>do_sum = 'X'.
CURRENCY =>> emphasize
PLANETYPE =>> emphasize
sort
CARRID => sub_tot up
CONNID =>> sub_tot up
결과
소스코드
*&---------------------------------------------------------------------*
*& Report Z2WEEK_ALV003
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Z2WEEK_ALV003.
TABLES: sflight.
TYPE-POOLS: slis. "ALV Declarations
*Data Declaration
*----------------
TYPES: BEGIN OF t_spfli,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
price TYPE sflight-price,
currency TYPE sflight-currency,
planetype TYPE sflight-planetype,
END OF t_spfli.
DATA: it_spfli TYPE STANDARD TABLE OF t_spfli INITIAL SIZE 0,
wa_spfli TYPE t_spfli.
*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,
gt_sort TYPE slis_t_sortinfo_alv,
gt_sort_In LIKE LINE OF gt_sort,
gd_repid LIKE sy-repid.
DATA : t TYPE slis_t_sp_group_alv .
************************************************************************
*Start-of-selection.
START-OF-SELECTION.
PERFORM data_retrieval.
PERFORM build_fieldcatalog.
PERFORM build_layout.
PERFORM build_sort.
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.
fieldcatalog-key = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'CONNID'.
fieldcatalog-seltext_m = 'Flight Connection Number'.
fieldcatalog-col_pos = 1.
fieldcatalog-lzero = 'X'.
fieldcatalog-key = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'PRICE'.
fieldcatalog-seltext_m = 'Airfare'.
fieldcatalog-col_pos = 3.
fieldcatalog-do_sum = 'X'.
fieldcatalog-cfieldname = 'currency'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'CURRENCY'.
fieldcatalog-seltext_m = 'Local currency of airline'.
fieldcatalog-col_pos = 4.
fieldcatalog-emphasize = 'C500'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'PLANETYPE'.
fieldcatalog-seltext_m = 'Aircraft Type'.
fieldcatalog-col_pos = 5.
fieldcatalog-emphasize = 'C500'.
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 BUILD_SORT
*&---------------------------------------------------------------------*
* Build Sort for ALV grid report
*----------------------------------------------------------------------*
FORM build_sort.
gt_sort_In-spos = '1'.
gt_sort_In-fieldname = 'CARRID'.
gt_sort_In-up = 'X'.
gt_sort_In-subtot = 'X'.
APPEND gt_sort_In TO gt_sort.
CLEAR gt_sort_in.
gt_sort_In-spos = '2'.
gt_sort_In-fieldname = 'CONNID'.
gt_sort_In-up = 'X'.
gt_sort_In-subtot = 'X'.
APPEND gt_sort_In TO gt_sort.
CLEAR gt_sort_in.
ENDFORM. " BUILD_SORT
*&---------------------------------------------------------------------*
*& 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_spfli
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.
DATA: lv_price_int TYPE i.
SELECT CARRID CONNID PRICE CURRENCY PLANETYPE
FROM sflight
INTO TABLE it_spfli.
ENDFORM. " DATA_RETRIEVAL
선택과제
- SBOOK 테이블로 서브토탈 구현
조건
CARRID
CONNID
LOCCURAM => DO_SUM
LOCCURKEY
SBOOK 테이블에는 데이터가 많기 때문에 UP TO 2000 ROWS 를 SQL문에 넣으면 범위가 줄어서 이렇게 하는걸 추천
레이아웃옵션
totals_only
totals_before_items
결과
소스코드
*&---------------------------------------------------------------------*
*& Report Z2WEEK_ALV003
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Z2WEEK_ALV003.
TABLES: SBOOK.
TYPE-POOLS: slis. "ALV Declarations
*Data Declaration
*----------------
TYPES: BEGIN OF t_spfli,
carrid TYPE sbook-carrid,
connid TYPE sbook-connid,
loccuram TYPE sbook-loccuram,
loccurkey TYPE sbook-loccurkey,
END OF t_spfli.
DATA: it_spfli TYPE STANDARD TABLE OF t_spfli INITIAL SIZE 0,
wa_spfli TYPE t_spfli.
*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,
gt_sort TYPE slis_t_sortinfo_alv,
gt_sort_In LIKE LINE OF gt_sort,
gd_repid LIKE sy-repid.
DATA : t TYPE slis_t_sp_group_alv .
************************************************************************
*Start-of-selection.
START-OF-SELECTION.
PERFORM data_retrieval.
PERFORM build_fieldcatalog.
PERFORM build_layout.
PERFORM build_sort.
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.
fieldcatalog-key = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'CONNID'.
fieldcatalog-seltext_m = 'Flight Connection Number'.
fieldcatalog-col_pos = 1.
fieldcatalog-lzero = 'X'.
fieldcatalog-key = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'LOCCURAM'.
fieldcatalog-seltext_m = 'Airfare'.
fieldcatalog-col_pos = 3.
fieldcatalog-do_sum = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'LOCCURKEY'.
fieldcatalog-seltext_m = 'Local currency of airline'.
fieldcatalog-col_pos = 4.
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'.
gd_layout-totals_only = 'X'.
gd_layout-totals_before_items = 'X'.
ENDFORM. " BUILD_LAYOUT
*&---------------------------------------------------------------------*
*& Form BUILD_SORT
*&---------------------------------------------------------------------*
* Build Sort for ALV grid report
*----------------------------------------------------------------------*
FORM build_sort.
gt_sort_In-spos = '1'.
gt_sort_In-fieldname = 'CARRID'.
gt_sort_In-up = 'X'.
gt_sort_In-subtot = 'X'.
APPEND gt_sort_In TO gt_sort.
CLEAR gt_sort_in.
ENDFORM. " BUILD_SORT
*&---------------------------------------------------------------------*
*& 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_spfli
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.
DATA: lv_price_int TYPE i.
SELECT CARRID CONNID LOCCURAM LOCCURKEY
UP TO 2000 ROWS
FROM sbook
INTO TABLE it_spfli.
ENDFORM. " DATA_RETRIEVAL'SAP > 과제' 카테고리의 다른 글
8. 9주차 과제 - COLLECT (0) 2025.08.01 7. 8주차 과제 - 항공사 예약 조회 프로그램 #2 (0) 2025.07.21 6. 7주차 과제 - 항공사 예약 조회 프로그램 (0) 2025.07.10 5. 6주차 과제 - 검색 화면 구현 (0) 2025.07.02 4. 5주차 과제 - 검색 화면 구현 (0) 2025.06.27