`

abap的子程序参数传递注意点(转)

 
阅读更多
1、参数引用传递(Parameters Passed by Reference)
使用USING或CHANGING不带value关键字来声明参数引用传递。代码样例:
FORM subr USING    p1 [{TYPE type}|{LIKE field}]
                   p2 [{TYPE type}|{LIKE field}]
                   ...
          CHANGING p1 [{TYPE type}|{LIKE field}]
                   p2 [{TYPE type}|{LIKE field}]
                   ...
在引用传递的方式,参数不在堆中占有内存,传入的是变量的地址,在子程序中对变量的修改实际上是对实际参数的修改。在这种方式using和changing是等价的。

2、输入参数传值传递(Input Parameters That Pass Values)
使用USING带value关键字来声明输入参数传值传递。代码样例:
FORM subr USING    value(p1) [{TYPE type}|{LIKE field}]
                   value(p2) [{TYPE type}|{LIKE field}]
                   ...
在输入参数传值传递的方式,参数在堆中占有内存,传入的是变量的值,在子程序中对变量的修改不会对实际参数的造成修改。

3、输出参数传值传递(Output Parameters That Pass Values)
使用USING带value关键字来声明输入参数传值传递。代码样例:
FORM subr CHANGING    value(p1) [{TYPE type}|{LIKE field}]
                   value(p2) [{TYPE type}|{LIKE field}]
                   ...
在输出参数传值传递的方式,形式参数在堆中占有内存,传入的是变量的值,在子程序中对变量的修改只有正常结束 (Endform,CHECK,EXIT等语句结束)时才会有形式参数拷贝到对实际参数,如果是错误消息退出则不会影响实际参数。

***************************其它知识点**************************************************************

在ABAP/4中参数的传递可分成

1. Call By Reference:

传参数时将资料的存放地址(address)传至参数中, 也就是子程序中的参数变量与外部实际

变量共享地址内的值, 又称为 Call By Address, 若在子程序中地址中的值改变了, 外部实

际变量的值也会跟着改变.

语法:

     FORM <subr> [USING <f1> <f2>…] [CHANGING <f1>…]

     PERFORM <subr> [USING <f1> <f2>…] [CHANGING <f1>…]

    Using 之后接在子程序中不会改变的变量, CHANGING接会改变值的变量

     但实际上USING之后的参数在子程序中也可将值改变

     Example:

     SUM = 0.

     NUM1 = 100. NUM2=200.

     PERFORM ADD USING NUM1 NUM2 CHANGING SUM.

     WRITE: / NUM1,NUM2,SUM “ SUM 由 0 变成 300

     FORM ADD USING NUM1 NUM2 CHANGING SUM.

        SUM = NUM1 + NUM2.

     ENDFORM.

     执行结果:

                     100   200   300

2. Call By Value

传参数时将数据的值复制一份至另一地址中, 所以在子程序中参数变量值改变, 并不会影

响外部实际变量的值.

     语法:

          FORM <subr> USING VALUE(<f1>…)

          使用 VALUE(<f1>)表示 <f1>是 Call By Value的传递

          PERFORM <subr> USING <f1>

     Example:

     SUM = 0.

     NUM1 = 5.

     PERFORM MULTI USING NUM1 CHANGING SUM.

     WRITE: / NUM1,SUM “NUM1值还是5, SUM 由 0 变成 120

     FORM MULTI USING VALUE(NUM1) CHANGING SUM.

        SUM = 1.

        WHILE NUM1 > 1

          SUM = SUM * NUM1.

          NUM1 = NUM1 – 1.

        ENDWHILE..

     ENDFORM.

     执行结果:

                     5   120



3. Call By Value and Return Result

传入参数值的方式同Call By Value, 但在子程序结束执行时会将传入的参数值复制

一份传回给外部实际变量.

语法:

        FORM ….. CHANGING VALUE(<f1>)

        PERFORM …. CHANGING …. <f1>

        Example:

               SUM = 0.

               NUM1 = 100. NUM2=200.

               PERFORM ADD USING NUM1 NUM2 CHANGING SUM.

               WRITE: / NUM1,NUM2,SUM “ SUM 由 0 变成 300

               FORM ADD USING NUM1 NUM2 CHANGING VALUE(S).

                  S = NUM1 + NUM2.

                  WRITE: / NUM1,NUM2,SUM “得到结果为 100 200 0

               ENDFORM.

     执行结果:

                100    200     0    “在子程序中 SUM值尚未改变

                     100   200   300    “返回程序时, 将变量 S的值复制给 SUM

                                        “所以 SUM值变成 300
分享到:
评论

相关推荐

    ABAP 子程序及其调用

    ### ABAP 子程序及其调用 #### 一、概述 在ABAP编程语言中,子程序是一种重要的编程工具,它...通过以上介绍,我们可以了解到ABAP子程序及其调用的基本概念和技术细节,这对于编写高效、模块化的ABAP程序非常重要。

    ABAP程序相互调用

    这将根据select-options参数来调用zreport报表,并将参数传递给报表。 四、带Parameters的Submit用法 带Parameters的Submit用法可以实现报表的参数化调用。例如: ```abap SUBMIT zreport WITH p_param1 = 'value'...

    abap试题

    ### 参数传递至子程序的重要性 在编程中,传递参数至子程序(或函数、方法)是实现模块化编程的关键技术之一。ABAP语言支持通过参数在子程序之间传递数据,其主要作用包括: - **传递用户输入值到子程序**:允许子...

    ABAP学习资料doc文档

    3. ABAP允许定义和调用子程序,甚至可以调用其他程序的子程序,通过参数传递实现数据交互。 4. 功能模块是ABAP中的一种特殊子程序,它们在中央库中集中管理,并具有明确定义的数据接口,便于测试和重用。 5. ABAP...

    SAP ABAP模块化开发介绍.pptx

    子程序可以传递参数,传递方式有三种:值调用、值和结果调用和引用调用。值调用是指复制一份实际参数的拷贝并保存到形式参数中,值和结果调用是指对形式参数的修改会被写回实际参数,而引用调用是指实际参数直接指向...

    ABAP用户指南.pdf

    9. **子程序与功能模块**:支持子程序的定义与调用,包括其他程序的子程序,参数传递灵活多样;功能模块是一种特殊的子程序,用于封装特定的功能,增强代码的重用性和模块化。 #### 三、ABAP/4的工具与资源 - **...

    ABAP开发规范和命名规则

    * 参数传递:参数传递是指在子程序之间传递参数的过程,用于实现程序的模块化和可重用性。 * 程序格式标准:程序格式标准是指ABAP程序的编写格式和风格,旨在确保程序代码的可读性和质量。 三、命名规则 ABAP命名...

    如何提高ABAP程序运行效率.pdf

    参数能够以各种方式从子程序传递或传递到子程序。ABAP/4报表程序用于分析数据库表中的数据。这种分析的结果可以显示在屏幕上或发送到打印机上。逻辑数据库支持报表程序。 在提高ABAP程序运行效率方面,语法优化是一...

    批量冲销生产订单报工,ABAP程序

    在选择屏幕部分,程序定义了用户输入参数,如`P_FILE`用于指定要导出的文件名,`P_VORNR`允许用户输入子订单号。`SELECT-OPTIONS``s_aufnr`则允许用户选择多个订单号。功能键1可能用于触发筛选条件的下载功能。 在...

    ABAP中文简介-1

    子程序可以有多种参数传递方式,而功能模块则是一种预定义的、有明确数据接口的子程序,可以在中央库中创建和维护,便于独立测试和复用。功能模块的设计使得调用程序和被调用模块之间的交互更加标准化。 在SAP环境...

    abap新手边练边学

    #### 一、ABAP 参数传递方式详解 **1. CallByReference (按引用传递)** - **概念**:在传递参数时,实际上是将变量的地址传递到参数中,这意味着子程序中的参数变量与外部的实际变量共享同一个地址空间。因此,在...

    SAP ABAP编程实战基础

    ABAP中模块的概念包括程序模块(PROGRAM MODULE)、宏块(MACROBLOCK)、包含程序(INCLUDE PROGRAM)和子程序(SUBROUTINE PROCEDURE)。对于模块间的参数传递、控制结构以及函数模块(FUNCTION MODULE)的使用等...

    ABAP帮助文档

    - **PERFORM**:调用子程序。 - **MODIFY** 和 **APPEND**:用于修改和添加内部表中的行。 3. **ABAP程序结构**: ABAP程序由多个部分组成,如程序头(DEFINITION and IMPLEMENTATION),数据声明,初始化...

    alv abap sap 总结

    在 SAP ABAP 开发中,ALV (ABAP List Viewer) 是一种常用的数据展示工具,它提供了一种...需要注意的是,SAP 不断更新其开发工具和技术,因此实际开发中可能需要参考最新的 SAP ABAP 文档或教程来获取最准确的信息。

    ABAP最详细的开发规范

    - 子程序开始处应添加注释,说明该子程序的作用和参数意义。 - 示例:`*-- PROCESS_DATA - Process data based on the given date.`。 #### 功能模块规范 **5.1 函数模块结构** - 函数模块应该有一个清晰的结构,...

    abap简单递归算法

    - 参数:接受一个输入参数`dt_num`,并返回一个输出参数`ch_num`。 - 递归终止条件:当`dt_num`小于等于1时,直接返回`dt_num`的值(即1)。这是因为1的阶乘为1。 - 递归逻辑:如果`dt_num`大于1,则计算`(dt_num...

    ABAP开发规范.doc

    - **子程序设计**:频繁使用的代码块应封装成子程序,谨慎处理全局变量,推荐通过参数传递数据。 - **参数命名**:子程序的形式参数和实际参数名应不同,并明确指定参数类型。 - **子程序规模**:单个子程序的代码...

    ABAP4中文培训资料

    参数能够 以各种方式 从子程序传 递或传递到 子程序。 • ABAP/4 包含一种特 殊子程序, 叫做功能模 块。您可以 在中央库中 创建和维护 功能模块。 在调用程序 和子程序之 间功能模块 有一个明确 定义的数据 接口。...

    SAP ABAP开发学习——第11课:模块化编程1(视频教程)

    - **参数传递**:ABAP支持值传递和引用传递两种方式,前者是传值,后者是传址,选择哪种方式取决于数据是否需要在子程序内部修改并反映到主程序中。 3. **函数模块(Function Modules)** - **标准化接口**:函数...

Global site tag (gtag.js) - Google Analytics