使用相同功能的多个功能模块上的异常行为

2020-08-20 01:48发布

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

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


嗨,

这是一个更笼统的问题,但我首先要解释是什么促使它产生的,您可以跳过它,因为它与我发现该错误的方式有关。

我一直在测试两个标准功能模块: WS_DELIVERY_UPDATE WS_REVERSE_GOODS_ISSUE。 这些FM用于过帐与交货有关的发货并分别将其冲销。 它们真的是简单的FM,我想我在它们上使用了2或3个参数。

问题是当它们连续执行时。

如果在同一会话中,用户发布了一个好问题,然后尝试将其撤消,则系统给我一个错误,表明使用的交付不存在,如果我重新启动会话,ws_reverse_goods_issue可以正常工作。 如果我们在SDN上进行搜索,那么关于这两个FM和这个确切的问题有几个主题。

现在,为什么会这样?

涉及3个程序:

-第一个FM WS_DELIVERY_UPDATE 位于功能组 V50L 上,此FG使用 include vblkdata。

-第二个FM, WS_REVERSE_GOODS_ISSUE ,位于FG V51W 上,该FG还利用了 include vblkdata。

-都是FM,都使用模块池 SAPMV50A 的形式,此人还利用了 include vblkdata。


包含包含变量 LIKP

为了减少编写内容,我将称呼FM WS_DELIVERY_UPDATE = A, WS_REVERSE_GOODS_ISSUE = B


如果我调用FM B,则它将在主代码中的某个位置更新变量(B)LIKP-VBELN,这也会更改变量(SAPMV50A)LIKP-VBELN,并且程序可以正常工作。

如果我依次呼叫FM A和B,那么发生的情况是,当变量(B)LIKP-VBELN更改时,(SAPMV50A)LIKP-VBELN不变。

以某种方式,使用 SAPMV50A 第一个功能模块似乎也将与其共享存储区。

此外,FM B设计为使用这种功能,如果不掌握这种"共享内存区域",它将不起作用。

我的问题是:这是SAP的预期设计吗? 这是怎么回事 我试图了解这种逻辑是什么,预期的行为是什么,等等。

我并不想在这里解决问题,我知道一些解决方法。 我想了解真正发生的事情

TL; DR::3个程序(A,B,C)使用相同的包含,程序A和B使用C。如果IB更改了包含中声明的变量,则其值也会更改 在C上。如果我在程序A上调用B,则B停止更改C上的值。

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

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


嗨,

这是一个更笼统的问题,但我首先要解释是什么促使它产生的,您可以跳过它,因为它与我发现该错误的方式有关。

我一直在测试两个标准功能模块: WS_DELIVERY_UPDATE WS_REVERSE_GOODS_ISSUE。 这些FM用于过帐与交货有关的发货并分别将其冲销。 它们真的是简单的FM,我想我在它们上使用了2或3个参数。

问题是当它们连续执行时。

如果在同一会话中,用户发布了一个好问题,然后尝试将其撤消,则系统给我一个错误,表明使用的交付不存在,如果我重新启动会话,ws_reverse_goods_issue可以正常工作。 如果我们在SDN上进行搜索,那么关于这两个FM和这个确切的问题有几个主题。

现在,为什么会这样?

涉及3个程序:

-第一个FM WS_DELIVERY_UPDATE 位于功能组 V50L 上,此FG使用 include vblkdata。

-第二个FM, WS_REVERSE_GOODS_ISSUE ,位于FG V51W 上,该FG还利用了 include vblkdata。

-都是FM,都使用模块池 SAPMV50A 的形式,此人还利用了 include vblkdata。


包含包含变量 LIKP

为了减少编写内容,我将称呼FM WS_DELIVERY_UPDATE = A, WS_REVERSE_GOODS_ISSUE = B


如果我调用FM B,则它将在主代码中的某个位置更新变量(B)LIKP-VBELN,这也会更改变量(SAPMV50A)LIKP-VBELN,并且程序可以正常工作。

如果我依次呼叫FM A和B,那么发生的情况是,当变量(B)LIKP-VBELN更改时,(SAPMV50A)LIKP-VBELN不变。

以某种方式,使用 SAPMV50A 第一个功能模块似乎也将与其共享存储区。

此外,FM B设计为使用这种功能,如果不掌握这种"共享内存区域",它将不起作用。

我的问题是:这是SAP的预期设计吗? 这是怎么回事 我试图了解这种逻辑是什么,预期的行为是什么,等等。

我并不想在这里解决问题,我知道一些解决方法。 我想了解真正发生的事情

TL; DR::3个程序(A,B,C)使用相同的包含,程序A和B使用C。如果IB更改了包含中声明的变量,则其值也会更改 在C上。如果我在程序A上调用B,则B停止更改C上的值。

付费偷看设置
发送
4条回答
1楼 · 2020-08-20 02:33.采纳回答

在include vblkdata中包含以下语句:

data:公用部分likpcom的开始。

此语句开始一个内存调用likpcom块,该块在所有程序之间共享

因此,这是SAP的预期设计。 您遇到的情况可能是意外的副作用,或者(这就是SAP会告诉您的)使用未发布的功能模块的后果。

梦想连接
2楼-- · 2020-08-20 02:41

对-TABLES在 与COMMON PART相同。 我想我记得知道...

木偶小白
3楼-- · 2020-08-20 02:32

此消息已被审核。

wang628962
4楼-- · 2020-08-20 02:22

简单的解决方案:对带有参数COMMIT的第一个功能模块使用DESTINATION" NONE"命令 = abap_false,并分别调用" BAPI_TRANSACTION_COMMIT(也具有DESTINATION" NONE")。

一周热门 更多>