ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

     

     

     

Designed by Tistory.