货币转换FM/方法可以全部统治?

2020-09-22 16:30发布

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

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


我们有一个正在使用FM CONVERT_TO_FOREIGN_CURRENCY的程序,最近遇到了日元转换问题。 这是一个众所周知的问题,并且有许多相关的SCN问题(只是一个例子)。

问题在于日元货币配置了"转换因子"。 当前的汇率为5000 JPY约为50 USD。 但是,如果使用FM CONVERT_TO_FOREIGN_CURRENCY(或许多类似的),则返回50而不是5000。有关SCN和SAP Notes的建议,除转换FM外,还根据配置使用BAPI_CURRENCY_CONV_TO_EXTERNAL来调整因数的结果 。 即 第一个FM将返回50,然后BAPI将其变为5000。

我看过一些SAP更正笔记,似乎SAP基本上也是如此:在第一个FM之后添加BAPI(或另一个FM)。

我的问题是:真的没有单一的FM或类/方法可以同时完成这两项工作吗? 我在SE37和SE24中使用* cur * conv *掩码进行搜索,但空手而归。 如果标准中没有类似的内容,那么每个人都如何在Z代码中处理呢? 只需调用2个FM或全局自定义方法/FM?

我知道这是这个问题上的第100个问题,但是似乎很奇怪,2018年仍然没有更好的标准选项。除非我错过了一些东西。 如果有的话,我们有ECC 6.0 EHP6。

谢谢!

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

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


我们有一个正在使用FM CONVERT_TO_FOREIGN_CURRENCY的程序,最近遇到了日元转换问题。 这是一个众所周知的问题,并且有许多相关的SCN问题(只是一个例子)。

问题在于日元货币配置了"转换因子"。 当前的汇率为5000 JPY约为50 USD。 但是,如果使用FM CONVERT_TO_FOREIGN_CURRENCY(或许多类似的),则返回50而不是5000。有关SCN和SAP Notes的建议,除转换FM外,还根据配置使用BAPI_CURRENCY_CONV_TO_EXTERNAL来调整因数的结果 。 即 第一个FM将返回50,然后BAPI将其变为5000。

我看过一些SAP更正笔记,似乎SAP基本上也是如此:在第一个FM之后添加BAPI(或另一个FM)。

我的问题是:真的没有单一的FM或类/方法可以同时完成这两项工作吗? 我在SE37和SE24中使用* cur * conv *掩码进行搜索,但空手而归。 如果标准中没有类似的内容,那么每个人都如何在Z代码中处理呢? 只需调用2个FM或全局自定义方法/FM?

我知道这是这个问题上的第100个问题,但是似乎很奇怪,2018年仍然没有更好的标准选项。除非我错过了一些东西。 如果有的话,我们有ECC 6.0 EHP6。

谢谢!

付费偷看设置
发送
4条回答
callcenter油条
1楼 · 2020-09-22 17:16.采纳回答

最简单的解释是遵循以下规则:对于涉及CURR数据类型的任何内容,请使用INTERNAL格式。 将EXTERNAL用于所有其他数据类型。 使用BAPI_CURRENCY_CONV *在它们之间进行转换。

在线帮助对其进行了很好的解释,但是要获得真正详细的解释,请喝杯咖啡(您将需要它)并通读注释153707

大简至美
2楼-- · 2020-09-22 17:14

是的,BAPI将 几乎总是使用外部格式,因为原则上应该可以从外部调用它们。

我认为所有这一切的原因都是历史性的,有人曾想过,我们只是将其视为整数以简化计算,但我们将其定义为带有两个小数点的p类型,这样它将自动正确显示,我们 为可怜的开发人员免去了必须时刻转换的麻烦。 如果那没有道理,请记住,SAP始于70年代,一个以休闲毒品闻名的时代。

Tong__Ming
3楼-- · 2020-09-22 17:30

嗨,

我通常从tcurx表中检索货币的小数位,然后对要转换的金额进行一些数学运算。

然后,我使用BAPI BAPI_EXCHANGERATE_GETDETAIL获取汇率明细,并使用该信息进行金额换算。

示例未经测试。

数据:ls_tcurx类型tcurx,
       lv_to_curr类型SYCURR,
       lv_fr_curr类型SyCurr,
       lv_date类型为sy-datum,
       lv_amount类型dmbtr,
       lv_convert类型dmbtr,
       ls_exchrt类型bapi1093_0,
       ls_return类型bapiret1。


 lv_amount = 50。
 lv_to_curr ='JPY'。
 lv_fr_curr ='美元'。
 lv_date = sy-datum。


 从tcurx选择单个*到ls_tcurx
    其中currkey eq lv_to_curr。
 如果ls_tcurx不是初始的。
 案例ls_tcurx-currdec。
   当1。
     lv_amount = lv_amount * 10。
   当0。
     lv_amount = lv_amount * 100。
   当3。
     lv_amount = lv_amount/10。
   当别人。
 尾箱。
 万一。


   调用函数" BAPI_EXCHANGERATE_GETDETAIL"
     出口
       rate_type ='1004'" 1004损益/'1002'资产负债表
       from_curr = lv_fr_curr
       to_currncy = lv_to_curr
       日期='20180329'
     输入
       exch_rate = ls_exchrt
       return = ls_return。


     lv_convert = lv_amount *((ls_exchrt-exch_rate * ls_exchrt-to_factor)/ls_exchrt-from_factor)。
 
樱桃小丸子0093
4楼-- · 2020-09-22 17:26

好吧,如果您查看内部/外部转换BAPI,您会发现它们的功能几乎与您的代码相同。 就个人而言,我更喜欢尽可能使用标准功能。 无需重新发明自行车,然后负责维护。 谁知道SAP是否决定重新设计表,而S/4HANA中没有。 :)

一周热门 更多>