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

[SAP ABAP] ALV 위에 제목·조회조건 헤더 띄우기 — TOP-OF-PAGE 이벤트 (REUSE_ALV vs CL_DD_DOCUMENT)

by Song.sh 2026. 6. 2.

ALV 위에 리포트 제목 · 조회 조건 요약 · 회사 로고 같은 헤더 영역을 띄우고 싶을 때 쓰는 이벤트가 TOP-OF-PAGE 입니다. 그리드 자체가 출력되기 전에 한 번 발생하는 이벤트라, 여기서 텍스트 라인이나 도표를 그려 두면 ALV 가 그 아래에 깔립니다.

 

구현 방법은 두 갈래입니다. (1) REUSE_ALV 클래식 — SLIS 타입 + 콜백 FORM 기반, 가장 간단하고 짧은 코드로 끝납니다. (2) OO 방식 — CL_DD_DOCUMENT + list_processing_events, CL_GUI_ALV_GRID 와 자연스럽게 결합되고 스타일 자유도가 훨씬 높습니다.

 

이 글에서는 두 패턴을 모두 다룹니다. REUSE_ALV 로 가장 빠른 헤더부터 그려 보고, 그다음 OO 방식으로 색·굵기·테이블 형태의 헤더를 짜 봅니다. 데이터는 SAP 스탠다드 학습 환경 테이블 SFLIGHT 기준.

핵심 — REUSE_ALV vs OO 방식

구분 REUSE_ALV 클래식 OO 방식 (CL_DD_DOCUMENT)
그리드 출력 REUSE_ALV_GRID_DISPLAY FM CL_GUI_ALV_GRID + Container
헤더 데이터 타입 SLIS_T_LISTHEADER (TYP·KEY·INFO) 자유 구조체 + DD Document 메소드 호출
이벤트 등록 SLIS_T_EVENT + FORM 콜백 SET HANDLER + list_processing_events
출력 메소드 REUSE_ALV_COMMENTARY_WRITE add_table·add_text·display_document
스타일 자유도 3가지 라인 타입 (H·S·A) + 로고 색·굵기·크기·테이블 형태 자유
적합 시나리오 간단 조회 리포트 / 출력만 필요 편집 ALV / Docking + Splitter 결합 / 색상 강조

두 방식 모두 그리드가 그려지기 직전 TOP-OF-PAGE 이벤트가 발생 → 거기에 미리 만든 헤더 텍스트를 출력 → ALV 가 그 아래 그려지는 흐름은 같습니다. 차이는 "헤더를 어떤 데이터 구조에 담고 어떤 메소드로 출력하느냐"입니다.


1단계 — REUSE_ALV 클래식 패턴

가장 짧은 코드로 헤더가 붙은 ALV 를 만들 수 있는 방식입니다. SLIS 그룹에 정의된 스탠다드 타입 두 개(SLIS_T_LISTHEADER·SLIS_T_EVENT) 만 알면 됩니다.

헤더 라인 타입

SLIS_T_LISTHEADER 의 각 행은 TYP·KEY·INFO 세 컬럼으로 구성되고, TYP 값 한 글자로 출력 형식이 달라집니다.

TYP 의미 출력 형태
H Header 제목 (큰 글씨·굵게) — INFO 만 사용
S Selection "KEY : INFO" 형태 (라벨 + 값)
A Action 강조 라인 (조회 시각 · 사용자명 등) — INFO 만 사용

이벤트 등록 + 출력 FORM

SLIS_T_EVENT 테이블에 name = 'TOP_OF_PAGE' · form = 'TOP_LINE' 한 줄을 넣어 REUSE_ALV_GRID_DISPLAY 의 IT_EVENTS 인자로 넘기면, 그리드가 그려지기 직전 자기 프로그램의 FORM TOP_LINE 을 호출해 줍니다. 거기서 REUSE_ALV_COMMENTARY_WRITE 로 헤더 테이블을 출력합니다.

DATA : it_header  TYPE slis_t_listheader,
       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.

START-OF-SELECTION.

* H : Header 라인 (제목)
  lv_comment-typ  = 'H'.
  lv_comment-info = '항공편 조회 리포트'.
  APPEND lv_comment TO it_header.

