메뉴 건너뛰기

SAP 한국 커뮤니티



ABAP [Subroutine] 명령어 정리표

문바이 2011.06.01 19:48 조회 수 : 43886 추천:5

다른 프로그램에도 있는 개념

Call by value

Call by Reference

 

그런던 ABAP에서 이를 보다 확장시킨 개념으로 사용하고 있습니다.

이 기본개념부터 차근차근 이해하고 있어야 내가 원하는 서브루틴을 만들고 남이만든것을 볼수 있습니다.

 

사견이 있어 객관적이지 못함점을 이해해 주시기 바랍니다.(죄송합니다. ㅠㅠ)

 

Sub-Routine 정리 

용어설명

Actual Parameter 

Main 프로그램 입장에서 ( 서브루티 호출시 나의 자원을 넘겨주니까/ 그건 현실적 매개변수이다) 

Formal Parameter

Main 프로그램 입장에서 ( 서브루틴에 이미 선언 명시되어있어 그렇게 사용해야만 하는 매개변수이다) 

Input Parameter

sub  프로그램 입장에서 ( Using명령에 의해 변경될필요가 없는 매개변수를 말한다.)      

Output Parameter 

sub  프로그램 입장에서 ( Changing명령에 의해 변경될필요가 있는 매개변수를 말한다.)   

그럼 이 용어를 이해 했으면 이런말을 할 수 있어야 한다.        
Subroutine구성시 Formal Parameter의 구성원들을 먼저 생각해 놓아야 한다.        
그리고 Formal Parameter구성원이 결정되었으면 sub프로그램내에서 가공을 어떻게 할지에 따라서        
Input Parameter와 Output Parameter를 구분하여야 한다.        
메인프로그램에서는 서브루틴 호출시 Formal parameter에 맞추워 Actual Parmeter를 넘겨주어야한다  

 

Parameter 구성방법 (Interface(전달방법)에 따른 구성)        

Call by Value

Actual, Formal Parameter가 각자 다른 변수영역을 사용한다.

(명령어 Value에 주목하라)      

Call by Reference

Actual Parameter의 메모리번지를 공유하여 같은곳을 바라본다.

(생략시 Default로 사용됨)      

Call by Value and Result

Actual, Formal Parameter가 각자 다른 변수영역을 사용한다

( 서브루틴 정상종료후 Actual을 변경한다)      

FORM sub1 USING p1 TYPE c  
                VALUE(p2) TYPE c  
                VALUE(p3) TYPE p  


          CHANGING p4 TYPE c  
                VALUE(p5) TYPE c.  


   CHECK sy-subrc = 0.  
   EXIT.  
ENDFORM.  

Call by Reference ReadOnly( Actual의 메모리주소를 공유해서 사용한다 )     
Call by value ( Actual, formal 각자 변수메모리 영역을 따로 관리한다)     
Call by value ( Actual, formal 각자 변수메모리 영역을 따로 관리한다)

                        p의 decimal 은 actual에서 상속받는다     
Call by Reference ( Actual의 메모리주소를 공유해서 사용한다)     
Call by Value and Result( Actual, formal 각자 변수메모리 영역을 따로 관리한후

                                        성공유무에 따라 호출자변경)     
  참이면 서브루틴을 계속진행하다     
  서브루틴을 탈출한다     

 

 

Parameter 구성방법 (매개변수의 유형에 따른 구성)/ 사용방법은 아래의 샘플코드를 참조하도록 한다        

FORM sub1        
          TABLES   p5_itab LIKE      a3_itab[] "[itab(header line)] / 구조를 알고있음        
          CHANGING p1_stru TYPE      any       "[structure]         / 구조를 모름(Field Symbol사용)        
                   p2_stru STRUCTURE a1_stru   "[structure]            / 구조를 알고있음        
                   p3_itab TYPE ANY TABLE      "[itab]                    / 구조를 모름(Field Symbol사용)        
                   p4_itab LIKE      a3_itab.  "[itab]                              / 구조를 알고있음        
ENDFORM.        

 

 

SubRoutine Call(호출) 방법

Internal

PERFORM sub1 TABLES itab[]  CHANGING wa1 wa1 itab itab.

PERFORM sub1 TABLES itab[]  CHANGING wa1 wa1 itab itab ON COMMIT.
PERFORM sub1 TABLES itab[]  CHANGING wa1 wa1 itab itab ON ROLLBACK.

같은프로그램에서 call할때

COMMIT를 만나 COMMIT되기호출  
ROLLBACK을만나ROLLBACK되기호출  

External

PERFORM sub1(pg1) TABLES itab[]  CHANGING wa1 wa1 itab itab

   IF FOUND

다른프로그램에서 call할때.
subroutine은  public속성을 가지고있음

Dynamic

Data:progname(8) TYPE c VALUE 'Z05_001',subrname(8) TYPE C.
subrname = 'concate'.
TRANSLATE subrname TO UPPER CASE.
PERFORM (subrname) IN PROGRAM (progname) IF FOUND.

Runtime에 서브루틴을 바꾸어 call할때

List

DO 3 TIMES.
   PERFORM SY-INDEX OF subr1 subr2 subr3.
ENDDO.

List를 이용한 Call

파라미터를 전달할 수 없다.

 

