REPORT zc215_test.

DATA : gt_itab TYPE TABLE OF sflight,
       gs_wa   TYPE sflight.

SELECT carrid connid
  FROM spfli 
  INTO CORRESPONDING FIELDS OF TABLE gt_itab
  PACKAGE SIZE 5. 
  LOOP AT gt_itab INTO gs_wa.
    WRITE : / gs_wa-carrid, gs_wa-connid.
  ENDLOOP.
  ULINE 1.
ENDSELECT.

PACKAGE SIZE 5에 따라, 

출력이 5개씩 되어야하는데,

ULINE 1을 하면 4개씩만 출력이 되었다.

 

 

이게 원래 기존 26행짜리고,

ULINE 1이 들어가면

 

이런식으로 총 20행만 나온다.

 

나머지 6행은 어디로 간걸까.....?

 

PACKAGE SIZE는 데이터 베이스에서 한 번에 가져오는 레코드 수를 지정하는데, ABAP은 화면에 표시할 수 있는 라인 수을 고려한다.

ULINE은 화면에 한 줄을 차지하는데, 이 줄도 ABAP시스템이 출력할 때 하나의 행으로 계산한다.

  1. PACKAGE SIZE 5로 설정했을 때
  2. 시스템은 5개의 행을 출력해야 한다고 계산하지만
  3. 이 중 1개의 행은 ULINE에 의해 소비됨
  4. 남은 4개의 행만 실제 데이터로 출력됨

즉, ABAP은 일종의 '출력 버퍼' 개념으로 작동하여 PACKAGE SIZE에 지정된 숫자만큼의 라인(데이터 라인 + 형식 라인)을 출력하려고 시도한다. ULINE이 이 중 하나의 라인을 차지하기 때문에 실제 데이터는 하나 적게 표시되는 것이다.

 

그러면 어떻게 해결해야할까?

나는 이걸 한 줄씩 보고싶은데 말이다!

1. 문자열대입하기

LOOP AT gt_itab INTO gs_wa.
  WRITE : / gs_wa-carrid, gs_wa-connid.
ENDLOOP.
WRITE : / '---------------------'.  " 단순 문자열 선
ENDSELECT.

 

2. SKIP사용하기

LOOP AT gt_itab INTO gs_wa.
  WRITE : / gs_wa-carrid, gs_wa-connid.
ENDLOOP.
SKIP.  " 한 줄 건너뛰기
ENDSELECT.

 

 

skip하면 26줄 다 잘 나온다!

+ Recent posts