* S : Selection 라인 (조회 조건)
  CLEAR lv_comment.
  lv_comment-typ  = 'S'.
  lv_comment-key  = '조회 대상'.
  lv_comment-info = '전 항공사 (SFLIGHT)'.
  APPEND lv_comment TO it_header.

* A : Action 라인 (실행 정보)
  CLEAR lv_comment.
  lv_comment-typ  = 'A'.
  lv_comment-info = |조회 시각 : { sy-datum DATE = USER } { sy-uzeit }|.
  APPEND lv_comment TO it_header.

* TOP_OF_PAGE 이벤트 → FORM TOP_LINE 콜백
  lv_event-name = 'TOP_OF_PAGE'.
  lv_event-form = 'TOP_LINE'.
  APPEND lv_event TO it_event.

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

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_structure_name   = 'SFLIGHT'
      i_callback_program = sy-repid
      it_events          = it_event
    TABLES
      t_outtab           = it_flight
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.

FORM top_line.
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = it_header
      i_logo             = 'WRITE_TOP_OF_PAGE'.
ENDFORM.

i_logo 인자에는 SE78(Form Graphics) 에 등록한 BMP 로고 이름을 넘기면 우측에 표시됩니다. 등록 안 된 이름을 넘기면 그냥 무시되니 비워둬도 OK.


2단계 — OO 방식: CL_DD_DOCUMENT 로 헤더 그리기

CL_GUI_ALV_GRID 를 쓰는 모듈풀에서 헤더를 띄우려면 CL_DD_DOCUMENT 객체를 별도로 만들어 색·굵기·테이블 형식을 자유롭게 구성합니다. 그리고 ALV 그리드의 list_processing_events 메소드로 DD Document 객체를 연결해 주면, TOP_OF_PAGE 이벤트가 발생할 때 자동으로 그 문서가 그려집니다.

주요 함수 — CL_DD_DOCUMENT 클래스 8가지 메소드

CL_DD_DOCUMENT 의 메소드는 많지만 TOP-OF-PAGE 구현에 실제로 쓰는 건 8가지로 정리됩니다. 노션 정리 노트의 분류 그대로:

메소드 역할 호출 시점·주의
add_table 문서 상단에 Table 의 전체 규격(column) 생성 no_of_columns·width·border 필수 (border '0'=table 굵기, '1'=테두리)
add_column add_table 로 만든 Table 에 Column 추가 반환 column(CL_DD_AREA) 을 받아 add_text 호출용으로 보관
add_text Column 에 문구 추가 sap_emphasis·sap_color·sap_fontsize 로 스타일 지정 (3단계 참조)
new_line 현재 커서 라인에서 줄바꿈 table 안이 아니라 자유 텍스트 흐름일 때 한 줄 띄우기
initialize_document TOP-OF-PAGE 문서 초기화 핸들러 진입 시 매번 첫 호출 — 빠뜨리면 누적·깜박임 발생
merge_document TOP-OF-PAGE 문서 작업 병합 조각 문서 여러 개를 한 문서로 합칠 때 (제목·로고·표를 따로 만든 후 병합)
display_document TOP-OF-PAGE 문서 출력 최종 호출로 헤더 영역(parent 컨테이너) 에 그리기
list_processing_events TOP-OF-PAGE 이벤트 실행 이건 CL_DD_DOCUMENT 가 아니라 CL_GUI_ALV_GRID 메소드 — DD Document 와 이벤트를 그리드에 등록

흐름은 단순합니다. initialize_documentadd_table·add_column·add_text·new_line 로 문서 구성 → 필요하면 merge_document 로 조각 합치기 → display_document 로 영역에 출력. list_processing_events 는 이 모든 흐름을 ALV 의 top_of_page 이벤트에 묶어 주는 글루(접착) 메소드.

필수 메소드 — 최소 3개로 헤더 띄우기

위 8개 중 딱 세 개 만 알면 헤더가 화면에 뜹니다. 표·컬럼·줄바꿈 같은 구성은 디자인 욕심에 따라 나중에 추가하면 됩니다.

순서 메소드 하는 일
1 add_text Column 에 문구 추가 (= 헤더에 표시할 글자 박기)
2 display_document TOP-OF-PAGE 문서 출력 (= 만든 글자를 화면에 그리기)
3 list_processing_events TOP-OF-PAGE 이벤트 실행 (= ALV 가 헤더를 자기 위에 띄우도록 연결)

