메뉴 건너뛰기

SAP 한국 커뮤니티



ABAP [Subroutine] 명령어 정리표

문바이 2011.06.01 19:48 조회 수 : 43878 추천: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.        

 

번호 제목 글쓴이 날짜 조회 수
1224 시스템 변수 [7] file 민쿨 2008.06.12 3192
1223 mm용어집 [13] file 서키트 2008.12.24 3195
1222 sales process [4] file 배움이 ~~ 2008.04.13 3197
1221 SAP ABAP Training - 01 Introduction [2] file 갈리 2009.03.03 3199
1220 SAP RFID 기술(영문) file sapjoy 2007.05.09 3206
1219 32._WD_ALV_Editing_ALV [2] file 프리틀 2008.08.04 3209
1218 e-book SAP BC Query and the QuickViewer관련 [4] file 혀나미 2007.12.31 3210
1217 감사합니다. rain shower 2009.12.29 3211
1216 Installation Instructions for SAP GUI for Java 7.3 v2 file cupycopy2000 2015.04.09 3213
1215 sap script - made easy 46c [1] file BlackBean 2007.05.23 3216
1214 냐옹이님이 요청하신 자료입니다. [12] file activeman 2008.06.19 3216
1213 Two_approaches_to_dev_web_app [1] file sonata 2009.09.22 3221
1212 Abap List Viewer 수정삭제 예제 [5] file 가보자 2007.04.12 3225
1211 sap 영한 단어집 [19] file 서키트 2009.04.30 3226
1210 김동귀_alv [2] file senk 2007.04.25 3230
1209 FAQ ABOUT SQL [1] file sapjoy 2007.03.30 3233
1208 User guide [4] file 쿠궁 2007.04.10 3236
1207 Exception Handling [8] file michael 2007.05.17 3240
1206 BAPI 소개 [10] file sapjoy 2007.05.02 3241
1205 BAPI User Guide (CA-BFA) [2] file magenta 2007.12.28 3241