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

[SAP ABAP] 간단 조회 ALV + TOP-OF-PAGE 헤더 — REUSE_ALV_GRID_DISPLAY · H/S/A 3종 라인 · FORM 5단계 (SE38)

by Song.sh 2026. 5. 27.

조회용 1회성 리포트를 만들 때 매번 CL_GUI_ALV_GRID 인스턴스 + Container + 이벤트 핸들러 클래스를 풀로 짜는 건 과합니다. 단순히 “테이블 데이터를 그리드로 한 번 보여주고 끝” 인 케이스라면 SAP 표준 FM 한 줄 호출만으로 충분 — 그게 REUSE_ALV_GRID_DISPLAY.

 

이 FM 의 진짜 가치는 헤더 영역(TOP-OF-PAGE) 을 간단히 붙일 수 있다는 점. 리포트 상단에 “회사명 · 조회 조건 · 사용자 · 조회 시각” 같은 정보를 출력하고 싶은데 PBO 모듈/컨테이너 분할까지 가는 건 무거우니, slis_t_listheader 테이블 + slis_t_event 등록 + REUSE_ALV_COMMENTARY_WRITE 한 FORM 으로 깔끔하게 해결.

 

이 글에서는 REUSE_ALV_GRID_DISPLAY 의 가장 기본적인 호출 흐름과, 그 위에 TOP-OF-PAGE 헤더(H/S/A 3종 라인) 를 얹는 5단계 패턴을 정리합니다. 데이터는 SAP 표준 비행기 예제 테이블 SFLIGHT 를 사용 — 회사 도메인에 영향 없이 그대로 복붙해 SE38 에서 동작 확인 가능.

핵심 — 간단 ALV + TOP-OF-PAGE 5단계

단계 작업 핵심 키워드
1 변수 선언 — header / event / 데이터 테이블 slis_t_listheader + slis_t_event
2 it_header 채우기 — H/S/A 3종 라인 typ = 'H'/'S'/'A' + key / info
3 it_event 에 TOP_OF_PAGE → FORM 매핑 name = 'TOP_OF_PAGE' + form = 'TOP_LINE'
4 REUSE_ALV_GRID_DISPLAY 호출 i_structure_name + i_callback_program = sy-repid + it_events
5 FORM TOP_LINE 정의 + COMMENTARY_WRITE REUSE_ALV_COMMENTARY_WRITE + it_list_commentary = it_header

기본 그림은 단순 — “TOP-OF-PAGE 헤더 텍스트 3종을 테이블에 미리 채워두고, 이벤트로 FORM 한 번 등록한 뒤, 데이터 ALV 표시 호출 한 줄”. 객체 ALV 의 PBO/Container 복잡함 없이 5분 안에 끝납니다.


1단계 — 변수 선언

REUSE_ALV_GRID_DISPLAY 가 받는 표준 타입 두 개 + 데이터 테이블.

DATA: it_header  TYPE slis_t_listheader,         " TOP-OF-PAGE 헤더 라인 테이블
      lv_comment LIKE LINE OF it_header,         " 헤더 라인 한 줄 (작업용)
      it_flight  LIKE TABLE OF sflight,          " 출력 데이터 테이블
      it_event   TYPE slis_t_event,              " 이벤트 등록 테이블
      lv_event   LIKE LINE OF it_event.          " 이벤트 한 줄 (작업용)
타입 의미
slis_t_listheader 헤더 라인 테이블. 한 라인 = typ(H/S/A) + key + info
slis_t_event ALV 이벤트 등록 테이블. name(예: TOP_OF_PAGE) → form(호출할 FORM 이름)

2단계 — it_header 채우기 (H/S/A 3종 라인)

리스트 헤더 라인은 3가지 타입이 있고, 각 타입별로 화면에 표시되는 스타일이 다릅니다.