이 세 개의 짝지음이 OO TOP-OF-PAGE 의 골격입니다. 표 모양이 필요하면 add_table·add_column 을, 줄바꿈이 필요하면 new_line 을, 헤더가 누적/깜박이면 initialize_document 를, 여러 조각으로 만들었다면 merge_document 를 끼워 넣는 식.


3단계 — 헤더 스타일링: sap_emphasis · sap_color · sap_fontsize

add_text 의 세 인자(sap_emphasis·sap_color·sap_fontsize) 가 헤더의 시각적 분위기를 결정합니다. 값은 CL_DD_AREA·CL_DD_DOCUMENT 의 정적 상수에서 가져옵니다.

속성 자주 쓰는 상수 (의미)
sap_emphasis (강조) cl_dd_area=>strong (굵게), cl_dd_area=>emph (강조)
sap_color (배경/색) list_heading_int (제목), list_group_int (그룹), list_negative_int (경고), list_total_int (강조)
sap_fontsize (크기) cl_dd_document=>small · medium · large

스타일을 박는 짧은 예:

lo_key->add_text(
  text         = '조회 대상'
  sap_emphasis = cl_dd_area=>strong               " 굵게
  sap_color    = cl_dd_area=>list_heading_int     " 제목 색 (파랑 톤)
  sap_fontsize = cl_dd_document=>medium ).        " 중간 크기

sap_color 는 글자 색이 아니라 테이블 셀 배경 톤 에 가깝습니다. 같은 행 안에서 색을 섞어 쓰면 부자연스러우니 한 테이블 안에서는 1~2가지 톤으로 유지하는 게 깔끔합니다.


4단계 — list_processing_events 로 이벤트 연결

OO 방식의 TOP-OF-PAGE 는 이벤트 핸들러 클래스를 만들어 ALV Grid 에 등록합니다. 세 가지가 짝지어 동작합니다.

(a) 이벤트 핸들러 클래스 정의

CLASS lcl_event DEFINITION.
  PUBLIC SECTION.
    METHODS handle_top_of_page
      FOR EVENT top_of_page OF cl_gui_alv_grid
      IMPORTING e_dyndoc_id.
ENDCLASS.

CLASS lcl_event IMPLEMENTATION.
  METHOD handle_top_of_page.
    PERFORM build_top_of_page USING e_dyndoc_id.
  ENDMETHOD.
ENDCLASS.

e_dyndoc_idTYPE REF TO cl_dd_document 타입의 DD Document 참조로, 이 객체에 add_text 등을 호출하면 곧 헤더 영역에 그려집니다.

(b) 핸들러 등록 + list_processing_events 호출

DATA go_event TYPE REF TO lcl_event.

CREATE OBJECT go_event.
SET HANDLER go_event->handle_top_of_page FOR go_grid.

go_grid->list_processing_events(
  EXPORTING
    i_event_name = 'TOP_OF_PAGE'
    i_dyndoc_id  = go_doc ).

list_processing_events 가 핵심 — DD Document 객체(go_doc) 와 이벤트 이름을 ALV 그리드에 등록해 줍니다. 이걸 빠뜨리면 핸들러는 호출되어도 화면에 출력이 안 됩니다.

(c) Splitter + Docking 으로 헤더 자리 확보

OO 방식의 TOP-OF-PAGE 는 화면 상단에 별도 영역을 잡아 둬야 그릴 곳이 생깁니다. 보통 CL_GUI_DOCKING_CONTAINER 안에 CL_GUI_SPLITTER_CONTAINER 로 2행(상=헤더 / 하=ALV) 분할.

go_dock = NEW #( repid     = sy-repid
                 dynnr     = sy-dynnr
                 side      = cl_gui_docking_container=>dock_at_bottom
                 extension = 3000 ).

splitter = NEW #( parent = go_dock rows = 2 columns = 1 ).
go_top   = splitter->get_container( row = 1 column = 1 ).
go_bot   = splitter->get_container( row = 2 column = 1 ).

splitter->set_row_height( id = 1 height = 15 ).

go_grid = NEW #( i_parent = go_bot ).
go_doc  = NEW #( style    = 'ALV_GRID' ).

style = 'ALV_GRID' 은 DD Document 가 ALV 그리드 톤(폰트·간격) 에 맞춰지도록 하는 옵션. 빼면 더 기본적인 모양으로 그려집니다.


