ABAP 의 클래시컬 리포트(WRITE 문 또는 List 출력) 를 실행하면 화면 맨 위에 "REPORT 프로그램명" 이 자동으로 출력됩니다. 운영 사용자 입장에선 이 라인이 화면을 차지할 뿐 가치가 없고, 보안 관점에서도 내부 프로그램 네이밍 규칙(ZRMM*·ZSD*) 이 노출되는 게 부담스럽습니다.
해결은 한 단어 — REPORT 구문 뒤에 NO STANDARD PAGE HEADING 옵션을 붙이는 것. 이 한 줄로 SAP 가 자동으로 박아주던 표준 페이지 헤더(프로그램명·List Heading·페이지 번호) 가 모두 사라지고, 사용자가 TOP-OF-PAGE 이벤트로 직접 헤더를 그릴 수 있게 됩니다.
이 글은 REPORT 명을 숨기는 표준 방법 + TOP-OF-PAGE 커스텀 헤더 + 관련 REPORT 옵션(LINE-SIZE / LINE-COUNT / MESSAGE-ID) + ALV 와의 차이 를 한 번에 정리한 메모입니다.
핵심 원리
표준 페이지 헤더의 구성과 NO STANDARD PAGE HEADING 의 효과 비교.
| 출력 항목 | 옵션 없음 (기본) | NO STANDARD PAGE HEADING |
|---|---|---|
| 프로그램명 라인 | report ZXXX_XXXX 자동 출력 |
출력 안 됨 |
| List Heading | 속성에 등록된 List Heading 자동 출력 | 출력 안 됨 |
| 페이지 번호 | 우측 상단 자동 표시 | 출력 안 됨 |
| 가로 구분선 | 헤더 하단에 자동 출력 | 출력 안 됨 |
| TOP-OF-PAGE | 표준 헤더 아래에 추가됨 | 그것만 출력 — 헤더 전부 사용자 책임 |
핵심 트레이드오프: 표준 헤더가 친절 하지만 사용자 화면을 더럽히고 내부 네이밍이 노출됩니다. NO STANDARD PAGE HEADING 으로 완전히 끄고 필요한 경우만 TOP-OF-PAGE 로 직접 헤더를 그리는 게 표준 패턴.
1단계 — REPORT 명령어에 옵션 추가
REPORT 구문 한 줄에 NO STANDARD PAGE HEADING 을 붙이면 끝.
REPORT zexample_no_header MESSAGE-ID ze
NO STANDARD PAGE HEADING.
이렇게 선언하면:
- 실행 시 화면 상단의
report ZXXX_XXXX라인이 사라짐 - 프로그램 속성(SE38 → Goto → Text Elements → List Headings) 에 등록된 List Heading 도 자동 출력 안 됨
- 페이지 번호·구분선도 자동 출력되지 않음

