본문 바로가기

SAP/ABAP

[ABAP] REPORT ZHANA01_02. 응용한 subroutine 예제

*&---------------------------------------------------------------------*
*& Report  ZHANA01_02
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zhana01_02.

* 구조체 방식으로 변수 선언
DATA: BEGIN OF wa_list,
       carrname TYPE scarr-carrname.
        INCLUDE TYPE spfli.
DATA: END OF wa_list,
      it_list LIKE TABLE OF wa_list.

DATA: it_scarr TYPE TABLE OF scarr,
      wa_scarr LIKE LINE OF it_scarr.

SELECT-OPTIONS so_car FOR wa_list-carrid.
SELECT-OPTIONS so_carn FOR wa_list-carrname.

* 마스터성 데이터를 가져오는 부분 선택화면 시작 전 실행하면 해당 페이지 실행시
* 단 한번 만 ACCESS 하므로 효율이 좋다고 볼 수 있다.
* 아래 방법이 READ TABLE 방식
INITIALIZATION.
  SELECT carrid carrname INTO CORRESPONDING FIELDS OF TABLE it_scarr
    FROM scarr.

* 선택 화면 시작
START-OF-SELECTION.

* 여기서 마스터 데이터를 가져오게 되면 조회 시 마다 동일한 데이터를 계속 읽어온다.
*  SELECT carrid carrname INTO CORRESPONDING FIELDS OF TABLE it_scarr
*    FROM scarr.

*  SELECT * INTO CORRESPONDING FIELDS OF TABLE it_list
*    FROM spfli
*    WHERE carrid IN so_car.


* SUBROUTINE 예제
  PERFORM get_data TABLES it_list.

  LOOP AT it_list INTO wa_list.
    CLEAR wa_scarr.
    READ TABLE it_scarr WITH KEY carrid = wa_list-carrid INTO wa_scarr.
    wa_list-carrname = wa_scarr-carrname.

    MODIFY it_list FROM wa_list INDEX sy-tabix.

    WRITE:/ wa_list-carrid, wa_list-carrname, wa_list-connid.
    CLEAR wa_list.
  ENDLOOP.


*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_IT_LIST  text
*----------------------------------------------------------------------*
FORM get_data  TABLES pt_list LIKE it_list.
  SELECT * INTO CORRESPONDING FIELDS OF TABLE pt_list
    FROM spfli
   WHERE carrid IN so_car.
ENDFORM.                    " GET_DATA