안녕하세요 이번 포스팅은
ABAP 중에 가장 많이 사용하는 ALV 출력하기 입니다.
도킹 / 스플릿 도 있지만 이번에는
가장 기초인 Custom Container 를 이용해서 ALV를 출력하겠습니다.
결과화면
ㄴSCARR 테이블을 그대로 출력하는 소스입니다.

코드
메인

아밥 이벤트들이 있습니다.
해당하는 개념들은 따로 포스팅으로 정리하겠습니다.
*&---------------------------------------------------------------------*
*& Report ZALV_BASIC
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZALV_BASIC.
INCLUDE ZALV_BASIC_TOP.
INCLUDE ZALV_BASIC_SCR.
INCLUDE ZALV_BASIC_C01.
INCLUDE ZALV_BASIC_O01.
INCLUDE ZALV_BASIC_I01.
INCLUDE ZALV_BASIC_F01.
*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*
* INITIALIZATION
*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*
INITIALIZATION.
*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*
* AT SELECTION-SCREEN OUTPUT
*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*
AT SELECTION-SCREEN OUTPUT.
*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*
* AT SELECTION-SCREEN
*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*
AT SELECTION-SCREEN.
*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*
* START-OF-SELECTION
*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*
START-OF-SELECTION.
PERFORM SELECT_DATA.
*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*
* END-OF-SELECTION.
*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*
END-OF-SELECTION.
CALL SCREEN 0100.
TOP - 변수들이 선언되어있는 곳

*&---------------------------------------------------------------------*
*& Include ZALV_BASIC_TOP
*&---------------------------------------------------------------------*
TABLES : SCARR.
DATA : GS_SCARR LIKE SCARR,
GT_SCARR LIKE TABLE OF GS_SCARR.
DATA : GR_GRID TYPE REF TO CL_GUI_ALV_GRID,
GR_CON1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA : GS_VARIANT TYPE DISVARIANT.
DATA : GS_LAYOUT TYPE LVC_S_LAYO.
DATA : OK_CODE LIKE SY-UCOMM.
SCR
SCR의 경우 Selection Screen 관련된 코드들이 있습니다.
하지만 여기에서는 Selcetion - Screen을 만들지 않아 소스가 없습니다.
또한 TOP에 같이 적는 경우도 있습니다
.
이건 개발자 취향인 거 같습니다.
저는 개인적으로 분할해두는 걸 좋아해서 따로 분리합니다.
C01
클래스 관련한 소스들을 모아두빈다.
여기서는 핫스팟 / 더블클릭 등 이벤트를 넣지 않았기 떄문에 아무런 소스가 없습니다.
O01
PBO 입니다.
Screen 이 나오기 전에 작동하는 로직을 모아둡니다.
나중에 100번 화면을 만들면 Flow Logic 이 존재하는데 거기 넣어둡니다
.플로우 로직에서는 로직을 추가할 수 없습니다. - MODULE 로 추가해줌
밑에 코드를 누면 OK_CODE라는 유저의 Fcuntion Code를 저장하는 변수를 Clear 해주는 로직 / Status라고 화면에 제목
그리고 어플리케이션 툴바 관련된 로직들을 넣을 수 있습니다.

*&---------------------------------------------------------------------*
*& Include ZALV_BASIC_O01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'PF_0100'.
SET TITLEBAR 'TT_0100'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module CLEAR_OK_CODE OUTPUT
*&---------------------------------------------------------------------*
MODULE clear_ok_code OUTPUT.
CLEAR : OK_CODE.
ENDMODULE.
I01
PAI 라고 화면이 나오고 버튼을 누르거나 거기서 유저가 어떤 이벤트를 작동시킬 때 넣어두는 로직들입니다.

