ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ABAP] #27 프로그램 호출과 데이터 전달
    SAP/ABAP 2026. 1. 10. 23:23

     

     

     

     

     

     

     

     

     

     

     

     

    프로그램 호출

    프로그램을 호출하는 방법은 실행 프로그램(Report) 기준트랜잭션 코드 기준으로 나눌 수 있다.

     

    1. 실행 프로그램으로 호출

    (1) SUBMIT

    SUBMIT zprog2.
    • 프로그램 1 → 프로그램 2 실행
    • 프로그램 2 종료 시 전체 프로그램 종료
    • 호출한 프로그램으로 돌아오지 않음

     

    (2) SUBMIT ~ AND RETURN.

    SUBMIT zprog2 AND RETURN.
    • 프로그램 2 종료 후 프로그램 1로 복귀
    • AND RETURN 다음 구문 실행

     

    ※ 예제 코드

    1번 프로그램

    REPORT zprogb20_call.
    
    DATA: gt_sflight TYPE TABLE OF sflight,
          gs_sflight LIKE LINE OF gt_sflight.
    
    PARAMETERS: pa_car TYPE s_carr_id.
    SELECT-OPTIONS: so_con FOR gs_sflight-connid.
    
    START-OF-SELECTION.
      SUBMIT zprogb20_called AND RETURN.
      WRITE: 'call 프로그램으로 돌아왔어요!'.

     

    2번 프로그램

    REPORT ZPROGB20_CALLED.
    
    DATA: gt_sflight TYPE TABLE OF sflight,
          gs_sflight LIKE LINE OF gt_sflight.
    
    PARAMETERS: pa_car TYPE s_carr_id.
    SELECT-OPTIONS: so_con FOR gs_sflight-connid.
    
    START-OF-SELECTION.
    
    SELECT *
      FROM sflight
      INTO TABLE gt_sflight
      WHERE carrid = pa_car
      AND connid IN so_con.
    
    IF sy-subrc = 0.
      LOOP AT gt_sflight INTO gs_sflight.
        WRITE:/ gs_sflight-carrid,
                gs_sflight-connid,
                gs_sflight-fldate,
                gs_sflight-seatsmax,
                gs_sflight-seatsocc.
        CLEAR: gs_sflight.
      ENDLOOP.
    ELSE.
      WRITE:/ 'No data'.
    
    ENDIF.

     

    동작 과정

    1. CALL 프로그램 실행 → CALLED 프로그램으로 이동 후 프로그램 종료 → CALL 프로그램의 다음 구문 실행.

     

     

    (3) SUBMIT ~ VIA SELECTION-SCREEN AND RETURN.

    SUBMIT zprog2 VIA SELECTION-SCREEN AND RETURN.
    • 프로그램 2에 Selection Screen이 있을 경우
    • Selection Screen → F8 → 실행
    • 사용자가 값을 수정할 수 있음
    • 차이점 핵심
      • SUBMIT은 바로 실행
      • VIA SELECTION-SCREEN은 화면을 거쳐 실행

    ※ 예시 코드

    1번 프로그램

    REPORT zprogb20_call.
    
    DATA: gt_sflight TYPE TABLE OF sflight,
          gs_sflight LIKE LINE OF gt_sflight.
    
    PARAMETERS: pa_car TYPE s_carr_id.
    SELECT-OPTIONS: so_con FOR gs_sflight-connid.
    
    START-OF-SELECTION.
      SUBMIT zprogb20_called VIA SELECTION-SCREEN AND RETURN.
      WRITE: 'call 프로그램으로 돌아왔어요!'.

     

    2번 프로그램 코드는 (2)번과 동일.

     

    동작 과정

    1. CALL 프로그램 실행 → CALLED 프로그램의 첫 화면인 selection-screen으로 이동 → 실행(F8) 후 뒤로가기 → CALL 프로그램의 다음 구문 실행.


    2. 트랜잭션 코드로 호출

    (1) LEAVE TO TRANSACTION

    LEAVE TO TRANSACTION 'ZTX01'.
    • 현재 프로그램 완전 종료
    • 트랜잭션으로 이동
    • 이전 프로그램으로 돌아오지 않음

     

    (2) CALL TRANSACTION

    CALL TRANSACTION 'ZTX01'.
    • 트랜잭션 실행 후 종료되면
    • 원래 프로그램으로 복귀
    • CALL TRANSACTION 다음 구문 실행

     

    ※ AND SKIP FIRST SCREEN

    CALL TRANSACTION 'ZTX01' AND SKIP FIRST SCREEN.
    • 첫 화면(Selection Screen / Initial Screen) 생략

     

    예시 코드

    REPORT zprogb20_call.
    
    DATA: gt_sflight TYPE TABLE OF sflight,
          gs_sflight LIKE LINE OF gt_sflight.
    
    PARAMETERS: pa_car TYPE s_carr_id.
    SELECT-OPTIONS: so_con FOR gs_sflight-connid.
    
    SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME.
      SELECTION-SCREEN BEGIN OF LINE.
        SELECTION-SCREEN COMMENT pos_low(20) TEXT-001 FOR FIELD pa_rad1.
        PARAMETERS: pa_rad1 RADIOBUTTON GROUP rad.
        SELECTION-SCREEN COMMENT pos_high(20) TEXT-002 FOR FIELD pa_rad2.
        PARAMETERS: pa_rad2 RADIOBUTTON GROUP rad DEFAULT 'X'.
      SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF BLOCK blk1.
    
    START-OF-SELECTION.
      CASE 'X'.
        WHEN pa_rad1.
          " Tcode 이동 후 다시 돌아오지 않음 "
          LEAVE TO TRANSACTION 'ZTCODEB20_CALLED'.
    *      LEAVE TO TRANSACTION 'ZTCODEB20_CALLED' AND SKIP FIRST SCREEN. " 첫 스크린 화면 생략 "
        WHEN pa_rad2.
          " Tcode 이동했다가 다시 돌아옴 "
          CALL TRANSACTION 'ZTCODEB20_CALLED'.
    *      CALL TRANSACTION 'ZTCODEB20_CALLED' AND SKIP FIRST SCREEN. " 첫 스크린 화면 생략 "
        WHEN OTHERS.
      ENDCASE.
    
      WRITE: 'call 프로그램으로 돌아왔어요!'.

    세션과 메모리

     

     

    1. 세션

    • User Session : SAP 로그인 시 생성되는 세션, 한 사용자 기준
    • External Session : 윈도우 창 마다 생성되는 세션
    • Internal Session : 프로그램 마다 생성되는 세션
                                       SUBMIT, CALL TRANSACTION 시 생성
                                       프로그램 종료 시 소멸

     

    2. 메모리

    메모리는 ABAP MemorySAP Memory로 나뉜다.

     

    (1) ABAP Memory

    • Internal Session 간 공유
    • 같은 External Session 안에서만 유효
    • 주로 SUBMIT ... AND RETURN에서 사용
    • 데이터 전달 방식
    EXPORT gv_data TO MEMORY ID 'MID'.
    IMPORT gv_data FROM MEMORY ID 'MID'.
    • 특징
      • 프로그램 종료 시 소멸
      • 대용량 데이터 전달 가능
      • 파라미터 전달이 어려울 때 사용

     

    (2) SAP Memory

    • External Session 간 공유
    • 사용자 단위로 유지
    • 로그아웃 전까지 유지
    • set/get parameter, memory id 값을 가지고 있음
    • 데이터 전달 방식
    SET PARAMETER ID 'ZID' FIELD gv_data.
    GET PARAMETER ID 'ZID' FIELD gv_data.
    • 특징
      • 주로 Selection Screen 기본값
      • 트랜잭션 간 값 유지
      • Dictionary에 Parameter ID 정의 필요

    데이터 전달

    프로그램 호출 시 프로그램 간에 데이터를 전달할 수 있다.
    데이터 전달 방식은 Selection Screen 기반, ABAP Memory, SAP Memory로 구분된다.

     

    1. Input Field(Selection Screen)로 데이터 전달

    SUBMIT zprog2 [VIA SELECTION-SCREEN] AND RETURN
    WITH param1 = val1
    WITH param2 = val2 .... . 
    " param은 호출될(CALLED) 프로그램의 Selection Screen 필드, val은 호출하는(CALL) 프로그램의 변수값 "

     

    예시 코드

    REPORT zprogb20_call.
    
    DATA: gt_sflight TYPE TABLE OF sflight,
          gs_sflight LIKE LINE OF gt_sflight.
    
    PARAMETERS: pa_car TYPE s_carr_id.
    SELECT-OPTIONS: so_con FOR gs_sflight-connid.
    
    SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME.
      SELECTION-SCREEN BEGIN OF LINE.
        SELECTION-SCREEN COMMENT pos_low(20) TEXT-001 FOR FIELD pa_rad1.
        PARAMETERS: pa_rad1 RADIOBUTTON GROUP rad.
        SELECTION-SCREEN COMMENT pos_high(20) TEXT-002 FOR FIELD pa_rad2.
        PARAMETERS: pa_rad2 RADIOBUTTON GROUP rad DEFAULT 'X'.
      SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF BLOCK blk1.
    
    START-OF-SELECTION.
      SUBMIT zprogb20_called VIA SELECTION-SCREEN AND RETURN
      WITH pa_car = pa_car 
      WITH so_con IN so_con.
    
      WRITE: 'call 프로그램으로 돌아왔어요!'.

     

    동작 과정

    1. CALL 프로그램에서 호출할 때 전달한 데이터가 CALLED 프로그램의 Input 필드에 들어가는 것을 확인 할 수 있다.


    2. ABAP Memory로 데이터 공유

    • 같은 External Session 내에서 SUBMIT ... AND RETURN 사용 시 Internal Session 간 데이터 공유할 수 있다.
    • 프로그램 종료 시에 자동 삭제된다.
    • 대용량의 데이터를 전달할 수 있다.

     

     

     

     

    데이터를 내보내는 프로그램

    EXPORT
      <데이터 저장할 변수명> FROM <전달할 값> 
      TO MEMORY ID '메모리명'.
      
    ***************************************************
    EXPORT
      p1 FROM pa_car
      s1 FROM so_con TO MEMORY ID 'CARCON'.

    CARCON 메모리 안의 p1, s1 변수에 값을 저장한다.

     

    데이터를 전달받는 프로그램

    IMPORT 
      <저장되어 있는 변수명> TO <프로그램에서 받을 변수명>
      FROM MEMORY ID '메모리명'.
           
    ********************************************
    IMPORT s1 TO so_con
           p1 TO pa_car
           FROM MEMORY ID 'CARCON'.

    CARCON 메모리 안의 p1, s1에 저장되어 있는 값을 so_con, pa_car에 각각 저장한다.


     

    3. SAP Memory로 데이터 공유

    • External Session 단위 공유
    • 프로그램 종료 후에도 유지
    • 트랜잭션 간 값 전달에 사용
    • CALL TRANSACTION, LEAVE TO TRANSACTION에서 주로 사용한다.

    ※ LEAVE TO TRANSACTION는 프로그램을 종료하고 이동하기 때문에 ABAP Memory가 초기화 되기 때문에 SAP Memory를 사용해야한다. 

     

    데이터를 내보내는 프로그램

    SET PARAMETER ID <데이터를 저장할 메모리 주소의 이름(Parameter ID)> FIELD <전달할 값>.
    LEAVE TO TRANSACTION 'ZTX01'.
    
    *****************************************************
    SET PARAMETER ID 'CAR' FIELD pa_car.
    LEAVE TO TRANSACTION 'ZTX01'.

     

    데이터를 전달받는 프로그램

    GET PARAMETER ID <저장되어 있는 메모리 주소의 이름(Parameter ID)> FIELD <프로그램에서 받을 변수명>.
    
    ************************************************************
    GET PARAMETER ID 'CAR' FIELD pa_car.

     

    ※ 내부적으로 SAP Memory 사용하여 Selection Screen 기본값 자동 세팅하는 방법

     

    전달하는, 받는 프로그램의 selection screen의 필드에 MEMORY ID를 바로 사용하면 된다.

    PARAMETERS: pa_car TYPE s_carr_id MEMORY ID car1.
    SELECT-OPTIONS: so_con FOR gs_sflight-connid MEMORY ID con1.

     

     

     

     

     

     

     

     

     

     

     

    'SAP > ABAP' 카테고리의 다른 글

    [ABAP] #29 OPEN SQL DML  (0) 2026.01.11
    [ABAP] #28 BDC & Background Job  (0) 2026.01.11
    [ABAP] #26 ALV Container  (1) 2026.01.10
    [ABAP] #25 ALV의 Event Class  (0) 2026.01.10
    [ABAP] #24 Report Program - ALV (3)  (0) 2026.01.10
Designed by Tistory.