-
[ABAP] #26 ALV ContainerSAP/ABAP 2026. 1. 10. 22:48
Container ALV
ALV를 화면 전체(Full Screen)가 아닌 특정 영역에 배치해서 출력하기 위해 사용하는 컨테이너 객체들이다.
주로 다음과 같은 화면에서 사용된다.
- Module Pool (Dialog Program)
- Report + Screen
- Subscreen
- Tabstrip
- Split 화면 구성
※ Full Screen ALV(REUSE_ALV_GRID_DISPLAY)와 달리
CL_GUI_ALV_GRID + Container 조합은 화면 레이아웃을 자유롭게 구성할 수 있다.
1. Custom Container
- CL_GUI_CUSTOM_CONTAINER
개념
- Screen Painter에서 생성한 Custom Control 영역을 부모로 사용하는 컨테이너
- ALV를 정해진 좌표·크기 안에 정확히 배치할 수 있음
- 화면 설계 중심의 ALV 출력 방식
특징
- Screen Painter 필수
- 위치 / 크기를 화면에서 직접 설계
- 가장 많이 사용되는 컨테이너
- 아래 화면 요소들과 자연스럽게 결합됨
- Subscreen
- Tabstrip
- Input Field + ALV 혼합 화면
- 화면 리사이즈 시 자동 조정 가능 (Resizing 옵션)
2. Docking Container
- CL_GUI_DOCKING_CONTAINER
개념
- Screen 전체 기준으로 상 / 하 / 좌 / 우 중 한 방향에 도킹
- Custom Control 없이 코드만으로 영역 생성
- 메인 화면 + 보조 화면 구조에 적합
특징
- Screen Painter 불필요 ❌
- 위치를 SIDE 옵션으로 지정
- 크기를 코드로 제어 (EXTENSION 또는 RATIO)
- 화면 크기 변경 시 자동 조정
- 리포트 프로그램에서도 많이 사용됨

DATA: go_docking TYPE REF TO cl_gui_docking_container, go_alv TYPE REF TO cl_gui_alv_grid. " Docking Container 생성 " CREATE OBJECT go_docking EXPORTING side = cl_gui_docking_container=>dock_at_bottom extension = 300 repid = sy-repid dynnr = sy-dynnr. " Docking Container에 ALV 생성 " CREATE OBJECT go_alv EXPORTING i_parent = go_docking. "Data display " CALL METHOD go_alv->set_table_for_first_display ... CHANGING it_outtab = gt_data .cl_gui_docking_container의 출력 위치 속성
cl_gui_docking_container=>dock_at_top " 화면 상단에 위치 " cl_gui_docking_container=>dock_at_bottom " 화면 하단에 위치 " cl_gui_docking_container=>dock_at_left " 화면 왼쪽에 위치 " cl_gui_docking_container=>dock_at_right " 화면 오른쪽에 위치 "3. Splitter Container
- CL_GUI_SPLITTER_CONTAINER
개념
- 하나의 컨테이너 영역을 행(Row) / 열(Column) 단위로 분할
- 분할된 각 영역에 서로 다른 컨테이너 또는 ALV 배치
- 단독 사용 X → 반드시 부모 컨테이너 필요 (Custom Container, Docking Container 둘 다 가능)
특징
- 다중 ALV 화면 구성 가능
- 사용자가 마우스로 영역 크기 조절 가능
- 각 Cell은 CL_GUI_CONTAINER처럼 사용
- 복잡한 화면 구성에 필수적인 컨테이너

DATA: go_docking TYPE REF TO cl_gui_docking_container, " 기존에 도킹컨테이너 영역을 나눌 splitter 생성 " go_splitter TYPE REF TO cl_gui_splitter_container, go_cont_l TYPE REF TO cl_gui_container, go_cont_r TYPE REF TO cl_gui_container, go_alv_l TYPE REF TO cl_gui_alv_grid, go_alv_r TYPE REF TO cl_gui_alv_grid. " Container 영역 분할 (1행 2열로) " CREATE OBJECT go_splitter EXPORTING parent = go_cont rows = 1 columns = 2. " 분할된 영역의 Container를 각각 가져오기 " CALL METHOD go_splitter->get_container EXPORTING row = 1 column = 1 RECEIVING container = go_cont_l. CALL METHOD go_splitter->get_container EXPORTING row = 1 column = 2 RECEIVING container = go_cont_r. " 각 영역에 ALV 배치 " CREATE OBJECT go_alv_l EXPORTING i_parent = go_cont_l. CREATE OBJECT go_alv_r EXPORTING i_parent = go_cont_r.
구조 계층
Screen └─ Parent Container (Custom / Docking) └─ Splitter Container ├─ Cell Container 1 → ALV └─ Cell Container 2 → ALV즉, Splitter는 레이아웃 분할 담당
실제 화면 기준점은 Custom / Docking Container 이다.
'SAP > ABAP' 카테고리의 다른 글
[ABAP] #28 BDC & Background Job (0) 2026.01.11 [ABAP] #27 프로그램 호출과 데이터 전달 (0) 2026.01.10 [ABAP] #25 ALV의 Event Class (0) 2026.01.10 [ABAP] #24 Report Program - ALV (3) (0) 2026.01.10 [ABAP] #23 Report Program - ALV (2) (1) 2026.01.05