본문 바로가기

CL_GUI_ALV_GRID6

[SAP ABAP] ALV 스탠다드 버튼에 로직 끼워넣기 — BEFORE/AFTER USER_COMMAND 이벤트 (get_filtered_entries) ALV 의 USER_COMMAND 이벤트는 내가 직접 추가한 커스텀 버튼(예: 행추가, 행삭제) 의 클릭을 처리합니다. 그런데 정렬·필터·합계 같은 SAP 스탠다드 툴바 버튼의 동작 전후에 로직을 끼워넣고 싶을 때는 USER_COMMAND 로는 안 됩니다. 스탠다드 기능은 SAP 가 내부에서 처리하기 때문입니다. 이때 쓰는 것이 BEFORE_USER_COMMAND 와 AFTER_USER_COMMAND 이벤트입니다. 이름 그대로 스탠다드 기능이 실행되기 직전(before) 과 실행된 직후(after) 에 끼어들어, 사전 준비나 후처리를 할 수 있게 해줍니다. 대표적인 활용이 "사용자가 필터를 건 뒤, 화면에서 숨겨진 행의 데이터를 정리" 하는 후처리입니다. 이 글에서는 세 이벤트(USER_COMMAND /.. 2026. 5. 29.
[SAP ABAP] ALV 소계 행에 커스텀 텍스트 넣기 — SUBTOTAL_TEXT 이벤트 (no_out + sort subtot 조건) ALV 에서 소계(Subtotal) 를 잡으면 기본으로 "* 소계" 같은 밋밋한 표시만 나옵니다. 이걸 "Plane Type 747-400" 처럼 소계 그룹이 무엇인지 알려주는 의미 있는 텍스트로 바꾸고 싶을 때 쓰는 것이 SUBTOTAL_TEXT 이벤트입니다. 핵심은 이 이벤트가 그냥은 발생하지 않는다 는 점입니다. 두 가지 조건 — (1) 소계 기준 컬럼을 Field Catalog 에서 숨김(no_out) 처리 하고, (2) Sort 에서 그 컬럼에 소계(subtot) 를 켜야 — 가 맞아야 SAP 가 소계 행을 그릴 때 SUBTOTAL_TEXT 이벤트를 던집니다. 이 글에서는 이벤트 발생 조건 → 이벤트 핸들러 등록 → Field Catalog/Sort 설정 → 소계 텍스트 할당까지 정리합니다. 데.. 2026. 5. 29.
[SAP ABAP] ALV TOOLBAR 버튼으로 행 추가·삭제 — handle_toolbar + user_command 이벤트 (CL_GUI_ALV_GRID) 편집 가능한 ALV 화면에서 사용자가 직접 행을 추가하거나 삭제하는 버튼이 필요할 때가 있습니다. 입력용 ALV(예: 수기 데이터 입력, 항목 등록 화면) 에서 "행추가" · "행삭제" 버튼을 툴바에 올리는 패턴입니다. 이 기능의 핵심은 CL_GUI_ALV_GRID 의 두 이벤트 입니다. toolbar 이벤트로 커스텀 버튼을 툴바에 그리고, user_command 이벤트로 그 버튼을 눌렀을 때의 동작(행 추가/삭제) 을 처리합니다. 두 이벤트는 항상 짝으로 움직입니다 — 버튼을 그리는 쪽과 클릭을 처리하는 쪽. 이 글에서는 편집 가능 ALV 구성 → 이벤트 핸들러 등록 → toolbar 로 버튼 추가 → user_command 로 행 추가/삭제 처리 → 화면 갱신까지 정리합니다. 데이터는 SAP 표준 학.. 2026. 5. 29.
[SAP ABAP] ALV 표준 도구 모음 제거 — CL_GUI_ALV_GRID · IT_TOOLBAR_EXCLUDING · MC_FC_* 상수 활용 (SE24) 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 가 클래.. 2026. 5. 27.
[SAP ABAP] ALV 필터 코드로 거는 법 — set_filter_criteria + 더블클릭 자동 필터 (LVC_T_FILT) ALV 화면을 쓰다 보면 "사용자가 그리드의 어떤 셀을 더블 클릭하면 그 값을 기준으로 자동 필터가 걸리게 해 달라" 는 요청이 자주 들어옵니다. 자재번호 컬럼의 셀을 더블 클릭하면 그 자재번호만 보이게, 플랜트 컬럼을 더블 클릭하면 그 플랜트만 남게 — Excel 의 자동 필터 비슷한 인터랙션을 ALV 에도 넣는 것입니다. 이 동작의 핵심은 cl_gui_alv_grid 의 표준 메소드 SET_FILTER_CRITERIA 입니다. LVC_T_FILT 타입의 필터 조건 테이블을 만들어 메소드에 넘기면 사용자가 화면에서 직접 필터를 거는 것과 동일한 결과가 나옵니다. 더블 클릭 이벤트(HANDLE_DOUBLE_CLICK) 와 결합하면 위에 말한 "셀 더블 클릭 → 자동 필터" 흐름이 한 화면 안에서 동작. .. 2026. 5. 20.
[SAP ABAP] 여러 GRID에서 공통 CLASS EVENT 사용하기 — FOR ALL INSTANCES + SENDER 한 화면에 ALV Grid를 두 개 이상 띄워놓고, 각 그리드에 더블 클릭이나 툴바 같은 같은 이벤트를 동일하게 동작시켜야 하는 상황이 종종 있습니다. 예를 들어 위쪽 그리드에서 구매 문서를 더블클릭하면 상세 라인을 아래 그리드에 채우거나, 두 그리드 모두에서 사용자 정의 버튼을 동작시키는 경우죠. 이때 각 그리드마다 핸들러를 따로 등록해도 되지만, ABAP은 FOR ALL INSTANCES 옵션 하나로 같은 클래스 이벤트를 모든 인스턴스에 한 번에 적용할 수 있게 해줍니다.핵심 차이 — FOR g_grid vs FOR ALL INSTANCES구문적용 범위SET HANDLER ... FOR g_grid지정한 특정 그리드 인스턴스에서 발생한 이벤트만 처리SET HANDLER ... FOR ALL INSTA.. 2026. 5. 12.