*&---------------------------------------------------------------------*
*& Include ZALV_BASIC_I01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
MODULE exit INPUT.
CASE OK_CODE.
WHEN 'BACK' OR 'CANC'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
F01
PERFORM 문을 모아둔 곳입니다.
가장 소스가 긴 곳입니다.
*&---------------------------------------------------------------------*
*& Include ZALV_BASIC_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form SELECT_DATA
*&---------------------------------------------------------------------*
FORM select_data .
" 인터널 테이블 초기화
REFRESH GT_SCARR.
" 데이터 가져오기
SELECT CARRID
CARRNAME
CURRCODE
URL
FROM SCARR
INTO CORRESPONDING FIELDS OF TABLE GT_SCARR.
ENDFORM.
*&---------------------------------------------------------------------*
*& Module INIT_ALV OUTPUT
*&---------------------------------------------------------------------*
MODULE init_alv OUTPUT.
IF GR_GRID IS INITIAL.
PERFORM SET_VARIANT.
PERFORM SET_LAYOUT.
" 컨테이너 생성
PERFORM CREATE_CONTAINER.
" ALV 컨테이너 생성
PERFORM CREAET_ALV.
" ALV 생성
PERFORM DISPLAY_ALV.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form SET_VARIANT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM set_variant .
CLEAR : GS_VARIANT.
GS_VARIANT-HANDLE = '1'.
GS_VARIANT-REPORT = SY-REPID.
GS_VARIANT-USERNAME = SY-UNAME.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_LAYOUT
*&---------------------------------------------------------------------*
FORM set_layout .
CLEAR : GS_LAYOUT.
GS_LAYOUT-SEL_MODE = 'D'.
GS_LAYOUT-ZEBRA = 'X'.
GS_LAYOUT-CWIDTH_OPT = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CREATE_CONTAINER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM create_container .
CREATE OBJECT GR_CON1
EXPORTING
CONTAINER_NAME = 'CONT'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CREAET_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM creaet_alv .
CREATE OBJECT GR_GRID
EXPORTING
I_PARENT = GR_CON1.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM display_alv .
CALL METHOD GR_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_STRUCTURE_NAME = 'SCARR' " Internal Output Table Structure Name
IS_VARIANT = GS_VARIANT " Layout
I_SAVE = 'A' " Save Layout
I_DEFAULT = 'X' " Default Display Variant
IS_LAYOUT = GS_LAYOUT " Layout
CHANGING
IT_OUTTAB = GT_SCARR.
ENDFORM.
100번 화면

위에서 말한 PBO 와 PAI 로직들이 모인 곳입니다.

Custome Container 는 화면에다가 컨테이너를 그려줘야하고

해당 버튼을 눌러서 그려줍니다.
그리고 더블클릭을 하면 이름을 넣어 줄 수 있습니다.
해당하는 부분을 컨테이너 생성할 때 넣어줘야합니다.


그리고 100번 화면에 요소리스트에

해당하는 OK_CODE를 넣어줘야 뒤로가기나 다른 이벤트들이 작동합니다.
아까 위에 PBO에 나온 부분인데

일단 STATUS를 통해 뒤로가기 / 취소하기 버튼을 추가할 수 있습니다.

여기서 선언을 한뒤에 PAI에 저기 화면에 적어둔 BACK / EXIT / CANC 을 이용해 로직을 적습니다.
그리고 해당 버튼을 더블클릭해서 기능유형을 명령어로 해줘야합니다. 저기 3개만 BACK은 안하시는분들도 있습니다.

이렇게 설정하고

해당 키워드를 씁니다.
저 키워드를 쓴다는 건 다른 로직들은 무시하고 그냥 나가겠다라는 뜻입니다.
그리고 TT_0100 은 ALV 화면에 제목을 적습니다.


여기에 해당하는 부분입니다.
ALV 구조를 보면 아시겠지만

ALV를 생성할 때 컨테이너 생성하고

GR_CON1이라는 컨테이너 객체를 생성 아까 스크린 100번 화면에 커스텀 컨테이너 영역과 매핑

그 후 ALV 객체 GR_GRID에 위에서 생성한 컨테이너 GR_CON1과 연결해줍니다.

생성된 ALV 객체를 SET_TABLE_FOR_FIRST_DISPLAY 메소드를 이용해 ALV를 출력해줍니다.
저기는 제일 간단한 파라미터만 쓴건데 요액하자면 ALV 필드 카탈로그들을 아밥디셕너리 'SCARR' 를 참조해서 만들고
GS_VARIANT 라는 변수를 사용해 ALV VARIANT 설정 , GS_LAYOUT 변수를 사용해 LAYOUT 지정
IT_OUTTAB에 매핑된 변수는 출력할 데이터들입니다.
혹시 모르시는 부분이 있으시면 댓글 남겨주시면 답변 드리겠습니다.
감사합니다.
'SAP > ABAP' 카테고리의 다른 글
| [SAP ABAP] 현재월 첫번째 날 , 마지막 날 구하는 방법 (0) | 2025.12.06 |
|---|---|
| [ABAP] ALV 출력하기 - Docking Container 이용하기 (0) | 2025.11.22 |
| [SAP] ALV 개념 및 구조 알아보기 (0) | 2025.09.07 |
| [ABAP] 시스템 변수 SY-INDEX 와 SY-TABIX 의 차이 (3) | 2025.08.12 |
| SAP ABAP 스크린페인터(Layout) Input-field 별표(*) 나오게 하는 방법 (0) | 2025.07.28 |