[9주차] SAP ERP : 집계하는 프로그램 READ MOVE, SELECT SINGLE

j_wisdom_h·2025년 2월 27일
0

SAP

목록 보기
4/8

집계하는 프로그램 READ MOVE, SELECT SINGLE 결과화면

1. 데이터 선언 및 초기화

REPORT z5week_hw_0226.

TABLES: sflight, scarr, spfli.

TYPE-POOLS: slsis.

TYPES: BEGIN OF t_sflight,
         carrid   TYPE sflight-carrid,
         connid   TYPE sflight-connid,
         price    TYPE sflight-price,
         currency TYPE sflight-currency,
         seatsmax TYPE sflight-seatsmax,
       END OF t_sflight.

DATA: it_sflight TYPE SORTED TABLE OF t_sflight WITH NON-UNIQUE KEY carrid connid,
      wa_sflight TYPE t_sflight.

DATA: it_collect  TYPE STANDARD TABLE OF t_sflight INITIAL SIZE 0,
      it_collect2 TYPE STANDARD TABLE OF t_sflight INITIAL SIZE 0,
      wa_collect  TYPE t_sflight.

TYPES: BEGIN OF t_move,
         carrid   TYPE sflight-carrid,
         connid   TYPE sflight-connid,
         price    TYPE sflight-price,
         currency TYPE sflight-currency,
         seatsmax TYPE sflight-seatsmax,
         carrname TYPE scarr-carrname,
         url      TYPE scarr-url,
         cityfrom TYPE spfli-cityfrom,
         cityto   TYPE spfli-cityto,
         deptime  TYPE spfli-deptime,
         arrtime  TYPE spfli-arrtime,
       END OF t_move.

DATA: it_move TYPE STANDARD TABLE OF t_move,
      wa_move TYPE t_move.

TYPES: BEGIN OF t_scarr,
         carrid   TYPE scarr-carrid,
         carrname TYPE scarr-carrname,
         url      TYPE scarr-url,
       END OF  t_scarr.

DATA: it_scarr TYPE STANDARD TABLE OF t_scarr,
      wa_scarr TYPE t_scarr.

TYPES: BEGIN OF t_spfli,
         carrid   TYPE spfli-carrid,
         connid   TYPE spfli-connid,
         cityfrom TYPE spfli-cityfrom,
         cityto   TYPE spfli-cityto,
         deptime  TYPE spfli-deptime,
         arrtime  TYPE spfli-arrtime,
       END OF t_spfli.

DATA: it_spfli TYPE STANDARD TABLE OF t_spfli,
      wa_spfli TYPE t_spfli.

DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,
      gd_tab_group TYPE slis_t_sp_group_alv,
      gd_layout    TYPE slis_layout_alv,
      gd_repid     LIKE sy-repid.

DATA : t TYPE slis_t_sp_group_alv.

SELECTION-SCREEN BEGIN OF BLOCK part6 WITH FRAME TITLE TEXT-006.
SELECT-OPTIONS s_carrid FOR sflight-carrid.
SELECTION-SCREEN END OF BLOCK part6.

2. 데이터 조회 및 처리

FORM data_retrieval.
  DATA: ld_color(1) TYPE c.

  " sflight 테이블에서 데이터 조회
  SELECT carrid connid price currency seatsmax
    FROM sflight
    INTO TABLE it_sflight
    WHERE carrid IN s_carrid.

  LOOP AT it_sflight INTO wa_sflight.
    COLLECT wa_sflight INTO it_collect.
  ENDLOOP.

  " scarr 테이블에서 데이터 조회
  SELECT carrid carrname url
    FROM scarr
    INTO TABLE it_scarr
    WHERE carrid IN s_carrid.

  " spfli 테이블에서 데이터 조회
  SELECT carrid connid cityfrom cityto deptime arrtime
    FROM spfli
    INTO TABLE it_spfli
    WHERE carrid IN s_carrid.

  " 데이터 처리 및 집계
  LOOP AT it_collect INTO wa_collect.
    CLEAR: wa_move, wa_scarr, wa_spfli.

    " wa_collect의 값을 wa_move로 복사
    MOVE-CORRESPONDING wa_collect TO wa_move.

    " scarr에서 항공사 정보를 조회
    SELECT SINGLE carrname, url FROM scarr WHERE carrid = @wa_move-carrid
      INTO (@wa_move-carrname, @wa_move-url).

    " spfli에서 공항 정보를 조회
    READ TABLE it_spfli WITH KEY carrid = wa_move-carrid
                                 connid = wa_move-connid
                                 INTO wa_spfli.
    IF sy-subrc = 0.
      " wa_spfli의 데이터를 wa_move로 이동
      wa_move-cityfrom = wa_spfli-cityfrom.
      wa_move-cityto = wa_spfli-cityto.
      wa_move-deptime = wa_spfli-deptime.
      wa_move-arrtime  = wa_spfli-arrtime.
    ENDIF.

    " wa_move를 it_move에 추가
    APPEND wa_move TO it_move.
  ENDLOOP.
ENDFORM. " DATA_RETRIEVAL

MOVE-CORRESPONDING 구문

MOVE-CORRESPONDING는 두 구조(혹은 내포된 구조) 간에 동일한 이름의 필드를 자동으로 매핑하여 값을 복사하는 ABAP 구문.
두 구조가 서로 다르더라도 구조간의 필드명이 동일한 경우, 필드들 간의 값을 자동으로 이동시키는 방식으로 동작한다. ( 행/테이블 )

MOVE-CORRESPONDING wa_collect TO wa_move. 

SELECT SINGLE

SELECT SINGLE은 데이터베이스 테이블에서 한 개의 레코드만 조회할 때 사용되는 SQL 구문.

결과로 여러 레코드가 조회된다면 조건에 맞는 첫 번째 레코드만 반환한다.
기본적으로 SELECT SINGLE은 하나의 레코드만 반환하므로, 여러 개의 레코드를 반환하는 SELECT와는 달리 INTO 구문을 사용해 하나의 변수 또는 구조체에 값을 담는다.

SELECT SINGLE carrname, url
  FROM scarr
  WHERE carrid = @wa_move-carrid
  INTO (@wa_move-carrname, @wa_move-url).

READ TABLE

READ TABLE은 내부 테이블에서 특정 조건을 만족하는 레코드를 조회하는 구문
해당 레코드가 테이블에 존재하는지 여부를 확인하고, sy-subrc 시스템 변수를 통해 결과를 알 수 있다.

READ TABLE it_spfli WITH KEY carrid = wa_move-carrid
                             connid = wa_move-connid
                             INTO wa_spfli.              
                            
profile
뚜잇뚜잇

0개의 댓글