ABAP
GUI
Module Pool
SAP ABAP Splitter Container 완벽 가이드
cl_gui_splitter_container로 화면을 상하·좌우·중첩 분할하는 모든 방법
개요
SAP Module Pool 프로그램에서 하나의 화면을 여러 영역으로 나눌 때 cl_gui_splitter_container를 사용합니다. 이 클래스는 HTML의 grid/flex 레이아웃과 유사하게, rows × columns 격자로 화면을 분할하고 각 셀에서 컨테이너를 꺼내 자식 GUI 오브젝트(ALV Grid, Tree, Chart 등)를 붙이는 방식으로 동작합니다.
핵심 원칙: Splitter는 부모 컨테이너를 분할하는 도구입니다. 최상위 부모는 보통
cl_gui_docking_container 또는 SE51에서 정의한 cl_gui_custom_container입니다.
1. 기본 구조 이해
Splitter를 생성하면 rows × columns 개의 셀이 만들어집니다. get_container로 원하는 셀의 컨테이너 레퍼런스를 꺼내 사용합니다.
ABAP — 기본 상하 2분할
" 1) Splitter 오브젝트 생성 (부모 컨테이너에 붙임) CREATE OBJECT gcl_splitter EXPORTING parent = gcl_dock_container " 부모 컨테이너 rows = 2 " 행 개수 columns = 1 " 열 개수 EXCEPTIONS OTHERS = 1. " 2) 각 셀에서 컨테이너 레퍼런스 추출 gcl_splitter->get_container( EXPORTING row = 1 column = 1 RECEIVING container = gcl_top_con ). " 상단 gcl_splitter->get_container( EXPORTING row = 2 column = 1 RECEIVING container = lcl_bottom_con ). " 하단 " 3) 비율 설정 (합산 100 권장) gcl_splitter->set_row_height( id = 1 height = 20 ). " 상단 20% gcl_splitter->set_row_height( id = 2 height = 80 ). " 하단 80%
2. 비율 설정 메서드
행/열 크기는 절댓값(px)이 아닌 상대 비율입니다. 합산이 100이 되도록 설정하는 것이 일반적입니다.
| 메서드 | 파라미터 | 설명 |
|---|---|---|
set_row_height | id, height | id번째 행의 높이 비율 설정 |
set_column_width | id, width | id번째 열의 너비 비율 설정 나머지 열은 자동으로 채움 |
주의:
set_column_width는 지정한 열 하나만 설정하면 나머지가 자동으로 균등 배분됩니다. 모든 열을 명시적으로 설정하려면 각각 호출하세요.
3. 패턴별 전체 코드
패턴 A — 좌우 2분할 (트리 + 그리드)
ABAP — 좌우 2분할
DATA: lcl_lr_splitter TYPE REF TO cl_gui_splitter_container. CREATE OBJECT lcl_lr_splitter EXPORTING parent = lcl_bottom_con " 분할할 부모 컨테이너 rows = 1 columns = 2 EXCEPTIONS OTHERS = 1. lcl_lr_splitter->get_container( EXPORTING row = 1 column = 1 RECEIVING container = gcl_tree_con ). " 좌측: 트리 lcl_lr_splitter->get_container( EXPORTING row = 1 column = 2 RECEIVING container = gcl_right_con ). " 우측: 그리드 " 좌측 35%, 우측은 자동으로 65% lcl_lr_splitter->set_column_width( id = 1 width = 35 ).
패턴 B — 중첩 스플리터 (상단 Header + 하단 좌우 분할)
실무에서 가장 많이 쓰이는 구조입니다. 외부 스플리터로 상하를 나누고, 하단 컨테이너를 다시 내부 스플리터로 좌우로 분할합니다.
ABAP — 중첩 스플리터 전체 코드 (FORM create_splitter)
FORM create_splitter. DATA: lcl_bottom_con TYPE REF TO cl_gui_container, lcl_lr_splitter TYPE REF TO cl_gui_splitter_container. " ① 외부 스플리터: 상하 2분할 CREATE OBJECT gcl_splitter EXPORTING parent = gcl_dock_container rows = 2 columns = 1 EXCEPTIONS OTHERS = 1. gcl_splitter->get_container( EXPORTING row = 1 column = 1 RECEIVING container = gcl_top_con ). " 상단: HTML Doc 영역 gcl_splitter->get_container( EXPORTING row = 2 column = 1 RECEIVING container = lcl_bottom_con ). " 하단: 좌우 분할 예정 gcl_splitter->set_row_height( id = 1 height = 20 ). gcl_splitter->set_row_height( id = 2 height = 80 ). " ② 내부 스플리터: 하단을 좌우 2분할 (트리 35% / 그리드 65%) CREATE OBJECT lcl_lr_splitter EXPORTING parent = lcl_bottom_con rows = 1 columns = 2 EXCEPTIONS OTHERS = 1. lcl_lr_splitter->get_container( EXPORTING row = 1 column = 1 RECEIVING container = gcl_tree_con ). lcl_lr_splitter->get_container( EXPORTING row = 1 column = 2 RECEIVING container = gcl_right_con ). lcl_lr_splitter->set_column_width( id = 1 width = 35 ). ENDFORM.
패턴 C — 3중 중첩 (상단 Header + 하단 좌우 + 우측 상하 분할)
ZRE3FI0002에서 사용하는 구조입니다. 우측 영역을 다시 그리드/차트로 상하 분할합니다.
ABAP — 3중 중첩 전체 코드
FORM create_splitter. DATA: lcl_bottom_con TYPE REF TO cl_gui_container, lcl_lr_splitter TYPE REF TO cl_gui_splitter_container, lcl_right_splitter TYPE REF TO cl_gui_splitter_container. " ① 외부: 상단(20%) / 하단(80%) 분할 CREATE OBJECT gcl_splitter EXPORTING parent = gcl_dock_container rows = 2 columns = 1 EXCEPTIONS OTHERS = 1. gcl_splitter->get_container( EXPORTING row = 1 column = 1 RECEIVING container = gcl_top_con ). gcl_splitter->get_container( EXPORTING row = 2 column = 1 RECEIVING container = lcl_bottom_con ). gcl_splitter->set_row_height( id = 1 height = 20 ). gcl_splitter->set_row_height( id = 2 height = 80 ). " ② 중간: 하단을 좌(트리 35%) / 우(65%) 분할 CREATE OBJECT lcl_lr_splitter EXPORTING parent = lcl_bottom_con rows = 1 columns = 2 EXCEPTIONS OTHERS = 1. lcl_lr_splitter->get_container( EXPORTING row = 1 column = 1 RECEIVING container = gcl_tree_con ). lcl_lr_splitter->get_container( EXPORTING row = 1 column = 2 RECEIVING container = gcl_right_con ). lcl_lr_splitter->set_column_width( id = 1 width = 35 ). " ③ 내부: 우측을 상(그리드 50%) / 하(차트 50%) 분할 CREATE OBJECT lcl_right_splitter EXPORTING parent = gcl_right_con " ②에서 꺼낸 우측 컨테이너가 부모 rows = 2 columns = 1 EXCEPTIONS OTHERS = 1. lcl_right_splitter->get_container( EXPORTING row = 1 column = 1 RECEIVING container = gcl_right_con ). " 변수 재사용 (그리드 컨테이너) lcl_right_splitter->get_container( EXPORTING row = 2 column = 1 RECEIVING container = gcl_chart_con ). lcl_right_splitter->set_row_height( id = 1 height = 50 ). lcl_right_splitter->set_row_height( id = 2 height = 50 ). ENDFORM.
gcl_right_con 재사용 포인트: lcl_right_splitter 생성 시
parent = gcl_right_con으로 넘기고, get_container row=1 결과를 다시 gcl_right_con에 받습니다. 이렇게 하면 별도 변수 없이 기존 전역 변수를 재활용할 수 있습니다.
4. pa_check 조건 분기 패턴
Selection Screen 파라미터로 레이아웃을 동적으로 전환할 때 사용합니다. 체크박스가 ON이면 분할 없이 단일 컨테이너로, OFF면 전체 분할 레이아웃으로 동작합니다.
ABAP — pa_check 조건 분기
IF pa_check EQ 'X'. " 체크박스 ON: 스플리터 없이 전체를 하나의 컨테이너로 사용 lcl_bottom_con = gcl_dock_container. ELSE. " 체크박스 OFF: 상하 분할 후 하단 컨테이너를 lcl_bottom_con에 배정 CREATE OBJECT gcl_splitter EXPORTING parent = gcl_dock_container rows = 2 columns = 1 EXCEPTIONS OTHERS = 1. gcl_splitter->get_container( EXPORTING row = 1 column = 1 RECEIVING container = gcl_top_con ). gcl_splitter->get_container( EXPORTING row = 2 column = 1 RECEIVING container = lcl_bottom_con ). gcl_splitter->set_row_height( id = 1 height = 20 ). gcl_splitter->set_row_height( id = 2 height = 80 ). ENDIF. " 이후 lcl_bottom_con을 동일하게 사용 → " 분기와 관계없이 나머지 코드는 동일하게 유지
5. 전역 변수 선언 참고
ABAP — 전역 컨테이너 변수 선언
DATA: gcl_dock_container TYPE REF TO cl_gui_docking_container, gcl_splitter TYPE REF TO cl_gui_splitter_container, gcl_top_con TYPE REF TO cl_gui_container, " 상단 Header gcl_tree_con TYPE REF TO cl_gui_container, " 좌측 트리 gcl_right_con TYPE REF TO cl_gui_container, " 우측 ALV 그리드 gcl_chart_con TYPE REF TO cl_gui_container, " 우측 하단 차트 gcl_grid TYPE REF TO cl_gui_alv_grid, gcl_tree TYPE REF TO cl_gui_alv_tree.
요약: 스플리터 생성 3단계
| 단계 | 코드 | 역할 |
|---|---|---|
| 1. 생성 | CREATE OBJECT splitter EXPORTING parent rows columns |
부모 컨테이너를 rows×columns로 분할 |
| 2. 추출 | splitter->get_container( row col RECEIVING container ) |
원하는 셀의 컨테이너 레퍼런스 획득 |
| 3. 비율 | splitter->set_row_height / set_column_width |
행/열 크기 비율 지정 (합산 100 권장) |
'ABAP' 카테고리의 다른 글
| [ABAP] TOP OF PAGE (0) | 2026.05.30 |
|---|---|
| CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS' 말일 계산 FUNCTION (0) | 2026.05.16 |
| [ABAP] ALV TREE , EVENT (0) | 2026.05.09 |
| [ABAP] CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' (0) | 2026.04.19 |
| [ABAP] FCAT 필드 값 바꾸기 (0) | 2026.04.19 |