2단계 — REPORT 옵션 풀세팅
REPORT 구문에는 다양한 옵션이 있습니다. 자주 쓰는 것 정리.
| 옵션 | 역할 |
|---|---|
NO STANDARD PAGE HEADING |
표준 페이지 헤더(프로그램명·List Heading) 끄기 |
MESSAGE-ID zex |
프로그램 전체의 기본 메시지 클래스 지정 — MESSAGE ... TYPE 'E' 단축 |
LINE-SIZE 200 |
한 줄의 폭(컬럼 수) — 기본 83, 와이드 리스트는 200~255 |
LINE-COUNT 65 |
한 페이지의 줄 수 — 인쇄용 페이징 제어 |
DEFINING DATABASE xxx |
Logical Database 지정 (오래된 패턴 — 신규 사용 X) |
REDUCED FUNCTIONALITY |
일부 ABAP 명령 제한 (특수 케이스 외 비추) |
여러 옵션을 한 줄에 같이 쓸 수 있습니다 — 순서는 자유.
REPORT zexample_no_header MESSAGE-ID ze
NO STANDARD PAGE HEADING
LINE-SIZE 200
LINE-COUNT 65.
3단계 — TOP-OF-PAGE 로 커스텀 헤더 그리기
표준 헤더는 껐지만 화면 상단에 사용자 정의 헤더 가 필요하다면 TOP-OF-PAGE 이벤트를 사용합니다.
REPORT zexample_no_header NO STANDARD PAGE HEADING LINE-SIZE 200.
TOP-OF-PAGE.
WRITE: / sy-uline(120).
FORMAT COLOR 1 INTENSIFIED OFF.
WRITE: / ' 자재 현황 조회',
AT 60 '실행자 :', sy-uname,
AT 100 '실행일자 :', sy-datum.
FORMAT COLOR OFF.
WRITE: / sy-uline(120).
START-OF-SELECTION.
PERFORM read_data.
PERFORM display_list.
핵심 포인트:
TOP-OF-PAGE는 이벤트 — 새 페이지가 시작될 때마다 자동 호출FORMAT으로 색상·강조 제어 (COLOR 1~7)sy-uline로 구분선 출력AT n으로 컬럼 위치 지정
드릴다운 리스트(2차 리스트) 의 헤더는 TOP-OF-PAGE DURING LINE-SELECTION 으로 별도 정의 가능.
TOP-OF-PAGE DURING LINE-SELECTION.
WRITE: / ' 상세 조회 결과', AT 60 '실행자 :', sy-uname.
4단계 — ALV / Selection Screen 인 경우
표시 방식별로 헤더 제어 방법이 다릅니다.
| 표시 방식 | 헤더 제어 방법 |
|---|---|
| 클래시컬 리스트 | REPORT ... NO STANDARD PAGE HEADING + TOP-OF-PAGE |
| SAP List Viewer (ALV) | 파라미터 i_callback_top_of_page 로 콜백 FORM 지정 |
| 객체 지향 ALV (CL_GUI_ALV_GRID) | ALV Container 위쪽에 별도 Docking Container 로 헤더 영역 만듦 |
| Selection Screen | 자동으로 헤더 없음 — NO STANDARD PAGE HEADING 영향 없음 |
요점: NO STANDARD PAGE HEADING 은 클래시컬 리스트(WRITE 기반) 한정 효과. ALV 결과 화면의 상단 헤더는 별도 API 로 제어해야 합니다.
흔히 빠뜨리는 함정
REPORT 구문 외 위치에 쓰면 컴파일 에러
NO STANDARD PAGE HEADING 은 REPORT 문법 옵션 — 프로그램 첫 줄에만 가능. 중간에 동적으로 끄거나 켤 수 없습니다.
헤더가 사라졌는데 ALV 결과 화면 헤더는 그대로
ALV 사용 중이면 NO STANDARD PAGE HEADING 영향 없음. ALV 헤더는 i_callback_top_of_page 콜백 또는 Docking Container 로 따로 제어.
Include 프로그램은 REPORT 안 씀
INCLUDE 프로그램은 REPORT 가 아닌 INCLUDE 키워드로 시작 — 헤더 옵션 불가. 메인 프로그램의 REPORT 옵션을 따라갑니다.
TOP-OF-PAGE 이벤트가 안 호출됨
TOP-OF-PAGE 는 WRITE 로 첫 출력이 발생할 때 트리거. 데이터가 0건이면 호출 안 됨. 빈 결과라도 헤더는 출력하고 싶다면 WRITE: / ''. 같은 더미라도 출력.
List Heading 은 Text Elements 에 있음
표준 헤더에 표시되던 List Heading 텍스트는 SE38 → Goto → Text Elements → List Headings 에 저장. NO STANDARD PAGE HEADING 으로 출력은 꺼져도 텍스트 자체는 남아있으니, 다른 언어 번역 시 헷갈리지 않게 정리.
LINE-SIZE 안 늘리면 컬럼 잘림
ALV 가 아닌 WRITE 기반 리스트에서 가로로 길게 출력하려면 LINE-SIZE 200 식으로 늘려줘야 함. 기본 83 으로는 우측 잘림.
NO STANDARD PAGE HEADING 만 쓰고 헤더 빈 채로 두기
표준 헤더 끄고 TOP-OF-PAGE 도 없으면 화면이 데이터부터 바로 시작 — 사용자가 "여기가 뭐지?" 헷갈릴 수 있음. 반드시 커스텀 헤더 정의 권장.
전체 코드 — 복사용 통합본
위 단계를 하나의 ABAP 프로그램으로 합친 통합본입니다. SE38 에 그대로 복사해 활성화하면 동작합니다.
*&---------------------------------------------------------------------*
*& 표준 페이지 헤더(REPORT 명) 숨기기 + TOP-OF-PAGE 커스텀 헤더
*&---------------------------------------------------------------------*
REPORT zexample_no_header MESSAGE-ID ze
NO STANDARD PAGE HEADING
LINE-SIZE 200
LINE-COUNT 65.
*-----------------------------------------------------------------------
* 데이터 선언
*-----------------------------------------------------------------------
TABLES: mara.
SELECT-OPTIONS: s_matnr FOR mara-matnr.
DATA: gt_mara TYPE TABLE OF mara,
gs_mara TYPE mara.
*-----------------------------------------------------------------------
* TOP-OF-PAGE — 새 페이지마다 자동 호출
* 표준 헤더 끄고 사용자 정의 헤더를 직접 그림
*-----------------------------------------------------------------------
TOP-OF-PAGE.
WRITE: / sy-uline(120).
FORMAT COLOR 1 INTENSIFIED ON.
WRITE: / ' 자재 마스터 조회 리포트',
AT 60 '실행자 :', sy-uname,
AT 100 '일자 :', sy-datum, sy-uzeit.
FORMAT COLOR OFF.
WRITE: / sy-uline(120).
WRITE: / ' No.', AT 12 '자재번호', AT 30 '자재유형',
AT 42 '산업코드', AT 55 '생성자', AT 75 '생성일'.
WRITE: / sy-uline(120).
*-----------------------------------------------------------------------
* 드릴다운 시 TOP-OF-PAGE — 2차 리스트 헤더
*-----------------------------------------------------------------------
TOP-OF-PAGE DURING LINE-SELECTION.
FORMAT COLOR 4 INTENSIFIED ON.
WRITE: / ' ▶ 자재 상세 정보',
AT 60 '실행자 :', sy-uname.
FORMAT COLOR OFF.
WRITE: / sy-uline(120).
*-----------------------------------------------------------------------
* END-OF-PAGE — 페이지 하단 (예: 푸터·페이지 번호)
*-----------------------------------------------------------------------
END-OF-PAGE.
WRITE: / sy-uline(120).
WRITE: AT 100 'Page :', sy-pagno.
*-----------------------------------------------------------------------
* START-OF-SELECTION
*-----------------------------------------------------------------------
START-OF-SELECTION.
SELECT * INTO TABLE gt_mara
FROM mara
UP TO 50 ROWS
WHERE matnr IN s_matnr.
IF sy-subrc <> 0.
* ★ 데이터 0건이면 TOP-OF-PAGE 가 호출 안 되므로 직접 호출용 더미
WRITE: / '조회 결과가 없습니다.'.
EXIT.
ENDIF.
DATA(lv_seq) = 0.
LOOP AT gt_mara INTO gs_mara.
lv_seq = lv_seq + 1.
WRITE: / lv_seq UNDER ' No.',
gs_mara-matnr UNDER '자재번호',
gs_mara-mtart UNDER '자재유형',
gs_mara-mbrsh UNDER '산업코드',
gs_mara-ernam UNDER '생성자',
gs_mara-ersda UNDER '생성일'.
ENDLOOP.
* ※ 참고:
* - NO STANDARD PAGE HEADING 은 REPORT 첫 줄에만 사용 가능 (동적 변경 X)
* - ALV 결과 화면의 헤더는 i_callback_top_of_page 콜백으로 따로 제어
* - LINE-SIZE 안 늘리면 가로로 잘림 — 와이드 리스트는 200~255 권장
* - List Heading 자동 출력도 같이 꺼짐 — Text Elements 의 List Heading 무시됨
요약
| 단계 | 처리 | 핵심 |
|---|---|---|
| 1 | REPORT 옵션 추가 | REPORT name NO STANDARD PAGE HEADING. — 프로그램 첫 줄에만 |
| 2 | 관련 REPORT 옵션 | MESSAGE-ID · LINE-SIZE · LINE-COUNT 함께 사용 |
| 3 | TOP-OF-PAGE | 사용자 정의 헤더를 그릴 이벤트 (1차 리스트용) |
| 4 | 드릴다운 헤더 | TOP-OF-PAGE DURING LINE-SELECTION — 2차 리스트용 |
| 5 | ALV 는 다름 | ALV 헤더는 i_callback_top_of_page 콜백 또는 Docking Container 로 별도 제어 |
REPORT 실행 시 상단에 자동으로 박히는 프로그램명은 REPORT name NO STANDARD PAGE HEADING. 한 줄이면 사라집니다. 표준 헤더를 끈 자리에 정보를 보이고 싶다면 TOP-OF-PAGE 이벤트로 직접 그리고, 드릴다운에는 TOP-OF-PAGE DURING LINE-SELECTION 을 추가하는 게 표준. ALV 결과 화면의 헤더는 별도 콜백 API 로 제어해야 한다는 점만 기억하면 됩니다.
Disclaimer — 이 포스트는 실무 정리 노트를 바탕으로 AI 보조로 정리되었습니다. REPORT 구문 옵션·TOP-OF-PAGE·END-OF-PAGE 이벤트는 SAP NetWeaver 표준 ABAP 문법으로 시스템 버전 의존 없이 동작합니다. 다만 NO STANDARD PAGE HEADING 은 WRITE 기반 클래시컬 리스트에만 효과가 있고, ALV(REUSE_ALV_* · CL_GUI_ALV_GRID) 결과 화면 헤더는 별도 API 로 제어해야 합니다. 운영 적용 전 출력 결과·페이지 번호·드릴다운 동작을 충분히 테스트하시기 바랍니다.