-
[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 Memory와 SAP 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