ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 8. 9주차 과제 - COLLECT
    SAP/과제 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 기능을 수행.

     

     

     

     

     

Designed by Tistory.