본문 바로가기
ERP-SAP/ABAP연습문제

초보를 위한 ABAP 연습문제 출제 5강 (데이터 SELECT, LOOP, READ 하기)

by 행복한워니의 기록 2013. 12. 5.
728x90
반응형

항공편 가져오기

 
 
선행공부용 프로그램

선행공부소스보기

*&---------------------------------------------------------------------*
*& Report  Y_TEST_07
*&
*&---------------------------------------------------------------------*
REPORT  Y_TEST_07.

" 국가 테이블.
DATA LS_T005 TYPE T005,
       LT_T005 LIKE TABLE OF LS_T005.
" 국가이름 테이블.
DATA LS_T005T TYPE T005T,
       LT_T005T LIKE TABLE OF T005T.


" LT_T005 채우기.
SELECT *
  INTO TABLE LT_T005
  FROM T005.

" LT_T005T 채우기.
SELECT *
  INTO TABLE LT_T005T
  FROM T005T
  WHERE SPRAS SY-LANGU.

TYPES BEGIN OF ITAB,
         LAND1 TYPE LAND1,
         SPRAS TYPE SPRAS,
         LANDX TYPE LANDX,
        END   OF ITAB.

DATA LS_ITAB TYPE ITAB,
       LT_ITAB LIKE TABLE OF LS_ITAB.

LOOP AT LT_T005 INTO LS_T005" 기준테이블.

  READ TABLE LT_T005T INTO LS_T005T WITH KEY LAND1 LS_T005-LAND1.

  IF SY-SUBRC 0.
    LS_ITAB-LANDX LS_T005T-LANDX.
  ENDIF.

  LS_ITAB-LAND1 LS_T005-LAND1.
  LS_ITAB-SPRAS LS_T005-SPRAS.

  APPEND LS_ITAB TO LT_ITAB.
  CLEARLS_ITAB.

ENDLOOP.

LOOP AT LT_ITAB INTO LS_ITAB.

WRITE:/ LS_ITAB-LAND1LS_ITAB-SPRASLS_ITAB-LANDX.

ENDLOOP.

 
주제 : 항공편은 American Airline(AA) 를 이용하여 여행을 갈 생각이다.     
출발은 2010년  5월 30일부터 2010년 6월 30일 사이에 휴가를 내서 출발할 예정이며, 여행지는 나의 휴가날에 AA 항공사에 티켓이 있으면 여행을 떠날 생각이다.    
해당 비행편의 출발시간과 도착시간을 구하고, 해당 항공사의 URL(홈페이지 주소) , 와  남은 좌석수를 가져오도록 하자.     
    
    
DB     
SPFLI - CARRID(AA,항공편)    
SCARR- CARRID(AA, 항공편)     
SFLIGHT - SEATSMAX(총 좌석수), SEATSOCC (예약된 좌석수)    
    
스크린    
항공편 입력 필드 AA   
휴가일 FROM 입력 필드    
휴가끝 TO 입력 필드     
    
    
로직    
SFLIGHT DB 에서 AA 항공사의 출발 일자가 2010년 5월 30일 부터 2010년 6월 30일 사이의 항공편을 구하고 (항공편 ID : CARRID)     
CARRID 를 통해 SPFLIT DB 를 읽어서 여행지 (CITYFROM, CITYTO) 를 가져온다.     
홈페이지는 SCARR DB를 읽어서 항공사에 맞는 URL을 가져오도록 한다.    
남은 좌석수는SFLIGHT DB 에서  SEATMAX 에서 SEATSOCC 를 빼도록 한다.     
    
출력     
CARRID, CONNID, CITYFRON, CITYTO, DEPTIME, ARRTIME, 전체좌석, 예약좌석, 남은 좌석, URL 을 출력한다.  
 
 
 

더보기

TABLES SPFLISFLIGHT.

SELECTION-SCREEN BEGIN OF BLOCK B01 WITH FRAME TITLE TEXT-001.

SELECT-OPTIONS S_CARRID FOR  SPFLI-CARRID NO-EXTENSION NO INTERVALS.
PARAMETERS     P_FRDATE TYPE SY-DATUM .
PARAMETERS     P_TODATE TYPE SY-DATUM .

