ABAP基础-10 模块化

ABAP-10 模块化

1、子程序

FORM 子程序名 参数(值传递、引用传递(含内表))
	代码...
	代码...
	代码...
ENDFORM.
usingusing valuechangechange valuetable
传递方式引用传递值传递引用传递值传递引用传递
参数是否改变结束后改变

1、子程序必须写在代码的最后面 2、参数最好带类型

简单子程序

*调用子程序Fname。
PERFORM fname."输出:Hello world

*此处定义子程序:Fname
*子程序不被调用,是不会执行的
FORM fname.
  WRITE / 'Hello world'.
ENDFORM. 

1.1 using

例子A

PERFORM fname02 USING 'hello'."输出:hello

FORM fname02 USING in_str TYPE string.
  WRITE / in_str.
ENDFORM.                                                    

例子B-参数的值会改变

DATA l_msg TYPE string VALUE 'hello03'.
WRITE / l_msg."输出:hello
PERFORM fname03 USING l_msg.
WRITE / l_msg."输出:03你好

FORM fname03 USING in_str TYPE string.
  in_str = '03你好'.
ENDFORM.     

1.2 using value

DATA l_msg04 TYPE string VALUE 'hello04'.
WRITE / l_msg04."输出:hello04.
PERFORM fname04 USING l_msg04.
WRITE / l_msg04."输出:hello04.

FORM fname04 USING VALUE(in_str) TYPE string.
  in_str = '04你好'.
ENDFORM.     

1.3 change

DATA l_msg05 TYPE string VALUE 'hello05'.
WRITE / l_msg05."输出:hello05.
PERFORM fname05 CHANGING l_msg05.
WRITE / l_msg05."输出:05你好.

FORM fname05 CHANGING in_str TYPE string.
  in_str = '05你好'.
ENDFORM.      

1.4 change value

子程序form执行完后参数(l_msg06)的值才会改变,参数(l_msg06)的值在form中永远不会改变

DATA l_msg06 TYPE string VALUE 'hello06'.
PERFORM fname06 CHANGING l_msg06.
WRITE / l_msg06."输出:06你好.

FORM fname06 CHANGING VALUE(in_str) TYPE string.
  WRITE / l_msg06."输出:hello06,
  in_str = '06你好'.
  WRITE / l_msg06."输出:hello06,,没有改变
ENDFORM.     

1.5 table

TYPES:BEGIN OF ty_tab,
  id TYPE i,
  name(10) TYPE c,
  END OF ty_tab.

TYPES stru_tab TYPE STANDARD TABLE OF ty_tab."定义一个表结构
DATA tbl_tab TYPE STANDARD TABLE OF ty_tab WITH HEADER LINE."定义一个内表
DATA g_msg TYPE string.
DATA g_msg2 TYPE string.


PERFORM ftab1 TABLES tbl_tab.
PERFORM ftab2 TABLES tbl_tab.
*多参数调用
PERFORM ftab3 TABLES tbl_tab USING g_msg CHANGING g_msg2.

FORM ftab1 TABLES in_tab TYPE stru_tab.
ENDFORM.                                             

FORM ftab2 TABLES in_tab STRUCTURE tbl_tab .
ENDFORM.                                             

FORM ftab3 TABLES in_tab TYPE stru_tab USING value(in_ustr) TYPE string CHANGING in_cstr TYPE string.
ENDFORM.  

2、功能模块(函数)

2.1、创建功能模块(函数)——SE37

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2、在import中创建字段:IN_AUFNR,Typing=TYPE,参考元素=AUFNR,勾选=值传递

在这里插入图片描述

2.3、在export总创建字段:OT_CAUFV,Typing=TYPE,参考表=CAUFV,勾选=值传递

在这里插入图片描述

2.4、在代码块输入:SELECT SINGLE * INTO ot_caufv FROM caufv WHERE aufnr = in_aufnr.

在这里插入图片描述

2.5 在SE38创建:ZCSDN_LION_DEMO11_FG

REPORT  zcsdn_lion_demo11_fg.

DATA:df_aufnr LIKE caufv-aufnr,
      df_caufv LIKE caufv.

df_aufnr = '000110000000'.


CALL FUNCTION 'ZCSDN_FG01'"必须大写,否则找不到.
  EXPORTING
    in_aufnr = df_aufnr
  IMPORTING
    ot_caufv = df_caufv.

WRITE df_caufv-auart.

2.6 执行结果

在这里插入图片描述

2.7 验证结果

SE11—输入资料库表格:CAUFV—显示—内容—订单=000110000000—执行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

执行结果和数据表CAUFV数据一致

补充1:在函数ZCSDN_FG01中新增一个表格变量:OT_TAB,Typing=like,参考元素=CAUFV

在这里插入图片描述

补充2:在函数ZCSDN_FG01代码中新增代码:

ot_caufv-auart = ‘111’.
APPEND ot_caufv TO ot_tab.

在这里插入图片描述

补充3:在程序ZCSDN_LION_DEMO11中定义表格,并添加一行数据:

DATA df_tab TYPE STANDARD TABLE OF caufv WITH HEADER LINE.
df_tab-auart = ‘lionfang’.
append df_tab.

在这里插入图片描述

补充4:在ZCSDN_LION_DEMO11_FG添加函数调用table属性

在这里插入图片描述

此时执行,内表df_tab会有得到2行数据,一个是本程序append的,另一个是函数ZCSDN_FG01中append的

REPORT  zcsdn_lion_demo11_fg.

DATA:df_aufnr LIKE caufv-aufnr,
      df_caufv LIKE caufv.
DATA df_tab TYPE STANDARD TABLE OF caufv WITH HEADER LINE.
df_tab-auart = 'lionfang'.
append df_tab.

df_aufnr = '000110000000'.

CALL FUNCTION 'ZCSDN_FG01'"必须大写,否则找不到.
  EXPORTING
    in_aufnr = df_aufnr
  IMPORTING
    ot_caufv = df_caufv
  TABLES
    ot_tab = df_tab.

*验证df_tab的行数
DATA tabline TYPE i .
tabline = lines( df_tab ).
if sy-subrc = 0.
  WRITE / tabline."输出:2,本函数append了一行,子函数ZCSDN_FG01append了一行,共2行.
  ENDIF.

WRITE / df_caufv-auart.

在这里插入图片描述

3、代码复用

代码复用是指重复某一个代码块,包括:包含程序、宏

3.1 包含程序

se38——创建程序ZCSDN_LION_DEMO11——点上面的“显示物件清单”——object name(对象名)选中后右键——建立——INCLUDE(包含或包括)——

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在包含程序中定义的字段直接能在主程序中使用

在这里插入图片描述
在这里插入图片描述

输出结果

在这里插入图片描述

如果其他程序也要使用name的定义,只需在程序自身代码中添加即可:INCLUDE ZCSDN_LION_DEMO11_01.

3.2 宏

TYPES:BEGIN OF pers,
  name(10) TYPE c,
  age TYPE i,
  END OF pers.
DATA it_per TYPE STANDARD TABLE OF pers WITH HEADER LINE.

*例子1
DEFINE per_add.
  it_per-name = &1.
  it_per-age = &2.
  append it_per.
END-OF-DEFINITION.
per_add '张三' '40'."此时会调用上面的宏per_add 并传值:&1=张三,&2=40,内表it_per会增加一行数据。

*例子2
DATA rt TYPE i.
DEFINE operation.
  rt = &1 &2 &3.
  write / rt.
END-OF-DEFINITION.
operation 1 + 10."调用后会输出结果:11.

WRITE /.

4、类— 另外讲

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值