SAP스터디/ABAP 스터디_240421

[2일차] ALV 구조 이해하기

Sally_민지 2024. 4. 29. 10:49

1.REPORT

 

1.1 DATA 선언부

 

tables

해당 테이블에서 가져오는 칼럼 값 

인터널 테이블 까지

 

1.1.1 STATE OF SELECTION

1.1.1.1 PERFORM*

1.1.1.1.1 FORM

선언한 PERFORM을 설명하는 FORM 구문에 대한 것이 나옴



*PERFORM  -: 서브 루틴,  PERFORM의 목적은 1) 소스를 하나로 묶고 2) 재사용성 3) PERFORM USING

참고로 다른 Program에도 쓴다고 하면 Perform 보다는 include문 쓰는 것이 맞음

data 선언부와 perform을 연결하는 

 

 

 

데이터 선언

 

참조로 가져올 standard 테이블 상 데이터 선언하고

type pool을 통해 매개 변수들을 가져오고

alv 리포트에 보여줄 테이블 구조 만든다.

 

start-of-selection

perform 구문을 선언하는데

이 프로그램에서만 쓰이는 구문으로 

1.data retrieval

원래의 standard table에서 칼럼 가져오는 internal table 하나 만들고

 

2.build fieldcatalog

필드 카탈로그에 필드별로 데이터 타입등 선언하는 거 하나 만들고

 

3.필드카탈로그 레이아웃 만든 다음에

카탈로그의 레이아웃을 선언하는데 ( 이때 인풋 허용하거나 열 너비를 설정하는 가 등이 포함됨)

 

4.그 레이아웃을 리포트할 수 있는 펑션 콜

 

 

 

 

*&---------------------------------------------------------------------*
*& Report ZTEST_SBOOK
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_SBOOK.

TABLES:SBOOK.
"Types

TYPES: BEGIN OF t_sbook,
  mandt tYPE Sbook-MANDT,
  fldate type sbook-fldate,
  bookid type sbook-bookid,
  customid type sbook-customid,
  class type sbook-class,
  order_date type sbook-order_date,
  CARRID TYPE Sbook-CARRID,
  connid TYPE Sbook-CONNID,
  smoker type sbook-smoker,
  luggweight type sbook-luggweight,
  wunit type sbook-wunit,
 END OF t_sbook.


"Internal table
DATA:
      i_SBOOK TYPE STANDARD TABLE OF t_SBOOK.

*&---------------------------------------------------------------------*
* ALV Declarations
*----------------------------------------------------------------------*
* Types Pools
TYPE-POOLS:
   slis.
* Types
TYPES:
   t_fieldcat         TYPE slis_fieldcat_alv,
   t_events           TYPE slis_alv_event,
   t_layout           TYPE slis_layout_alv.
* Workareas
DATA:
   w_fieldcat         TYPE t_fieldcat,
   w_events           TYPE t_events,
   w_layout           TYPE t_layout.
* Internal Tables
DATA:
   i_fieldcat         TYPE STANDARD TABLE OF t_fieldcat,
   i_events           TYPE STANDARD TABLE OF t_events.
*&---------------------------------------------------------------------*
*&    start of selection
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM get_data.

*&---------------------------------------------------------------------*
*&    end-of-selection.
*&---------------------------------------------------------------------*
END-OF-SELECTION.

  PERFORM build_fieldcatlog.
  PERFORM build_events.
  PERFORM build_layout.
  PERFORM list_display.
*&---------------------------------------------------------------------*
*&      Form  get_data
*&---------------------------------------------------------------------*
FORM get_data .

  SELECT mandt
         carrid
         connid
         smoker
         luggweight
         wunit
    FROM sbook
    INTO TABLE i_sbook
    UP TO 30 ROWS.

ENDFORM.                    " get_data
*&---------------------------------------------------------------------*
*&      Form  build_fieldcatlog
*&---------------------------------------------------------------------*
FORM build_fieldcatlog .
  CLEAR:w_fieldcat,i_fieldcat[].

  PERFORM build_fcatalog USING:
           'MANDT' 'I_SBOOK' 'MANDT',
           'CARRID' 'I_SBOOK' 'CARRID',
           'CONNID' 'I_SBOOK' 'CONNID',
           'SMOKER' 'I_SBOOK' 'SMOKER',
           'LUGGWEIGHT' 'I_SBOOK' 'LUGGWEIGHT',
           'WUNIT' 'I_SBOOK' 'WUNIT'.

ENDFORM.                    "BUILD_FIELDCATLOG
*&---------------------------------------------------------------------*
*&      Form  BUILD_FCATALOG
*&---------------------------------------------------------------------*
FORM build_fcatalog USING l_field l_tab l_text.

  w_fieldcat-fieldname      = l_field.
  w_fieldcat-tabname        = l_tab.
  w_fieldcat-seltext_m      = l_text.

  APPEND w_fieldcat TO i_fieldcat.
  CLEAR w_fieldcat.

ENDFORM.                    " build_fieldcatlog
*&---------------------------------------------------------------------*
*&      Form  build_events
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM build_events.
  CLEAR :
        w_events, i_events[].
  w_events-name = 'TOP_OF_PAGE'."Event Name
  w_events-form = 'TOP_OF_PAGE'."Callback event subroutine
  APPEND w_events TO i_events.
  CLEAR  w_events.

ENDFORM.                    "build_events
*&---------------------------------------------------------------------*
*&      Form  build_layout
*&---------------------------------------------------------------------*
FORM build_layout .

  w_layout-colwidth_optimize = 'X'.
  w_layout-zebra             = 'X'.

ENDFORM.                    " build_layout
*&---------------------------------------------------------------------*
*&      Form  list_display
*&---------------------------------------------------------------------*
FORM list_display .
  DATA:
        l_program TYPE sy-repid.
  l_program = sy-repid.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = l_program
      is_layout          = w_layout
      it_fieldcat        = i_fieldcat
      it_events          = i_events
    TABLES
      t_outtab           = i_SBOOK
    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.                    " list_display
*&---------------------------------------------------------------------*
*&      Form  top_of_page
*&---------------------------------------------------------------------*
FORM top_of_page.
  DATA :
   li_header TYPE slis_t_listheader,
   w_header  LIKE LINE OF li_header.
  DATA:
        l_date TYPE char10.
  WRITE sy-datum TO l_date.
  w_header-typ  = 'H'.
  CONCATENATE sy-repid ':' 'From Date' l_date INTO w_header-info SEPARATED BY space.
  APPEND w_header TO li_header.
  CLEAR w_header.

  w_header-typ  = 'S'.
  w_header-info = sy-title.
  APPEND w_header TO li_header.
  CLEAR w_header.

  w_header-typ  = 'A'.
  w_header-info = sy-uname.
  APPEND w_header TO li_header.
  CLEAR w_header.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = li_header.

ENDFORM.                    "top_of_page