본문 바로가기

카테고리 없음

[ITAB]조건에 맞는 데이터 조회하고 메세지 뿌리기

최초 작성일: 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.