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를 활용하면 리포트에 넘기는 값을 코드로 구성해서 넘길 수 있음

 

+ Recent posts