1. 리스트 프로세싱이란?
TOP-OF-PAGE.
END-OF-PAGE.
AT LINE-SELECTION.
AT PF<NN>
AT USER-COMMAND>.
- 리스트 처리는 기본적으로 사용자가 데이터를 리스트 형태로 출력하고, 상호작용 할 수 있게 해주는 것
- 사용자가 특정 행을 클릭했을 때 이벤트를 발생시킴
- 특정 위치나 값이 클릭되면 다른 화면으로 이동
2. 기본 흐름
START-OF-SELECTION.
LOOP AT itab INTO wa.
WRITE: / wa-field1, wa-field2.
ENDLOOP.
- 이렇게 하면 리스트 출력 화면이 나타나느데, 여기서 인터랙션을 원하면 이벤트 핸들러를 사용할 수 있다.
3. 주요 이벤트
이벤트 | 설명 |
AT LINE-SELECTION | 리스트에서 한 줄을 더블클릭하면 발생 |
AT USER-COMMAND | PF-STATUS에 등록된 버튼이나 함수 키(F코드) 클릭 시 발생 |
AT PFnn | F1~F12 같은 Function Key 누름 감지 |
TOP-OF-PAGE | 리스트 상단에 제목, 열 헤더 등을 지정 |
END-OF-PAGE | 페이지 끝에 푸터나 고정 내용 출력 |
4. 예시: 더블클릭 시 상세보기
START-OF-SELECTION.
LOOP AT gt_scarr INTO gs_scarr.
WRITE: / gs_scarr-carrid, gs_scarr-carrname.
HIDE gs_scarr.
ENDLOOP.
AT LINE-SELECTION.
WRITE: / 'Selected Carrier:', gs_scarr-carrid,
/ 'Name:', gs_scarr-carrname.
- HIDE gs_scarr : 클릭한 줄에 있는 데이터를 숨겨서 저장 => 나중에 at line-selection에서 불러올 수 있음
5. TOP-OF-PAGE 예시 (제목 등)
TOP-OF-PAGE.
WRITE: / '항공사 목록 보고서', / sy-uline.
6. 추가 팁: NEW-PAGE 사용
- NEW-PAGE. → 새로운 페이지로 넘어감 (ex. 상세 페이지)
- NEW-PAGE PRINT ON. → 프린트용 리스트 시작
1) TOP-OF-PAGE
- 새로운 page에 첫번째 데이터가 출력되기전에 수행됨
- no standard page heading 옵션으로 생성된 프로그램에서 직접 header을 입력할 때 사용함
- 추가적인 옵션이 없을 때에는 기초적인 LIST생성 시에만 사용
- NEW PAGE구문에서는 EVENT를 수행하지 않음
2)END-OF-PAGE
- end-of-page는 현재 페이지의 남은 공간이 부족할 때 수행되는 이벤트
- 즉, 페이지의 footer를 지정함
- list-count를 지정하면, 페이지가 line-count수를 넘어가면 수행됨
- line-count 10 => 한 페이지의 총 라인수 의미
- (2) -> page footer에 뿌려줄 라인 수를 의미한다.
3) AT LINE-SELECTION
- report 할 때 LINE-SIZE와 COUNT를 함
- click this line하니까 정말로 그 페이지에 가진다! 짱신기하고 재밌다...우왕
4) AT PF<NN>
AT PF <NN>.
- PF<nn> 으로 선언된 function을 수행한다. function key nn번을 눌렀을 때 발생하는 이벤트
- <nn>은 1~24번까지의 숫자
- F5 를 누르면, PF05가 나온다.
5. AT USER-COMMAND
6. TOP-OF-PAGE DURING LINE-SELECTION
7. HIDE AREA
- hide로 선언된 변수는 LIST에서 더블클릭하면 HIDE WORK AREA로 데이터가 저장됨
- HIDE는 기본 리스트(List)에 출력된 데이터와 “연결된 숨겨진 값”을 저장해두는 구문 -> 사용자가 리스트의 해당 행을 선택(클릭)했을 때, 그 숨겨둔 값을 자동으로 복원해서 사용!
REPORT zhide_example.
TABLES: sflight.
DATA: gs_sflight TYPE sflight.
START-OF-SELECTION.
SELECT carrid connid
FROM sflight
INTO gs_sflight.
WRITE: / '항공사:', gs_sflight-carrid.
HIDE gs_sflight.
ENDSELECT.
TOP-OF-PAGE DURING LINE-SELECTION.
WRITE: / '*** 상세 정보 ***'.
AT LINE-SELECTION.
" 사용자가 클릭한 행의 gs_sflight가 자동 복원됨!
WRITE: / '선택된 항공사:', gs_sflight-carrid.
WRITE: / '선택된 항공편:', gs_sflight-connid.
8. WRITE 구문
- write 구문은 output 리스트에 데이터를 쓰는 기능을 함
- 값을 할당하는 기능도 수행
- 리스트용으로 사용될 때는 데이터를 list buffer에 저장함
- data 구문으로 선언된 필드
- tables 구문으로 선언된 구조체의 항목
- field-symbol로 선언된 필드심볼
- 언어에 종속적이지 않은 text문장
1) AT pl
- 필드의 위치와 길이를 지정해서 줌
- 슬래시 기호는 new line을 의미하며, 숫자 앞에 선언되어야 함
REPORT z12_24 NO STANDARD PAGE HEADING
LINE-SIZE 120
LINE-COUNT 78.
DATA : gt_data TYPE TABLE OF sflight WITH HEADER LINE.
TOP-OF-PAGE.
WRITE : /50 'REPORT FORMAT' CENTERED.
WRITE : /48 '--------------' CENTERED.
SKIP 2.
START-OF-SELECTION.
WRITE : /(51) sy-uline, 53(68) sy-uline,
/ sy-vline NO-GAP, 51 sy-vline NO-GAP, 53 sy-vline NO-GAP, 120 sy-vline NO-GAP.
WRITE : 2(9) 'Report no' NO-GAP CENTERED, sy-vline NO-GAP.
WRITE : 12(5) '00001' NO-GAP, 51 sy-vline NO-GAP.
WRITE : 54(11) 'Report date' NO-GAP CENTERED, sy-vline NO-GAP.
WRITE : 66(10) sy-datum NO-GAP CENTERED, 120 sy-vline NO-GAP.
WRITE : /(51) sy-uline, 53(68) sy-uline.
SKIP.
WRITE : /(120) sy-uline.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_data FROM sflight UP TO 10 ROWS.
LOOP AT gt_data.
WRITE : / sy-vline NO-GAP, 2(10) 'Carrier Id', sy-vline NO-GAP.
WRITE : 14(4) gt_data-carrid, sy-vline NO-GAP.
WRITE : 20(18) 'connection number', sy-vline NO-GAP.
WRITE : 40(4) gt_data-connid, sy-vline NO-GAP.
WRITE : 46(12) 'flight date', sy-vline NO-GAP.
WRITE : 60(12) gt_data-fldate, sy-vline NO-GAP.
WRITE : 74(10) 'Air Fare', sy-vline NO-GAP.
WRITE : 86(11) gt_data-price, sy-vline NO-GAP.
WRITE : 100(15) 'Local currency', sy-vline NO-GAP.
WRITE : 116(3) gt_data-currency, sy-vline NO-GAP.
WRITE : /(120) sy-uline.
ENDLOOP.
- sflight테이블에서 항공편 정보를 최대 10건까지 조회하여, 리스트 형태로 보고서를 출력하는 예제 => 고전 리스트 보고서 출력 형태
2) write option
옵션 | 설명 |
NO-GAP | 출력 간 공백 없이 바로 붙여 출력 |
CENTERED | 지정 위치에 텍스트를 가운데 정렬 |
LEFT-JUSTIFIED | 왼쪽 정렬 (기본값) |
RIGHT-JUSTIFIED | 오른쪽 정렬 |
(len) | 출력할 필드 길이 지정 (WRITE : (10) var.) |
UNDER | 기존에 출력된 필드 아래에 출력 |
AT | 특정 필드 값이 바뀔 때만 출력 (AT NEW, AT END OF 이벤트와 함께 사용) |
/ | 줄바꿈 (WRITE : / 'Hello'. → 다음 줄에 출력됨) |
3) write output 포맷
4) Write as checkbox
- modify는 리스트의 line속성을 변경하는 명령어
5) WRITE AS SYMBOL
- LIST의 필드를 심볼로 보여줌
INCLUDE <SYMBOL>.
WRITE : SYM_RIGHT_HAND AS SYMBOL,
'ENJOY ABAP',
SYM_LEFT_HAND AS SYMBOL.
6) WRITE AS LINE
7) write as quickinfo
- mouse 올리면 'this is quick info'라고 뜸
- submit구문을 이용해 12-1을 호출해서 실행하면, AA 에 대한 정보가 나온다.
SUBMIT 구문이란?
다른 ABAP 리포트 프로그램을 실행시키는 명령어
마치 SE38에서 실행하듯이 실행시킴
SUBMIT zreport_name.
- 다른 리포트 프로그램 zreport_name을 실행한다.
- 실행 후 리포트가 종료되면 현재 프로그램으로는 돌아오지 않는다.
- 마치 프로그램이 넘어간 것처럼 된다
SUBMIT zreport_name AND RETURN.
- 실행 후 되돌아오게 하는 것
- 리포트가 끝나면 원래 내 프로그램으로 돌아옴
리포트에 값 넘기기
SELECT-OPTIONS: s_carr FOR sflight-carrid.
PARAMETERS: p_date TYPE sflight-fldate.
SUBMIT zreport_name
WITH s_carr IN s_carr_range
WITH p_date = '20250101'
AND RETURN.
🌠 동적으로 넘기기(중요!!)
DATA: gt_seltab TYPE TABLE OF rsparams WITH HEADER LINE.
CLEAR gt_seltab.
gt_seltab-selname = 'S_CARR'.
gt_seltab-kind = 'S'. " SELECT-OPTION
gt_seltab-sign = 'I'. " Include
gt_seltab-option = 'EQ'. " Equal
gt_seltab-low = 'AA'.
APPEND gt_seltab.
SUBMIT zreport_name
WITH SELECTION-TABLE gt_seltab
AND RETURN.
- abap 표준 구조체 RSPARAMS를 활용하면 리포트에 넘기는 값을 코드로 구성해서 넘길 수 있음
'SAP' 카테고리의 다른 글
아밥 써티 러닝허브 구독 후 취득 후기, 준비사항 등 (0) | 2025.05.27 |
---|---|
sap gui 환경 설치하기 - 유료 결제 (0) | 2025.05.20 |
easy abap 40. Report Program - 이벤트 (0) | 2025.05.16 |
easy abap 39. Report Program - 프로그램 및 데이터 선언 (0) | 2025.05.16 |
easy abap 38. 필드심볼_Field Symbol (0) | 2025.05.16 |