如何从SAP脚本调用子例程

2020-09-01 00:41发布

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

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


朋友,

谁能告诉我如何从sap脚本中调用子例程。

谢谢。

马赫什语

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

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


朋友,

谁能告诉我如何从sap脚本中调用子例程。

谢谢。

马赫什语

付费偷看设置
发送
5条回答
Aaron 3364
1楼-- · 2020-09-01 01:41

hi ..

调用ABAP子例程:PERFORM

您可以使用PERFORM命令从任何程序中调用ABAP子例程(表单),但要遵循常规的ABAP运行时授权 检查。 您可以使用对子例程的此类调用来执行计算,从数据库中获取显示或打印时所需的数据,格式化数据等。

PERFORM命令和所有控制命令一样,是在格式化文档以进行显示或打印时执行的。 调用的子例程与文档之间的通信是通过符号来实现的,这些符号的值在子例程中设置。

系统不会在SAPscript替换模块(例如TEXT_SYMBOL_REPLACE或TEXT_INCLUDE_REPLACE)内执行PERFORM命令。 替换模块只能替换符号值或解析包含文本,而不能解释SAPscript控制命令。

在表单窗口中的语法:

/:在程序 >

/:使用&INVAR1&

/:使用&INVAR2&

......

/:更改&OUTVAR1&

/:更改&OUTVAR2&

...

/:ENDPERFORM

INVAR1和INVAR2是变量符号,可以是以下任何一种 四种SAPscript符号类型。

OUTVAR1和OUTVAR2是本地文本符号,因此必须是字符串。

必须在ABAP报告程序中定义通过上述命令行调用的ABAP子例程,如下所示:

FORM

TABLES IN_TAB STRUCTURE ITCSY

OUT_TAB结构ITCSY。

...

ENDFORM。

通过/:USING ...传递的SAPscript符号的值现在存储在内部 表IN_TAB。 请注意,由于结构ITCSY中的字段Feld VALUE具有域TDSYMVALUE(CHAR 80),因此系统将这些值作为字符串传递给子例程。 请参见下面的示例,了解如何访问变量。

内部表OUT_TAB包含PERFORM语句中CHANGING参数的名称和值。 这些参数是本地文本符号,即字符字段。 请参阅下面的示例,了解如何在子例程中返回变量。

从SAPscript形式中,调用了ABAP程序QCJPERFO中的子例程GET_BARCODE。 然后,其中包含的简单条形码("首页","下一页","最后一页")被打印为局部变量符号。

SAPscript形式的定义:

/:在程序QCJPERFO中执行GET_BARCODE

/:使用&page&

/:使用&NEXTPAGE&

/:更改&BARCODE&

/:ENDPERFORM

/

/&BARCODE&

调用ABAP程序的代码:

报告QCJPERFO。

FORM GET_BARCODE表IN_PAR结构ITCSY

OUT_PAR结构ITCSY。

数据:PAGNUM LIKE SY-TABIX,"页码

类似于SY-TABIX的下一页。"下一页的数目

使用键" PAGE"读取表IN_PAR。

检查SY-SUBRC = 0。

PAGNUM = IN_PAR-VALUE。

使用键" NEXTPAGE"读取表IN_PAR。

检查SY-SUBRC = 0。

NEXTPAGE = IN_PAR-VALUE。

使用键"条形码"读取表OUT_PAR。

检查SY-SUBRC = 0。

如果PAGNUM = 1。

OUT_PAR -VALUE =‘|’。 "首页

ELSE。

OUT_PAR-VALUE =‘||’。"下一页

ENDIF。

如果NEXTPAGE = 0。

OUT_PAR-VALUE + 2 =" L"。 "标志:最后一页

ENDIF。

修改OUT_PAR索引的SY-TABIX。

ENDFORM。

问候

veeresh

CJones
2楼-- · 2020-09-01 01:29

PERFORM ... ENDPERFORM命令

SAP注释号:41302

症状

