点击此处---> 群内免费提供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上的值。
在include vblkdata中包含以下语句:
data:公用部分likpcom的开始。
此语句开始一个内存调用likpcom块,该块在所有程序之间共享
因此,这是SAP的预期设计。 您遇到的情况可能是意外的副作用,或者(这就是SAP会告诉您的)使用未发布的功能模块的后果。
对-TABLES在 与COMMON PART相同。 我想我记得知道...
此消息已被审核。
简单的解决方案:对带有参数COMMIT的第一个功能模块使用DESTINATION" NONE"命令 = abap_false,并分别调用" BAPI_TRANSACTION_COMMIT(也具有DESTINATION" NONE")。
一周热门 更多>