자주 빠뜨리는 함정

REUSE_ALV — i_callback_program 누락

REUSE_ALV_GRID_DISPLAY 호출 시 i_callback_program = sy-repid 를 빠뜨리면 it_events 의 FORM 콜백을 찾지 못해 TOP-OF-PAGE 가 그려지지 않습니다. sy-repid 만 박으면 거의 끝.

REUSE_ALV — FORM 시그니처 차이

TOP_OF_PAGE 콜백 FORM 은 인자가 없습니다. FORM top_line. · ENDFORM. 만 있으면 되고 USING 인자를 추가하면 동적 콜 실패. 대신 USER_COMMAND 콜백은 USING ucomm selfield 두 인자 필수라 헷갈리기 쉽습니다.

OO — list_processing_events 호출 누락

이벤트 핸들러는 SET HANDLER 로 잘 걸어 두고 list_processing_events 호출을 빠뜨리면 핸들러는 트리거되어도 화면에 아무 것도 안 나옵니다. set_table_for_first_display 호출 전에 등록해야 합니다.

OO — initialize_document 중복 호출 시 헤더 깜박임

refresh_table_display 후 TOP_OF_PAGE 가 다시 호출될 때 핸들러에서 무조건 initialize_document 부터 새로 호출해야 합니다. 이전 내용이 남아 누적되거나 깜박이는 현상은 거의 이걸 빠뜨려서 발생.

OO — DD Document 생성 누락

go_doc = NEW cl_dd_document( style = 'ALV_GRID' ) 인스턴스 생성을 빠뜨리면 list_processing_events 의 i_dyndoc_id 인자가 INITIAL 이라 헤더가 안 그려집니다.

Splitter 분할 비율

헤더 영역이 너무 작으면 add_text 가 잘려서 안 보입니다. splitter->set_row_height( id = 1 height = N ) 으로 픽셀 단위가 아닌 비율 단위(전체를 100 이라고 보면 N) 로 지정. 줄 수가 많으면 20

30, 한두 줄이면 10 

15 정도.

한글 깨짐

DD Document 의 add_texttext 파라미터는 SDYDO_TEXT_ELEMENT(255자) 입니다. 한글 + 영문 혼합 시 인코딩이 깨지면 시스템 로케일·로그온 언어 확인. 한글 환경 SAP 라면 정상 동작합니다.


전체 코드 — 복사용 통합본 (OO 방식)

OO 방식은 CALL SCREEN 을 쓰는 모듈풀이라 SAP 스탠다드 INCLUDE 6분할(T / C / SCR / O / I / F) 로 구성합니다. SE51 에서 Screen 100 을 빈 화면으로 만들고 Flow Logic 에 status_0100 · create_alv (PBO) · user_command_0100 (PAI) 만 연결.

*&---------------------------------------------------------------------*
*& Report ZRXX_ALV_TOP_OF_PAGE  (메인)
*&---------------------------------------------------------------------*
REPORT zrxx_alv_top_of_page.

INCLUDE zrxx_alv_top_of_page_t.     " TOP   - 전역 선언
INCLUDE zrxx_alv_top_of_page_c.     " CLASS - 로컬 이벤트 클래스
INCLUDE zrxx_alv_top_of_page_scr.   " SCR   - 셀렉션 스크린 (사용 안 함)
INCLUDE zrxx_alv_top_of_page_o.     " PBO   - OUTPUT 모듈
INCLUDE zrxx_alv_top_of_page_i.     " PAI   - INPUT 모듈
INCLUDE zrxx_alv_top_of_page_f.     " FORM  - 서브루틴

START-OF-SELECTION.
  SELECT * FROM sflight
    INTO CORRESPONDING FIELDS OF TABLE gt_sflight
    UP TO 50 ROWS.

  CALL SCREEN 100.

*&---------------------------------------------------------------------*
*& INCLUDE ZRXX_ALV_TOP_OF_PAGE_T  (TOP)
*&---------------------------------------------------------------------*
* Splitter / Docking
DATA : splitter TYPE REF TO cl_gui_splitter_container,
       go_top   TYPE REF TO cl_gui_container,
       go_bot   TYPE REF TO cl_gui_container,
       go_dock  TYPE REF TO cl_gui_docking_container.

* ALV Grid
DATA : go_grid TYPE REF TO cl_gui_alv_grid.