使用新的Release 3.0C命令PERFORM .. ENDPERFORM从SAPscript布局集中调用的FORM例程的接口语法应如何显示?

在表单程序中如何处理输入值或返回值?

其他关键字

PERFORM,ENDPERFORM,SAPscript,用户出口

原因和先决条件

在CD在线文档中,描述了从SAPscript启动FORM例程,但没有描述ABAP/4程序中FORM例程定义的确切语法。

解决方案

ABAP/4中的表单例程,可通过以下命令行调用:

/:在程序prog/中执行表格:使用&invar1&

/:使用&invar2&.../:更改&outvar1&/:更改&outvar2&.../:ENDPERFORM

必须在ABAP/4报告中定义如下:

FORM表格表格IN_TAB结构ITCSY OUT_TAB结构ITCSY .... ENDFORM。

重要:

以'/:USING ...'传递的变量invar1,invar2等是任何类型的SAPscript符号。 它们的名称和值可以在内部表IN_TAB中找到。 请记住,由于字段VALUE在结构ITCSY中拥有域TDSYMVALUE,因此将这些值作为字符串传输到FORM例程。 在FORM例程中访问变量invar1的示例; 然后将invar1的值以例程形式传递给变量LOC_INVAR1:

...使用键名='INVAR1'读取表IN_TAB.LOC_INVAR1 = IN_TAB值。

重要:

内部表OUT_TAB包含PERFORM命令中CHANGING参数的名称和值。 这些参数是本地文本符号,即字符字段。

在FORM例程中返回变量OUTVAR1的示例; 值outvar1的值来自LOC_OUTVAR1:

...使用键名='OUTVAR1'读表OUT_TAB。

如果SY-SUBRC =0。OUT_TAB-VALUE = LOC_OUTVAR1。 修改OUT_TAB索引SY-TABIX。ENDIF。

重要:

在SAP脚本替换模块(例如TEXT_SYMBOL_REPLACE或TEXT_INCLUDE_REPLACE)中未执行PERFORM命令。 替换模块只能替换符号值或扩展包含文本,但不能解释SAPscript控制命令。

警告:您不应该在ITCSY-VALUE字段中使用数字字段(例如,键入I),因为这些字段在此处显示为右对齐。 为了安全起见,请限制长度

致谢

sathish

xfwsx85
3楼-- · 2020-09-01 01:30

Hi ..

n您的脚本使用perform语句并在SE38程序中定义了形式。 使用类似布局的命令

/:在程序ZPROGNAME中执行

/:使用'VAR1'。

/:使用'VAR2'

/:更改'VAR3'

/:ENDPERFORM。

使用USING传递的所有参数及其名称和值都可以在内部表中找到 IN_TAB。

请注意,由于结构ITCSY中的字段Feld VALUE具有域TDSYMVALUE(CHAR 80),因此系统将这些值作为字符串传递给子例程。

内部表 OUT_TAB包含PERFORM语句中CHANGING参数的名称和值。

转到SE38事务并创建程序ZPROGNAME。

使用FM SPELL_AMOUNT。 此FM用于以字为单位

FORM 表格IN_TAB STRUCTURE ITCSY

OUT_TAB STRUCTURE ITCSY。

* ...... ..data声明

* ..............

呼叫功能'SPELL_AMOUNT'

导出

AMOUNT = PAMOUNT

  • CURRENCY =

  • FILLER = SPACE

LANGUAGE ='E'

IMPORTING

IN_WORDS = T_SPELL

EXCEPTIONS

NOT_FOUND = 1

TOO_LARGE = 2

其他= 3。

ENDFORM。

ENDFORM。

注意,

sai ramesh

樱桃小丸子0093
4楼-- · 2020-09-01 01:43

嗨,

您可以在文本元素级别使用以下代码。

/:在程序<程序名称>

中执行<子程序名称>

/:使用

/:更改

谢谢

Madhukar

compass1988
5楼-- · 2020-09-01 01:33

/:在程序<程序名称>中执行,受实际参数限制。

谢谢

一周热门 更多>