在执行子例程中使用和更改之间的区别

2020-08-22 10:05发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


任何人都可以通过简单的例子来说明在执行子例程中使用和更改之间的确切区别。.

提前谢谢...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


任何人都可以通过简单的例子来说明在执行子例程中使用和更改之间的确切区别。.

提前谢谢...

付费偷看设置
发送
6条回答
SAP浪
1楼-- · 2020-08-22 10:34

嗨,

通过引用通过时没有任何区别。

只有当您按如下所示通过值时,这种区别才发生。

通过 使用参数的值

对于每个形式参数p1 p2 ...,都会在子例程中创建一个具有与相应实际参数相同数据类型的本地对象,并填充其值。 子程序中形式参数的更改不会更改实际参数的值。 即使子例程结束,实际参数也将保留其原始值。

为更改参数传递值

对于每个形式参数p1 p2 ...,都会在子例程中创建与相应实际参数具有相同数据类型的本地数据对象,并 充满其价值。 子程序中形式参数的更改不会直接更改实际参数的值。 但是,如果子例程使用ENDFORM,RETURN,CHECK或EXIT结束,则形式参数的内容将分配给实际参数。 如果子例程以消息或异常结束,则实际参数保持不变。

问候

Sesh

浮生未央
3楼-- · 2020-08-22 10:26

嗨,

子例程是可以在任何ABAP程序中定义的过程,也可以从任何程序调用。 子例程通常在内部调用,也就是说,它们包含本地经常使用的部分代码或算法。 如果您希望某个功能可在整个系统中重用,请使用功能模块。

子例程是FORM引入并由ENDFORM结束的代码块。

FORM [正在使用... [VALUE(] [)] [类型 |类似] ...]

[CHANGING ... [VALUE(] [)] [TYPE | Like ] ...]。

...

ENDFORM。

是子例程的名称。 可选的附加功能USING和CHANGING定义参数接口。 像任何其他处理块一样,子例程不能嵌套。 因此,应该将子例程定义放在程序的末尾,尤其是对于可执行程序(类型1)。 这样,您可以通过插入FORM ... ENDFORM块来消除意外在错误位置结束事件块的风险。

您使用语句调用子例程

执行... [使用... ...]

[CHANGING ... ...]。

子例程可以调用其他子例程(嵌套调用),也可以调用自身(递归调用)。 子例程运行完毕后,调用程序将在PERFORM语句之后进行处理。 您可以使用USING和CHANGING附加值为子例程的参数接口提供值。

示例

-


使用1 2执行性能添加。

使用3 4.执行添加。

使用V1 V2进行表单添加。

数据:V3 TYPE I。

V3 = V1 + V2。

写:/V1。

ENDFORM。

xfwsx85
4楼-- · 2020-08-22 10:42

嗨,玛雅人,

拿出这个示例...

数据:num1 TYPE i,

num2 TYPE i,

sum TYPE i。

num1 =2。num2= 4。

使用num1 num2 CHANGING sum进行添加。

num1 =7。num2 = 11。

使用num1 num2更改总和。

FORM addit

使用add_num1 TYPE any

add_num2 TYPE任意

更改add_sum TYPE任意。

add_sum = add_num1 + add_num2。

使用add_num1 add_num2 add_sum进行操作。/p>

ENDFORM。

使用out_num1 TYPE任意

out_num2 TYPE任意

out_sum TYPE任意。

写:/'总和',out_num1,'and',out_num2,'is',out_sum。

ENDFORM。

感谢

< p> jaideep

*如果有用的奖励积分。.

spaceman01
5楼-- · 2020-08-22 10:35

HI maya,

1。 通常,使用using

传递参数

在例程中不希望更改的参数

2。 可以在例程中更改的参数

CHANGING 的语法传递。

注意事项,

允许m。

小c菟菟
6楼-- · 2020-08-22 10:30

报告ZRK_PGM2_SUB_ROUTINES。 数据:AVAR1(100)C型值"外壳"。 类型:STRUCT_VBAP的开头,像VBELN的VBAP-VBELN,像POSNR的VBAP-POSNR,STRUCT_VBAP的结尾。 数据:STRUCT_VBAP的IT_VBAP1类型标准表。 数据:WA_VBAP类型STRUCT_VBAP。 使用AVAR1执行SUBROUTINE1。 "按引用传递USING(与按引用传递CHANGING相同。写:/'实际参数值=',AVAR1。ULINE。使用AVAR1执行SUBROUTINE2。""按引用传递CHINGING(与按引用传递USING相同) 。 写:/'实际参数值=',AVAR1。 ULINE。 执行SUBROUTINE3更改AVAR1。 "按值传递使用。写:/'实际参数值=',AVAR1。ULINE。执行SUBROUTINE4更改AVAR1。"按值传递(我们也可以使用USING)。 写:/'实际参数值=',AVAR1。 执行SUBROUTINE5表IT_VBAP1 []。 "将表参数LOOP AT IT_VBAP1传入WA_VBAP。写:/WA_VBAP-VBELN,WA_VBAP-POSNR。ENDLOOP。* ----------通过引用传递使用---------- *表格 使用FVAR1进行SUBROUTINE1。写:/'通过引用开始使用。'写:/'形式参数值=',FVAR1.FVAR1 ='SHELL123'。写:/'更改值=',FVAR1。写:/'结束 "通过引用传递"。ENDFORM。* ---------------------------------------- --------- * * -----------按引用传递CHANGING ------------ * FORM SUBROUTINE2 CHANGING FVAR1。WRITE:/'开始于 *传递:/'正式参数值=',FVAR1。FVAR1 ='SHELL123'。写入:/'更改值=',FVAR1。写:/'传递参考结束改变'。ENDFORM。* ------------------------------------------------- * * -------------按值传递使用----------------- *使用值(FVAR1)的SUBROUTINE3表格。WRITE:/'开始的 通过值传递使用'。写:/'形式参数值=',FVAR1。FVAR1 ='SHELL123'。写:/'更改值=',FVAR1。写:/'结束 通过价值传递'。 ENDFORM。 * ------------------------------------------------- -* * -------------按值传递更改--------------- *表单SUBROUTINE4更改值(FVAR1)。 WRITE:/"按值开始更改通行证"。 写:/"形式参数值=",FVAR1。 FVAR1 ='SHELL123'。 写:/'Changed Value =',FVAR1。 写:/"按值传递结束"。 ENDFORM。 * ------------------------------------------------- -* * ----------------表格参数------------------- * FORM SUBROUTINE5表格IT_VBAP2。 从VBAP中选择VBELN POSNR到表IT_VBAP2中。 ENDFORM。 * ------------------------------------------------- *

一周热门 更多>