본문 바로가기
ALV · 화면 · 리포트

[SAP ABAP] ALV 표준 도구 모음 제거 — CL_GUI_ALV_GRID · IT_TOOLBAR_EXCLUDING · MC_FC_* 상수 활용 (SE24)

by Song.sh 2026. 5. 27.

ALV 그리드를 사용자에게 보여줄 때 기본 표준 도구 모음(Insert Row · Append Row · Copy Row · Delete Row · Cut · Paste · Undo 등) 이 자동으로 함께 표시됩니다. 일반 조회용 ALV 라면 도움 되지만, 편집/삭제를 막아야 하는 화면(승인 완료된 데이터·로그 조회용 등) 에서는 사용자가 데이터를 무심코 만지지 못하도록 표준 버튼들을 숨기는 게 안전합니다.

 

ALV 의 표준 도구 모음을 제거하는 가장 표준적인 방법은 CL_GUI_ALV_GRIDSET_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_DISPLAYIT_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_toolbarPERFORM 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&COPY_ROW 행 복사 (Copy Row)
MC_FC_LOC_COPY &LOCAL&COPY 셀 복사 (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_toolbardisplay_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 클래스 속성 탭에서 상수 목록을 확인하시기 바랍니다.