typ 의미 화면 스타일
H Header — 큰 제목 굵은 큰 글씨 (보고서 메인 제목용)
S Selection — 라벨 + 값 두 칸 형태 (왼쪽 라벨 굵게 + 오른쪽 값) — 조회 조건 표시용
A Action — 일반 텍스트 일반 한 줄 텍스트 (이탤릭 / 작은 글씨) — 부가 설명용

코드:

START-OF-SELECTION.

* H — HEADER: 큰 제목
  lv_comment-typ  = 'H'.
  lv_comment-key  = 'COM_KEY1'.
  lv_comment-info = 'Header text'.
  APPEND lv_comment TO it_header.

* S — SELECTION: 라벨 + 값
  lv_comment-typ  = 'S'.
  lv_comment-key  = 'COM_KEY2'.
  lv_comment-info = 'SELECT TEXT'.
  APPEND lv_comment TO it_header.

* A — ACTION: 부가 설명
  lv_comment-typ  = 'A'.
  lv_comment-key  = 'COM_KEY3'.
  lv_comment-info = 'Action text'.
  APPEND lv_comment TO it_header.

핵심 — key 는 S(Selection) 타입에서 라벨로 표시되고, info 가 값. H/A 는 key 가 표시 안 되고 info 만 보임.

실전에서 자주 쓰는 헤더 패턴

" 회사명 + 리포트 제목
lv_comment-typ  = 'H'.
lv_comment-info = '구매오더 미입고 현황'.
APPEND lv_comment TO it_header.

" 조회 조건 (S 타입)
lv_comment-typ  = 'S'.
lv_comment-key  = '회사코드'.
lv_comment-info = '1000'.
APPEND lv_comment TO it_header.

lv_comment-typ  = 'S'.
lv_comment-key  = '조회기간'.
lv_comment-info = |{ p_dat_fr DATE = USER } ~ { p_dat_to DATE = USER }|.
APPEND lv_comment TO it_header.

" 사용자 / 출력 시각
lv_comment-typ  = 'A'.
lv_comment-info = |출력자 { sy-uname }   { sy-datum DATE = USER } { sy-uzeit TIME = USER }|.
APPEND lv_comment TO it_header.

회사명·조회조건·출력 메타정보 셋을 H → S → A 순서로 쌓으면 표준 리포트 헤더 모양이 그대로 나옵니다.


3단계 — TOP_OF_PAGE 이벤트 등록

ALV 가 화면을 그릴 때 TOP_OF_PAGE 이벤트가 발생합니다. 그 이벤트를 어떤 FORM 으로 받을지 미리 등록.

lv_event-name = 'TOP_OF_PAGE'.       " ALV 표준 이벤트 이름
lv_event-form = 'TOP_LINE'.          " 호출할 FORM 이름 (자유 명명)
APPEND lv_event TO it_event.

CLEAR lv_event.

name 은 SAP 표준 이벤트 이름이라 정확히 'TOP_OF_PAGE' 로 적어야 합니다(오타 시 호출 X). form 은 우리가 정의할 FORM 이름이라 자유로 — 다만 5단계에서 동일한 이름으로 FORM 을 만들어야 함.

 

자주 쓰는 다른 이벤트도 같은 방식.

이벤트 이름 시점
TOP_OF_PAGE ALV 그리드 상단 영역을 그릴 때
USER_COMMAND 사용자가 도구 모음 버튼 클릭 시
END_OF_LIST ALV 그리드 하단 영역을 그릴 때
PF_STATUS_SET PF-Status 변경 시점에 호출 — 사용자 정의 메뉴 추가용

4단계 — REUSE_ALV_GRID_DISPLAY 호출

ALV 표시 메인 FM. 핵심 파라미터 4개만 채우면 끝.

SELECT *
  INTO TABLE it_flight
  FROM sflight
  UP TO 50 ROWS.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    i_structure_name   = 'SFLIGHT'           " 출력 테이블의 구조체 이름 (DDIC)
    i_callback_program = sy-repid            " FORM 이 정의된 프로그램 (자기 자신)
    it_events          = it_event            " 이벤트 등록 테이블
  TABLES
    t_outtab           = it_flight           " 실제 출력 데이터
  EXCEPTIONS
    program_error      = 1
    OTHERS             = 2.