* TOP-OF-PAGE DD Document
DATA : go_doc TYPE REF TO cl_dd_document.

* 헤더 라인 구조 (제목/조회조건 컬렉션)
DATA : BEGIN OF gs_title,
         typ  TYPE c LENGTH 1,
         key  TYPE c LENGTH 30,
         info TYPE c LENGTH 200,
       END OF gs_title,
       gt_title LIKE TABLE OF gs_title.

* OK_CODE
DATA : ok_code LIKE sy-ucomm.

* 데이터
DATA : gs_sflight LIKE sflight,
       gt_sflight LIKE TABLE OF gs_sflight.

* 이벤트 핸들러 참조 (C INCLUDE 에서 정의)
DATA go_event TYPE REF TO lcl_event.

*&---------------------------------------------------------------------*
*& INCLUDE ZRXX_ALV_TOP_OF_PAGE_C  (CLASS)
*&---------------------------------------------------------------------*
CLASS lcl_event DEFINITION.
  PUBLIC SECTION.
    METHODS handle_top_of_page
      FOR EVENT top_of_page OF cl_gui_alv_grid
      IMPORTING e_dyndoc_id.
ENDCLASS.

CLASS lcl_event IMPLEMENTATION.
  METHOD handle_top_of_page.
    PERFORM build_top_of_page USING e_dyndoc_id.
  ENDMETHOD.
ENDCLASS.

*&---------------------------------------------------------------------*
*& INCLUDE ZRXX_ALV_TOP_OF_PAGE_SCR  (SCR)
*&---------------------------------------------------------------------*
* (이 글에서는 셀렉션 스크린 사용 안 함)

*&---------------------------------------------------------------------*
*& INCLUDE ZRXX_ALV_TOP_OF_PAGE_O  (PBO)
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'S100'.
  SET TITLEBAR  'T100'.
ENDMODULE.

MODULE create_alv OUTPUT.
  IF go_dock IS INITIAL.
    PERFORM create_docking.
    PERFORM set_event.
    PERFORM display_alv.
  ENDIF.
ENDMODULE.

*&---------------------------------------------------------------------*
*& INCLUDE ZRXX_ALV_TOP_OF_PAGE_I  (PAI)
*&---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE ok_code.
    WHEN 'BACK' OR 'EXIT' OR 'CANC'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.

*&---------------------------------------------------------------------*
*& INCLUDE ZRXX_ALV_TOP_OF_PAGE_F  (FORM)
*&---------------------------------------------------------------------*
* Docking + Splitter (상=헤더 / 하=ALV)
FORM create_docking.
  go_dock = NEW #( repid     = sy-repid
                   dynnr     = sy-dynnr
                   side      = cl_gui_docking_container=>dock_at_bottom
                   extension = 3000 ).

  splitter = NEW #( parent  = go_dock
                    rows    = 2
                    columns = 1 ).

  go_top = splitter->get_container( row = 1 column = 1 ).
  go_bot = splitter->get_container( row = 2 column = 1 ).

  splitter->set_row_height( id = 1 height = 15 ).

  go_grid = NEW #( i_parent = go_bot ).
  go_doc  = NEW #( style    = 'ALV_GRID' ).
ENDFORM.

* 이벤트 핸들러 등록 + list_processing_events
FORM set_event.
  CREATE OBJECT go_event.
  SET HANDLER go_event->handle_top_of_page FOR go_grid.

  go_grid->list_processing_events(
    EXPORTING
      i_event_name = 'TOP_OF_PAGE'
      i_dyndoc_id  = go_doc ).
ENDFORM.

* ALV 출력
FORM display_alv.
  go_grid->set_table_for_first_display(
    EXPORTING
      i_structure_name = 'SFLIGHT'
    CHANGING
      it_outtab        = gt_sflight ).
ENDFORM.

* TOP-OF-PAGE 핸들러 본체 — gs_title 채우고 출력 폼 호출
FORM build_top_of_page USING e_dyndoc_id TYPE REF TO cl_dd_document.
  CLEAR : gs_title, gt_title.

  gs_title-typ  = 'H'.
  gs_title-info = '항공편 조회 리포트'.
  APPEND gs_title TO gt_title.

  gs_title-typ  = 'S'.
  gs_title-key  = '조회 시각'.
  gs_title-info = |{ sy-datum DATE = USER } { sy-uzeit TIME = USER }|.
  APPEND gs_title TO gt_title.

  PERFORM render_top USING e_dyndoc_id.
