BC400-1-2 (오후)

Beemajor·2024년 7월 23일

Program: ZR5A##114 ( [S5A-##] Subroutine 연습 )

  • 항공편 정보 취득
  1. SE80에서 top include 포함해서 생성 후에, f01를 추가 생성
  2. 항공사 코드, 항공편 번호 입력받음
  • 아래 내용은 모두 Subroutine을 사용하지 않고 생성
    1) 입력받은 정보를 가지고, Table SPFLI에서
    일치하는 항공편 정보를 취득( Field: CARRID, CONNID, AIRPFROM, AIRPTO )
    2) 항공편정보 표시:
    Airline Code: AA
    Connection Number: 0017
    Dep. airport: JFK
    Dest. airport: SFO
    3) 항공사 코드, 항공편 번호를 둘 중에 하나라도 입력하지 않으면
    '조건을 모두 입력하세요.' Message 표시
    4) 입력한 조건에 일치하는 항공편 정보가 없다면,
    '조건에 해당되는 항공편 정보가 없습니다.' Message 표시
    5) T-Code 생성
  1. 1번 Program이 완성되고, 테스트가 완료 되었다면,
    USING / CHAINGING 없는 PERFORM / FORM을 이용해서 Program 변경
    예) 항공편 정보를 읽어오는 SELECT 부분과 정보를 출력하는(WRITE) 부분을 Subroutine 처리

아래는 1번 문제 해답입니다.

PARAMETERS: pa_carid TYPE spfli-carrid,
            pa_conid TYPE spfli-connid.

DATA: gv_carid TYPE string,
      gv_conid TYPE string,
      gv_airfr TYPE string,
      gv_airto TYPE string.

START-OF-SELECTION.

  SELECT SINGLE carrid connid airpfrom airpto
    from spfli
    INTO (gv_carid,gv_conid,gv_airfr,gv_airto)
    where carrid EQ pa_carid
      AND connid EQ pa_conid.

    IF pa_carid is INITIAL OR pa_conid is INITIAL.
      MESSAGE I002(ZMC5A12).
      ELSEIF sy-subrc is NOT INITIAL.
         MESSAGE I003(ZMC5A12).
          ELSEIF sy-subrc is INITIAL.
             write: 'Airline Code: ', gv_carid,/
                    'Connection Number: ',gv_conid,/
                    'Dep. airport: ', gv_airfr,/
                    'Dest. airport: ', gv_airto.
    ENDIF.

아래는 2번 문제 해답입니다.


INCLUDE zr5a12114_top                           .    " Global Data
INCLUDE zr5a12114_f01                           .  " FORM-Routines

START-OF-SELECTION.

PERFORM validate_parameters USING pa_carid pa_conid CHANGING gv_subrc.
  
IF gv_subrc = 0.
PERFORM select USING pa_carid pa_conid CHANGING gv_subrc gv_carid gv_conid gv_airfr gv_airto.
PERFORM write USING gv_subrc gv_carid gv_conid gv_airfr gv_airto.
ENDIF.
 
여기까지가 메인!!!

PARAMETERS: pa_carid TYPE spfli-carrid,
            pa_conid TYPE spfli-connid.

DATA: gv_carid TYPE string,
      gv_conid TYPE string,
      gv_airfr TYPE string,
      gv_airto TYPE string,
      gv_aifna TYPE string,
      gv_aitna TYPE string.

DATA gv_subrc TYPE sy-subrc.

여기까지가 TOP!!!

  
  FORM select USING VALUE(pa_carid)
                  VALUE(pa_conid)
             CHANGING VALUE(gv_subrc)
                      VALUE(gv_carid)
                      VALUE(gv_conid)
                      VALUE(gv_airfr)
                      VALUE(gv_airto).

  SELECT SINGLE carrid connid airpfrom airpto
    FROM spfli
    INTO (gv_carid,gv_conid,gv_airfr,gv_airto)
    WHERE carrid EQ pa_carid
      AND connid EQ pa_conid.
  gv_subrc = sy-subrc.

  SELECT SINGLE name
  FROM sairport
  INTO (gv_aifna)
  WHERE id EQ gv_airfr.

  SELECT SINGLE name
  FROM sairport
  INTO (gv_aitna)
  WHERE id EQ gv_airto.

ENDFORM.

FORM write  USING VALUE(gv_subrc)
                  VALUE(gv_carid)
                  VALUE(gv_conid)
                  VALUE(gv_airfr)
                  VALUE(gv_airto).
  IF gv_subrc IS NOT INITIAL.
    MESSAGE i003(zmc5a12).
    RETURN.
  ENDIF.

  IF gv_subrc IS INITIAL.
    WRITE: 'Airline Code: ', gv_carid,/
           'Connection Number: ',gv_conid,/
           'Dep. airport: ', gv_airfr,gv_aifna,/
           'Dest. airport: ', gv_airto,gv_aitna.
  ENDIF.
ENDFORM.

FORM validate_parameters USING VALUE(pa_carid)
                               VALUE(pa_conid)
                         CHANGING VALUE(gv_subrc).
  IF pa_carid IS INITIAL OR pa_conid IS INITIAL.
    MESSAGE i002(zmc5a12).
    gv_subrc = 4.
    RETURN.
  ENDIF.

ENDFORM.

나머지가 F1의 Form !!!

주의깊게 봐야할 점

공통변수
Data gv_subrc type sy-subrc.
gv_subrc 를 잘써먹어야합니당.

  • Changing value(cv_subic) 처럼
    값을 가져와서 쓰고 바꾸는게 아닌 값을 바꾸기 위해서
    불러오는것은 저렇게 막써도된다.
    옛날에 function(event) 처럼 던지는 곳에서의 변수와 cv_subic의 이름은 다릅니다.
profile
i'm Graphic Designer

0개의 댓글