Sample Code( 서브루틴에서/ 지정되지 않은 구조체와 itab을 <FS>를 통해 어떻게 가공하는지 보시기 바랍니다)

DATA : a1_stru LIKE sflight,        
       a2_stru LIKE sflight,        
       a3_itab LIKE sflight OCCURS 0,        
       a4_itab LIKE sflight OCCURS 0,        
       a5_itab LIKE sflight OCCURS 0 WITH HEADER LINE.        
        
        
SELECT SINGLE *        
  INTO CORRESPONDING FIELDS OF a1_stru        
  FROM SFLIGHT.        
        
SELECT  *        
  INTO CORRESPONDING FIELDS OF TABLE a3_itab        
  FROM SFLIGHT.        
        
a2_stru   = a1_stru.        
a4_itab[] = a3_itab[].        
a5_itab[] = a3_itab[].        
        
    PERFORM demo        
     TABLES a5_itab        
   CHANGING a1_stru a2_stru a3_itab a4_itab.        
        
        
FORM DEMO        
          TABLES   p5_itab LIKE      a3_itab[]    "[itab(header line)]       /  구조를 알고있음        
          CHANGING p1_stru TYPE      any       "[structure]                 / 구조를 모름(Field Symbol사용)        
                   p2_stru STRUCTURE a1_stru     "[structure]                  / 구조를 알고있음        
                   p3_itab TYPE ANY TABLE         "[itab]                          / 구조를 모름(Field Symbol사용)        
                   p4_itab LIKE      a3_itab.               "[itab]                            / 구조를 알고있음        
        
     "명시적으로 선언된 항목은 기존에 하던 방법대로 가공하면 된다.        
     "p5_itab, p2_stru, p4_itab        
     DATA : ls_itab LIKE LINE OF a3_itab.        
        
        p5_itab-connid = '33'.        
        p2_stru-connid = '33'.        
        READ TABLE p4_itab INTO ls_itab INDEX 2.        
        
     "구조를 알지못하는 항목에 대해서 가공해보자.        
     "p1_stru, p3_itab        
     DATA : lv_key TYPE string.        
     FIELD-SYMBOLS : <fs_field> TYPE ANY,        
                                       <fs_stru> TYPE ANY.        
        
     ASSIGN COMPONENT 'CONNID' OF STRUCTURE p1_stru TO <fs_field>.        
     <fs_field> = '33'.        
        
     lv_key = 'CONNID'.        
     READ TABLE p3_itab WITH KEY (lv_key) = '0400' ASSIGNING <fs_stru>.        
     ASSIGN COMPONENT 'CONNID' OF STRUCTURE <fs_stru> TO <fs_field>.        
     <fs_field> = '33'.        
     MODIFY TABLE p3_itab FROM <fs_stru>.        
        
     LOOP at p3_itab ASSIGNING <fs_stru>.        
       ASSIGN COMPONENT 'CONNID' OF STRUCTURE <fs_stru> TO <fs_field>.        
        <fs_field> = '33'.        
       MODIFY TABLE p3_itab FROM <fs_stru>.        
     ENDLOOP.        
        
ENDFORM.        

 

번호 제목 글쓴이 날짜 조회 수
24 SAP NetWeaver Application Server ABAP 7.4 Overview and Product Highlight file sapjoy 2015.11.12 4048
23 ABAP 7.40 Quick Reference [5] sapjoy 2015.11.19 8514
22 ALV with IDA(Integrated Data Access ) 설명 및 한글 자료 있으신 분 있으신가요 ? [1] miss841 2016.01.19 5042
21 ABAP Debugging Tips and Tricks [4] file 아밥뽀 2016.03.31 5536
20 LSMW example (FK01 - vendor master create ) [2] file cupycopy2000 2016.04.30 4310
19 모든 CBO 테이블 엑셀 업로드 프로그램 [1] sapjoy 2016.08.17 8160
18 Excel Macro 이용한 Table Layout file 아네사 2016.08.19 4720
17 PI/XI 7.1 Troubleshooting Guide - 영문 file cry6 2016.09.01 3550
16 PI/XI 7.0 Alert Config 영문 file cry6 2016.09.01 3901
15 Graphical Form Painter could not be called (FORMPAINTER_CREATE_WINDOW, ) [1] sapjoy 2016.11.22 4175
14 Next Generation ABAP Development (2007 영문 PDF) file 대략나 2016.12.20 4402
13 GRID 밤의화신 2017.04.04 4374
12 User Exit 질문 [3] 푸딩딩 2017.04.17 5689
11 Transaction code naming [2] sapjoy 2018.02.12 4544
10 S4 HANA IDES 설치 따라하기 [2] sapjoy 2018.07.14 3380
9 개발자 가이드 for SAP HANA STUDIO [4] file 얀웬리 2018.08.10 3808
8 NEPTUNE 솔루션 SAP 데이터를 FIORI로 보여주는 솔루션입니다. sapjoy 2018.09.07 2118
7 S/4 HANA 1809 소개자료(주요변화사항) [5] file sapjoy 2019.02.25 3478
6 S/4 HANA 소개자료 Simplication [3] file sapjoy 2019.02.27 19469
5 엑셀 파일을 동적으로 테이블에 업데이트 하는 프로그램 file sapabap 2019.10.22 4041