ALV 그리드를 사용자에게 보여줄 때 기본 표준 도구 모음(Insert Row · Append Row · Copy Row · Delete Row · Cut · Paste · Undo 등) 이 자동으로 함께 표시됩니다. 일반 조회용 ALV 라면 도움 되지만, 편집/삭제를 막아야 하는 화면(승인 완료된 데이터·로그 조회용 등) 에서는 사용자가 데이터를 무심코 만지지 못하도록 표준 버튼들을 숨기는 게 안전합니다.
ALV 의 표준 도구 모음을 제거하는 가장 표준적인 방법은 CL_GUI_ALV_GRID 의 SET_TABLE_FOR_FIRST_DISPLAY 메서드 호출 시 IT_TOOLBAR_EXCLUDING 파라미터에 “숨길 버튼들의 Function Code” 를 담은 테이블을 전달하는 것입니다. SAP 가 클래스 상수(MC_FC_*) 로 제공하는 표준 함수 코드를 그대로 쓰면 됩니다.
이 글에서는 PBO 흐름에서 ALV 생성과 표준 도구 모음 제거가 어떤 순서로 이어지는지를 정리하고, 자주 숨기는 MC_FC_* 상수 목록, ALV 종류(CL_GUI_ALV_GRID · CL_SALV_TABLE · REUSE_ALV_GRID_DISPLAY) 별 방법 차이, 그리고 Dynpro Application Toolbar 의 PF-STATUS EXCLUDING 패턴과의 차이까지 한 번에 정리합니다.
핵심 — ALV 종류별 표준 도구 모음 제거 방법
| ALV 종류 | 방법 | 전달 위치 |
|---|---|---|
| CL_GUI_ALV_GRID (전통적 객체 ALV) | UI_FUNCTIONS 테이블에 MC_FC_* 상수 APPEND |
SET_TABLE_FOR_FIRST_DISPLAY 의 IT_TOOLBAR_EXCLUDING |
| CL_SALV_TABLE (간단/현대 ALV) | GET_FUNCTIONS( )->SET_ALL( abap_false ) 또는 개별 SET_*( abap_false ) |
ALV 인스턴스 생성 직후 한 줄 |
| REUSE_ALV_GRID_DISPLAY (FM 방식) | SLIS_T_EXTAB 에 fcode 채움 |
FM 의 IT_EXCLUDING 파라미터 |
세 방식 모두 “숨길 Function Code 의 목록을 만들어 ALV 표시 시점에 넘긴다” 는 본질은 같습니다. 가장 많이 쓰이는 게 CL_GUI_ALV_GRID 라 이번 글은 이 방식을 중심으로.
PBO 흐름 — ALV 생성과 도구 모음 제거의 호출 순서
표준 도구 모음 제거는 ALV 인스턴스를 화면에 띄우기 직전 에 lt_excl 테이블을 미리 채워두고, SET_TABLE_FOR_FIRST_DISPLAY 호출 시 같이 넘기는 흐름. PBO 모듈 안의 호출 순서.
MODULE set_alv OUTPUT.
PERFORM create_alv. " Container + Grid 인스턴스 생성
PERFORM create_layout. " LAYOUT (gs_layout) 설정
PERFORM create_fcat. " Field Catalog (gt_fcat) 작성
PERFORM create_event. " 이벤트 핸들러 등록
PERFORM standard_toolbar. " ← 숨길 버튼 lt_excl 에 APPEND
PERFORM display_alv. " SET_TABLE_FOR_FIRST_DISPLAY 호출
ENDMODULE.
핵심 — PERFORM standard_toolbar 가 PERFORM display_alv 직전에 와야 합니다. display_alv 안에서 SET_TABLE_FOR_FIRST_DISPLAY 를 호출할 때 이미 lt_excl 이 채워져 있어야 IT_TOOLBAR_EXCLUDING 으로 넘길 수 있기 때문.
1단계 — UI_FUNC / UI_FUNCTIONS 타입 선언
ALV 표준 도구 모음 제거에 쓰는 SAP 표준 데이터 타입 두 개.
DATA: ls_excl TYPE ui_func, " 단일 fcode
lt_excl TYPE ui_functions. " fcode 테이블
| 타입 | 의미 |
|---|---|
UI_FUNC |
단일 Function Code (예: '&LOCAL&DELETE_ROW') |
UI_FUNCTIONS |
UI_FUNC 의 표준 테이블 — IT_TOOLBAR_EXCLUDING 파라미터 타입 |
2단계 — 숨길 버튼을 lt_excl 에 APPEND
CL_GUI_ALV_GRID 클래스가 제공하는 MC_FC_* 상수를 쓰면 오타 위험 없이 안전하게 fcode 를 지정할 수 있습니다.
FORM standard_toolbar.
ls_excl = cl_gui_alv_grid=>mc_fc_loc_copy_row.
APPEND ls_excl TO lt_excl.
ls_excl = cl_gui_alv_grid=>mc_fc_loc_delete_row.
APPEND ls_excl TO lt_excl.
ls_excl = cl_gui_alv_grid=>mc_fc_loc_insert_row.
APPEND ls_excl TO lt_excl.
ls_excl = cl_gui_alv_grid=>mc_fc_loc_append_row.
APPEND ls_excl TO lt_excl.
ENDFORM.
같은 패턴을 New Syntax(7.40+) 로 줄이면:
DATA(lt_excl) = VALUE ui_functions(
( cl_gui_alv_grid=>mc_fc_loc_copy_row )
( cl_gui_alv_grid=>mc_fc_loc_delete_row )
( cl_gui_alv_grid=>mc_fc_loc_insert_row )
( cl_gui_alv_grid=>mc_fc_loc_append_row )
).
자주 숨기는 표준 fcode
| 상수 (CL_GUI_ALV_GRID 의) | 실제 fcode | 기능 설명 |
|---|---|---|
MC_FC_LOC_APPEND_ROW |
&LOCAL&APPEND |
행 추가 (Append Row) |
MC_FC_LOC_INSERT_ROW |
&LOCAL&INSERT_ROW |
행 삽입 (Insert Row) |
MC_FC_LOC_DELETE_ROW |
&LOCAL&DELETE_ROW |
행 삭제 (Delete Row) |
MC_FC_LOC_COPY_ROW |
&LOCAL©_ROW |
행 복사 (Copy Row) |
MC_FC_LOC_COPY |
&LOCAL© |
셀 복사 (Copy) |
MC_FC_LOC_CUT |
&LOCAL&CUT |
잘라내기 (Cut) |
MC_FC_LOC_PASTE |
&LOCAL&PASTE |
붙여넣기 (Paste) |
MC_FC_LOC_PASTE_NEW_ROW |
&LOCAL&PASTE_NEW_ROW |
새 행으로 붙여넣기 |
MC_FC_LOC_UNDO |
&LOCAL&UNDO |
되돌리기 (Undo) |
MC_FC_LOC_MOVE_ROW |
&LOCAL&MOVE_ROW |
행 이동 |
MC_FC_LOAD_VARIANT |
&LOAD |
Variant 불러오기 |
MC_FC_MAINTAIN_VARIANT |
&MAINTAIN |
Variant 관리 |
MC_FC_GRAPH |
&GRAPH |
그래픽 보기 |
MC_FC_HTML |
&HTML |
HTML 다운로드 |
MC_FC_INFO |
&INFO |
Information |
MC_FC_HELP |
&HELP |
Help |
상수 전체 목록은 SE24 에서 CL_GUI_ALV_GRID 클래스 → “속성(Attributes) 탭” 에서 MC_FC_* 로 시작하는 Constant 들을 보면 됩니다. 회사 표준에 따라 더 많은 상수를 일괄 EXCLUDING 하는 경우도 있음.
3단계 — SET_TABLE_FOR_FIRST_DISPLAY 에 lt_excl 전달
ALV 를 처음 화면에 띄울 때 호출하는 메서드. IT_TOOLBAR_EXCLUDING 파라미터에 앞서 만든 lt_excl 을 그대로 전달.
FORM display_alv.
CALL METHOD go_grid->set_table_for_first_display
EXPORTING
is_layout = gs_layout
it_toolbar_excluding = lt_excl " ★ 표준 도구 모음 제거
CHANGING
it_fieldcatalog = gt_fcat
it_outtab = gt_data
it_sort = gt_sort.
ENDFORM.
지정한 fcode 의 버튼들이 ALV 도구 모음에서 완전히 사라집니다 (회색 처리가 아니라 보이지 않음). 사용자가 도구 모음에서 클릭 자체를 할 수 없게 되므로 편집/삭제 실수 방지.
CL_SALV_TABLE 의 다른 방법 — 더 간단
새로운 ALV 인 CL_SALV_TABLE 에서는 fcode 테이블을 만들 필요 없이 메서드 한 줄로 끝.
DATA: lo_salv TYPE REF TO cl_salv_table.
cl_salv_table=>factory(
IMPORTING
r_salv_table = lo_salv
CHANGING
t_table = gt_data ).
" 도구 모음 전체 숨김 — 한 줄로 끝
lo_salv->get_functions( )->set_all( abap_false ).
" 또는 일부만 끄고 싶으면 개별 메서드
" lo_salv->get_functions( )->set_default( abap_false ).
" lo_salv->get_functions( )->set_graphics( abap_false ).
" lo_salv->get_functions( )->set_print( abap_false ).
lo_salv->display( ).
조회 전용 화면에서 “도구 모음 자체를 안 보이게” 만들 때 가장 간단한 방법. 일부 버튼만 끄려면 cl_salv_functions_list 의 SET_* 메서드들을 개별 호출.
REUSE_ALV_GRID_DISPLAY 의 IT_EXCLUDING
FM 방식 ALV. SLIS_T_EXTAB 타입 테이블에 fcode 채워 IT_EXCLUDING 으로 전달.
DATA: lt_extab TYPE slis_t_extab,
ls_extab TYPE slis_extab.
ls_extab-fcode = '&LOCAL&DELETE_ROW'. APPEND ls_extab TO lt_extab.
ls_extab-fcode = '&LOCAL&INSERT_ROW'. APPEND ls_extab TO lt_extab.
ls_extab-fcode = '&LOCAL&APPEND'. APPEND ls_extab TO lt_extab.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = gs_layout
it_fieldcat = gt_fcat
it_excluding = lt_extab " ★ 표준 도구 모음 제거
TABLES
t_outtab = gt_data.
CL_GUI_ALV_GRID 의 MC_FC_* 상수 자리에 fcode 문자열을 직접 적어주는 방식. 같은 결과지만 상수가 아니라 문자열이라 오타 위험이 있어 보통 ALV 객체 방식을 더 선호합니다.
Dynpro PF-STATUS EXCLUDING 과의 차이
같은 “EXCLUDING” 단어를 쓰지만 적용 위치가 다릅니다.
| 구분 | Dynpro PF-STATUS EXCLUDING | ALV IT_TOOLBAR_EXCLUDING |
|---|---|---|
| 대상 | Dynpro 의 Application Toolbar (화면 상단) | ALV Container 의 표준 도구 모음 (그리드 위) |
| 호출 위치 | PBO 의 SET PF-STATUS '...' EXCLUDING it_extab |
SET_TABLE_FOR_FIRST_DISPLAY 의 IT_TOOLBAR_EXCLUDING |
| 효과 | 버튼 회색 처리 (비활성화) | 버튼 완전히 숨김 (보이지 않음) |
| 관련 글 | "[SAP ABAP] SET PF-STATUS EXCLUDING — Application Toolbar 버튼 동적 비활성화" (Dialog Screen) | 이 글 |
두 패턴을 같이 쓰는 경우도 많습니다 — 화면 상단의 Application Toolbar 는 PF-STATUS EXCLUDING 으로 일부 비활성화, ALV 그리드 자체의 도구 모음은 IT_TOOLBAR_EXCLUDING 으로 숨김. 두 패턴이 한 PBO 모듈 안에서 자연스럽게 같이 쓰입니다.
자주 빠뜨리는 함정
- PERFORM 순서 오류 —
standard_toolbar가display_alv뒤에 있으면 lt_excl 이 비어 있어 무효 - lt_excl REFRESH 누락 — PBO 가 여러 번 도는 화면에서 lt_excl 를 매번 REFRESH 안 하면 같은 fcode 가 누적되며 비효율 (동작에는 문제 X 지만 변수 오염)
- MC_FC_* vs MC_MB_* — Toolbar 버튼은 MC_FC_(Function Code), Menu Button 은 MC_MB_. 메뉴 버튼은 다른 메커니즘
- 상수 오타 — 직접 fcode 문자열로 적는 경우(REUSE_ALV_GRID_DISPLAY) 오타 위험. ALV 객체 방식의 MC_FC_* 상수가 안전
- CL_SALV 의 set_all 과 IT_TOOLBAR_EXCLUDING 혼동 — SALV 는 fcode 테이블 안 받음. set_all(false) 한 줄이거나 개별 set_*(false). IT_TOOLBAR_EXCLUDING 패턴은 CL_GUI_ALV_GRID 전용
- 표준 SAP 명령 함께 숨기기 — Filter · Sort · Sum · Excel Download 같은 표준 분석 기능은 보통 살려두는 게 좋음. 정말 필요한 편집 버튼(LOC_*) 위주로 제거
요약
| 단계 | 코드 | 결과 |
|---|---|---|
| 1 | DATA: ls_excl TYPE ui_func, lt_excl TYPE ui_functions. |
SAP 표준 fcode 타입 선언 |
| 2 | cl_gui_alv_grid=>mc_fc_loc_* → APPEND to lt_excl |
숨길 버튼 fcode 누적 |
| 3 | go_grid->set_table_for_first_display( ... it_toolbar_excluding = lt_excl ... ) |
ALV 표시 시점에 표준 도구 모음에서 해당 버튼 숨김 |
| 대안 | cl_salv_table |
get_functions( )->set_all( abap_false ) 한 줄 |
| 대안 | REUSE_ALV_GRID_DISPLAY |
slis_t_extab 에 fcode 채워 IT_EXCLUDING 전달 |
ALV 표준 도구 모음 제거의 본질은 “숨길 fcode 의 테이블을 만들어 ALV 표시 시점에 넘긴다” 한 문장. CL_GUI_ALV_GRID 의 MC_FC_* 상수만 외워두면 오타 위험 없이 안전하게 사용 가능. Dynpro Application Toolbar 의 PF-STATUS EXCLUDING 과 같이 쓰면 화면 상단 버튼과 ALV 그리드 버튼을 모두 제어할 수 있고, 두 패턴은 PBO 한 모듈 안에서 자연스럽게 공존합니다.
Disclaimer — 이 포스트는 실무 정리 노트를 바탕으로 AI 보조로 정리되었습니다.
CL_GUI_ALV_GRID 의 MC_FC_* 상수와 SET_TABLE_FOR_FIRST_DISPLAY 시그니처는 NetWeaver 버전(ECC 6.0 / S/4HANA on-premise · Cloud) 에 따라 일부 차이가 있을 수 있으니, 실제 적용 시 SE24 의 CL_GUI_ALV_GRID 클래스 속성 탭에서 상수 목록을 확인하시기 바랍니다.