핵심 파라미터:

파라미터 역할
i_structure_name DDIC 구조체 이름. ALV 가 컬럼/라벨/타입을 자동 인식. CBO 구조체도 OK
i_callback_program FORM TOP_LINE 이 정의된 프로그램 이름. 자기 자신이면 sy-repid
it_events 3단계에서 만든 이벤트 등록 테이블
t_outtab 실제 출력 데이터 (TABLES 파라미터)

i_structure_name 만 넘기면 Field Catalog 가 자동 생성됩니다. 컬럼 라벨/위치/타입 커스터마이징이 필요하면 별도로 it_fieldcat 을 채워 넘기면 됨.


5단계 — FORM TOP_LINE 정의 + COMMENTARY_WRITE

ALV 가 TOP_OF_PAGE 이벤트 시점에 호출하는 FORM. 그 안에서 REUSE_ALV_COMMENTARY_WRITE 가 헤더 영역을 실제로 그립니다.

FORM top_line.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = it_header              " 2단계에서 채운 헤더 라인 테이블
      i_logo             = 'WRITE_TOP_OF_PAGE'    " 로고 이미지 (OAOR 에 등록된 이름)
      i_end_of_list_grid = it_flight.             " 끝줄에 그리드 합계 보여줄 데이터

ENDFORM.

핵심 파라미터:

파라미터 의미
it_list_commentary 2단계의 it_header 그대로
i_logo OAOR 에 등록된 로고 이미지 이름 (선택). 없으면 생략 가능
i_end_of_list_grid 출력 데이터 (선택). 일부 환경에서 합계 표시용

i_logo 는 회사 로고 이미지를 OAOR(또는 SE78) 에 미리 등록해두고 그 이름을 적어주면 헤더 우측에 표시됩니다. 운영기에 로고가 없거나 그냥 텍스트만 깔끔히 보여주고 싶으면 i_logo 파라미터를 통째 생략.


결과 화면 예시

위 5단계를 마치면 ALV 가 다음과 같은 모양으로 화면에 표시됩니다.

┌─────────────────────────────────────────────────────────────┐
│  Header text                                                │  ← H 타입 (큰 제목)
│                                                             │
│  COM_KEY2  SELECT TEXT                                      │  ← S 타입 (라벨 + 값)
│                                                             │
│  Action text                                                │  ← A 타입 (일반 텍스트)
├─────────────────────────────────────────────────────────────┤
│  ID │ No. │ Flight Date │ 가격    │ 통화 │ Plane Type │ ... │  ← Field Catalog 자동 인식
│  AA │  17 │ 2024.01.25  │ 422.94  │ USD  │ 747-400    │ ... │
│  AA │  17 │ 2024.02.26  │ 422.94  │ USD  │ 747-400    │ ... │
│  AA │  17 │ 2024.03.29  │ 422.94  │ USD  │ 747-400    │ ... │
│  ...                                                        │
└─────────────────────────────────────────────────────────────┘

표준 ALV 도구 모음(필터·정렬·합계·엑셀 다운로드) 도 자동으로 같이 표시되므로, 사용자는 별도 조작 없이 모든 기본 기능을 사용 가능. 회사 리포트의 90% 시나리오가 이 패턴 한 번이면 끝납니다.


REUSE_ALV_GRID_DISPLAY vs 다른 ALV

ALV 종류별 사용 시점 비교.

방식 난이도 적합한 시나리오
REUSE_ALV_GRID_DISPLAY (FM) 매우 쉬움 조회 전용 1회성 리포트 · TOP-OF-PAGE 헤더만 필요 · 빠른 프로토타입
CL_SALV_TABLE (객체) 쉬움 현대 표준. 헤더 영역도 GET_HEADER 로 깔끔. 신규 리포트 우선
CL_GUI_ALV_GRID (전통적 객체) 어려움 편집 가능 그리드 · 다중 그리드 · 복잡한 이벤트 처리

