최초 작성일: 23.01.28
최종 작성일:
목적: 조건에 맞는 데이터를 SELECT하되, RANGE함수와 MESSAGE기능을 이용하자
명령어: SELECT, LOOP, WRITE DISPLAY
타켓팅 테이블: VBAK
조건: VBAK-ERDAT = 2017.01.01 AND 2017.01.02
추가:보여주는 필드는 차례로 7개까지. 보여 주기 전에 몇건 조회 되었다고 메세지 뿌리기
REPORT ZRED00VBAK.
* 데이터 선언 부
DATA: gt_itab TYPE TABLE OF vbak.
DATA: gv_cnt TYPE i.
*range 변수 선언
DATA: gr_erdat TYPE RANGE OF vbak-erdat.
gr_erdat = VALUE #(
( sign = 'I' option = 'BT' low = '20170101' high = '20170102' ) ).
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_itab
FROM vbak
WHERE erdat IN gr_erdat.
****ITAB이 있을 경우, WRITE한다.
DESCRIBE TABLE gt_itab LINES gv_cnt. "itab이 몇건인지 카운팅
IF gv_cnt > 0.
LOOP AT gt_itab
WHERE: /
gt_itab-VBELN,
gt_itab-ERDAT,
gt_itab-ERZET,
ENDLOOP.
ENDIF.
인터널 테이블을 가지고 루프를 돌릴때 Dictionary를 복사한 또 다른 테이블을 만들어서 루프를 돌릴때 TO 새로운 테이블로 명시하거나
혹은 ASSIGNING FIEDL-SYMBOL을 이용해서 WR를 대신한다.
REPORT ZRED00VBAK MESSAGE-ID zleg00.
* 데이터 선언 부
DATA: gt_itab TYPE TABLE OF vbak.
DATA: gv_cnt TYPE i.
*range 변수 선언
DATA: gr_erdat TYPE RANGE OF vbak-erdat.
gr_erdat = VALUE #(
( sign = 'I' option = 'BT' low = '20170101' high = '20170102' ) ).
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_itab
FROM vbak
WHERE erdat IN gr_erdat.
****ITAB이 있을 경우, WRITE한다.
DESCRIBE TABLE gt_itab LINES gv_cnt. "itab이 몇건인지 카운팅
IF gv_cnt > 0.
LOOP AT gt_itab ASSIGNING FIELD-SYMBOL(<ls_itab>).
WRITE: /
<ls_itab>-VBELN,
<ls_itab>-ERDAT,
<ls_itab>-ERZET.
ENDLOOP.
MESSAGE s056 WITH gv_cnt. "~건이 조회되었습니다"
ELSE.
MESSAGE s011. "데이터가 없습니다
ENDIF.