abap模块化编程-子例程


SAP模块化编程: 有函数,子例程,宏,类,我们今天主要以子例程来介绍。

1.1、子例程的定义

子例程是源代码 里具有一定独立功能的模块单元。

1.2、类型

内部子例程:内部子例程的源代码与调用程序位于同一个ABAP程序中;
外部子例程:外部子例程的源代码位于另外的ABAP程序中,而不是位于调用程序内部。
注意:
1.子例程中避免使用主程序的变量,应使用参数
2.在子例程中定义的变量,只在子例程中有效

1.3、格式
PERFORM  DOWN_LIST.
FORM DOWN_LIST.
....
ENDFORM.

子例程的定义方式
以FORM开头,以ENDFORM结尾的ABAP代码。

1.4、语法

FORM [].

ENDFORM.
其中:
.用于定义子例程名,
参数选项也可以没有
子例程可以访问其所在主程序中声明的所有数据对象。
一般都将同一程序中定义的所有内部子例程都集中定义在程序的末尾。
子例程的定义不能互相嵌套。

1.5、Demo
DATA:LV_VBELN TYPE VBELN_VA ,
      LS_VBAK TYPE VBAK,
      LT_VBAP TYPE TABLE OF VBAP.

           LV_VBELN = '11000092'.
           CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
             EXPORTING
               input         = LV_VBELN
         IMPORTING
            OUTPUT        = LV_VBELN .
              CALL FUNCTION 'ZFM_SALESORDER_GETDETAIL1'
                EXPORTING
                  i_vbeln                    = LV_VBELN
           IMPORTING
                  E_VBAK                     = LS_VBAK
                tables
                  t_vbap                     = LT_VBAP
               EXCEPTIONS
                 SALESORDER_NOT_EXSIT       = 1
                 OTHERS                     = 2.
              PERFORM FRM_WRITE.

FORM FRM_WRITE.
   IF sy-subrc = 0.
                WRITE: ls_vbak-vbeln.

                ELSEIF SY-SUBRC = 1.
                WRITE :'销售凭证不存在'.
              ENDIF.

ENDFORM.
1.6、形参和实参

形参
子例程定义期间用FORM语句定义的参数
实参
子例程调用期间用PERFORM语句指定的参数
参数传递
将主程序变量传递给子例程形式参数
传递类型
A:值传
子例程中参数变量的值的改变,不影响外部程序实际变量的值

DATA : A TYPE I VALUE 1 ,
        B  TYPE I VALUE 2,
        C  TYPE I .
PERFORM FRM_PLUS USING A B C.
WRITE C.

FORM  FRM_PLUS USING VALUE(P_A) VALUE(P_b) value(P_C).

  P_C = P_A + P_B + P_C.

  WRITE P_C.
 ENDFORM.

B:引用传(以下用的最多)
若子例程中的参数变量的值发生了改变,那么,传递程序的实际变量的值也发生改变


DATA : A TYPE I VALUE 1 ,
        B  TYPE I VALUE 2,
        C  TYPE I .
PERFORM FRM_PLUS USING A B C.
WRITE C.
FORM  FRM_PLUS USING P_A P_b P_C.
  P_C = P_A + P_B + P_C.
  WRITE P_C.
 ENDFORM.

C:值传并返回结果
传递参数的方式同值传递相同,但在子例程执行过程中,变量值不改变,而结束执行后,把变量的最终值返回。

DATA : A TYPE I VALUE 1 ,
        B  TYPE I VALUE 2,
        C  TYPE I .
PERFORM FRM_PLUS USING A B C.
WRITE C.

FORM  FRM_PLUS USING VALUE(P_A) VALUE(P_b) CHANGING P_C.

  P_C = P_A + P_B + P_C.

  WRITE P_C.
endform.


1.6、总结

1.三种传递,如果是表类型,结构类型,则需要定义
全局变量:在主程序种定义的变量

局部变量:在子例种定义的变量;

 FORM  FRM_GET_SFLIGHT USING CARRID
                               SFLIGHT TYPE SFLIGHT.
   SFLIGHT-CARRID='AA'.
   
   ENDFORM.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值