신규 개발에서는 CL_SALV_TABLE 우선, 빠르게 한 번 보여주는 정도라면 REUSE_ALV_GRID_DISPLAY. 편집 ALV 필요한 경우만 CL_GUI_ALV_GRID 로 가는 게 일반적인 선택 흐름.


자주 빠뜨리는 함정

  • i_callback_program 누락 — FORM TOP_LINE 이 같은 프로그램에 있는데 i_callback_program 을 안 넘기면 ALV 가 FORM 을 못 찾아서 헤더 자체가 안 보임. 거의 항상 sy-repid 로 설정
  • 이벤트 이름 오타 — 'TOP_OF_PAGE' 가 표준이고 다른 변형(TOPOFPAGE / TOP_PAGE 등) 은 안 먹힘. 대소문자도 정확히
  • FORM 이름 불일치 — it_event 의 form 필드와 실제 FORM 정의 이름이 정확히 일치해야 함. 대소문자는 ABAP 자체가 대소문자 무시지만 오타에는 민감
  • i_structure_name 없이 it_fieldcat 만 — DDIC 구조체가 없는 임시 구조체(BEGIN OF lt_data ... END OF) 면 i_structure_name 못 쓰고 Field Catalog 를 직접 채워야 함
  • TOP_OF_PAGE 외 다른 이벤트 추가 — 같은 it_event 에 USER_COMMAND·END_OF_LIST 등을 같이 APPEND 한 뒤 각각 FORM 정의하면 됨. it_event 는 누적
  • 로고 이미지 미등록 — i_logo 에 OAOR 에 없는 이름 넣으면 그 부분만 빈 자리로 보임. 로고 안 쓸 거면 파라미터 통째 생략
  • 헤더 라인 너무 많음 — H/S/A 라인 30개 넣으면 화면이 헤더로만 도배됨. 보통 H 1개 + S 3~5개 + A 1개 정도가 적당

요약

단계 코드 결과
1 DATA: it_header TYPE slis_t_listheader, it_event TYPE slis_t_event ... 필요한 표준 타입 변수 준비
2 it_header 에 H/S/A 3종 라인 APPEND 제목 · 조건 · 부가설명 헤더 텍스트 준비
3 it_event 에 name='TOP_OF_PAGE' form='TOP_LINE' APPEND ALV 가 호출할 FORM 이름 등록
4 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' ... i_structure_name + i_callback_program + it_events + t_outtab
5 FORM TOP_LINE. ... CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' ... it_list_commentary = it_header → 헤더 영역 실제 그리기

REUSE_ALV_GRID_DISPLAY + TOP-OF-PAGE 패턴의 본질은 “헤더 텍스트 3종(H/S/A) 을 테이블에 채워두고 → 이벤트로 FORM 한 번 등록하고 → ALV 표시 FM 한 번 호출” 단 3개 작업. 객체 ALV 의 PBO/Container 복잡함 없이 한 화면에 깔끔한 보고서 헤더가 붙은 ALV 가 나오므로, 조회 전용 리포트나 빠른 프로토타입에는 이 패턴이 가장 효율적입니다.


Disclaimer — 이 포스트는 실무 정리 노트를 바탕으로 AI 보조로 정리되었습니다.

REUSE_ALV_GRID_DISPLAYREUSE_ALV_COMMENTARY_WRITE 의 파라미터는 NetWeaver 버전(ECC 6.0 / S/4HANA on-premise · Cloud) 에 따라 일부 차이가 있을 수 있고, 일부 신규 환경에서는 CL_SALV_TABLE 사용이 권장됩니다. 실제 적용 시 SE37 에서 시그니처를 확인하시기 바랍니다.