ENDFORM.

* DD Document 에 표 그리기
FORM render_top USING p_dyndoc_id TYPE REF TO cl_dd_document.
  DATA : lo_table TYPE REF TO cl_dd_table_element,
         lo_key   TYPE REF TO cl_dd_area,
         lo_info  TYPE REF TO cl_dd_area.
  DATA : lv_text  TYPE sdydo_text_element.

  p_dyndoc_id->initialize_document( ).

* 2 컬럼 테이블 생성 (key, info)
  p_dyndoc_id->add_table(
    EXPORTING
      no_of_columns = 2
      width         = '500'
      border        = '1'
    IMPORTING
      table         = lo_table ).

  lo_table->add_column( IMPORTING column = lo_key ).
  lo_table->add_column( IMPORTING column = lo_info ).

  LOOP AT gt_title INTO gs_title.
    CASE gs_title-typ.
      WHEN 'H'.
*       Header — 한 셀에 큰 글씨로
        lv_text = gs_title-info.
        lo_key->add_text(
          text         = lv_text
          sap_emphasis = cl_dd_area=>strong
          sap_fontsize = cl_dd_document=>large
          sap_color    = cl_dd_area=>list_heading_int ).

      WHEN 'S'.
*       Selection — key / info 두 셀
        lv_text = gs_title-key.
        lo_key->add_text(
          text         = lv_text
          sap_emphasis = cl_dd_area=>strong
          sap_fontsize = cl_dd_document=>medium
          sap_color    = cl_dd_area=>list_heading_int ).

        lv_text = gs_title-info.
        lo_info->add_text(
          text         = lv_text
          sap_fontsize = cl_dd_document=>medium
          sap_color    = cl_dd_area=>list_group_int ).
    ENDCASE.

    p_dyndoc_id->new_line( ).
  ENDLOOP.

  p_dyndoc_id->display_document(
    EXPORTING
      parent = go_top ).
ENDFORM.

요약

단계 방식 핵심
1 REUSE_ALV 클래식 SLIS_T_LISTHEADER (H/S/A 라인) + SLIS_T_EVENT → FORM REUSE_ALV_COMMENTARY_WRITE
2 OO 핸들러 클래스 METHODS handle_top_of_page FOR EVENT top_of_page OF cl_gui_alv_grid
3 스타일링 add_text(sap_emphasis·sap_color·sap_fontsize)
4 이벤트 연결 SET HANDLER + list_processing_events( i_event_name = 'TOP_OF_PAGE' i_dyndoc_id = go_doc )
5 화면 구성 Docking + Splitter (상=헤더 / 하=ALV) + DD Document style = 'ALV_GRID'

TOP-OF-PAGE 의 본질은 "그리드 출력 직전에 한 번 발생하는 이벤트 훅". REUSE_ALV 에서는 FORM 콜백으로, OO 방식에서는 핸들러 메소드로 받습니다. 간단 조회 리포트라면 클래식이 짧아서 좋고, 편집 ALV 나 Docking + Splitter 결합 화면에서는 OO 방식이 자연스럽고 스타일 자유도도 높습니다. 두 패턴 모두 헤더는 "데이터 채우기 → 표·텍스트로 그리기 → ALV 가 그 아래" 3단계의 같은 흐름.


Disclaimer — 이 포스트는 실무 정리 노트를 바탕으로 AI 보조로 정리되었습니다. REUSE_ALV_GRID_DISPLAY·REUSE_ALV_COMMENTARY_WRITE FM 과 SLIS_T_LISTHEADER·SLIS_T_EVENT 타입 · CL_GUI_ALV_GRIDlist_processing_events·top_of_page 이벤트 · CL_DD_DOCUMENT · CL_GUI_DOCKING_CONTAINER · CL_GUI_SPLITTER_CONTAINER 는 NetWeaver 스탠다드 정의(ECC 6.0 / S/4HANA on-premise 기준) 입니다. SFLIGHT 는 SAP 스탠다드 학습 환경(IDES) 테이블이며 실무 적용 시 운영 테이블로 교체하시기 바랍니다. SE78 에 등록한 로고(i_logo) 는 환경별로 다르므로 운영 시스템의 실제 등록명을 사용하시기 바랍니다.