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