SELECTION-SCREEN END OF BLOCK B01.

DATA LS_SPFLI   TYPE          SPFLI,
       LT_SPFLI   TYPE TABLE OF SPFLI.

DATA LS_SCARR   TYPE          SCARR,
       LT_SCARR   TYPE TABLE OF SCARR.

DATA LS_SFLIGHT TYPE          SFLIGHT,
       LT_SFLIGHT TYPE TABLE OF SFLIGHT.




" SPFLI 정보 갖고오기.
SELECT *
  INTO TABLE LT_SPFLI
  FROM  SPFLI
  WHERE CARRID IN S_CARRID.

" SFLIGHT 정보 갖고오기.
SELECT *
  INTO TABLE LT_SFLIGHT
  FROM  SFLIGHT
  WHERE CARRID IN S_CARRID
    AND FLDATE GT P_FRDATE
    AND   FLDATE LT P_TODATE ).

" SCARR 정보 갖고오기.
SELECT *
  INTO TABLE LT_SCARR
  FROM  SCARR
  WHERE CARRID IN S_CARRID.


TYPES BEGIN OF A01,

         CARRID   TYPE S_CARR_ID,
         CONNID   TYPE S_CONN_ID,
         CITYFROM TYPE S_FROM_CIT,
         CITYTO   TYPE S_TO_CITY,
         DEPTIME  TYPE S_DEP_TIME,
         ARRTIME  TYPE S_ARR_TIME,
         SEATSMAX TYPE S_SEATSMAX,        " 전좌석 수.
         SEATSOCC TYPE S_SEATSOCC,        " 점유좌석 수.
         SEATS    TYPE I,
         URL      TYPE S_CARRURL,

       END OF A01.

DATA LS_A01 TYPE A01.
DATA LT_A01 LIKE TABLE OF LS_A01.

**READ TABLE LT_SPFLI WITH KEY S_CARRID INTO LS_SPFLI.
**READ TABLE LT_SFLIGHT INTO LS_SFLIGHT WITH KEY CARRID = S_CARRID .
**READ TABLE LT_SCARR WITH KEY S_CARRID INTO LS_SCARR.

LOOP AT LT_SFLIGHT INTO LS_SFLIGHT.

  READ TABLE LT_SPFLI INTO LS_SPFLI WITH KEY CARRID LS_SFLIGHT-CARRID
                                             CONNID LS_SFLIGHT-CONNID.
  IF SY-SUBRC 0.

    LS_A01-CARRID   LS_SPFLI-CARRID.
    LS_A01-CONNID   LS_SPFLI-CONNID.
    LS_A01-CITYFROM LS_SPFLI-CITYFROM.
    LS_A01-CITYTO   LS_SPFLI-CITYTO.
    LS_A01-DEPTIME  LS_SPFLI-DEPTIME.
    LS_A01-ARRTIME  LS_SPFLI-ARRTIME.

  ENDIF.

  READ TABLE LT_SCARR INTO LS_SCARR WITH KEY CARRID LS_SFLIGHT-CARRID.

  IF SY-SUBRC 0.

    LS_A01-URL LS_SCARR-URL.

  ENDIF.

  LS_A01-SEATSMAX LS_SFLIGHT-SEATSMAX.
  LS_A01-SEATSOCC LS_SFLIGHT-SEATSOCC.
  LS_A01-SEATS    LS_A01-SEATSMAX LS_A01-SEATSOCC.    " 잔여좌석 수

  APPEND LS_A01 TO LT_A01.
  CLEAR  LS_A01.

ENDLOOP.



LOOP AT LT_A01 INTO LS_A01.

  WRITE:/ LS_A01-CARRIDLS_A01-CONNIDLS_A01-CITYFROMLS_A01-CITYTOLS_A01-DEPTIMELS_A01-ARRTIMELS_A01-SEATSMAXLS_A01-SEATSOCCLS_A01-SEATS(40LS_A01-URL.

ENDLOOP.

728x90
반응형