货币转换函数:CURRENCY_CONVERTING_FACTOR 货币转换函数:CURRENCY_CONVERTING_FACTOR

针对不同币别要做金额栏位转换

计算规则: 金额 = 原始金额 * 转换率

以下转自博客:https://www.cnblogs.com/sanlly/p/3371568.html

货币转换函数:CURRENCY_CONVERTING_FACTOR

【CURRENCY_CONVERTING_FACTOR】在SAP系统中,对于曰币、韩币、台币这类特殊货币的处理是有特殊规则的。

首先,根据币别到DB表中读取 TCURX 中读取相应的小数位数 CURRDEC。

如果没有维护相应币别的信息  则默认 CURRDEC = 2。

如果 CURRDEC GT 5 就报错。

然后默认转换率是100。

在CURRDEC NE 0 的情况下

循环 CURRDEC 次,每次将转换比率 除以 10.

所以如果表 TCURX 中的 CURRDEC  = 0 就默认转换比率 为100

当表 TCURX 中没有找到相应数据时 则默认 CURRDEC = 2.

转换比率也是 100/ 10 / 10 = 1.

其他的, 如果表TCURX 中的 CURRDEC = 4,  则转换比率应该为 100/ 10 /10 /10 / 10 = 0.01

我们在SE16中看到的货币金额基本上都经过了这个转换,如曰元,都是除以100后存入数据库的。
所以当我们从数据库中读取曰元金额时也应该作相应的转换,乘以100 。

简单的使用Function CURRENCY_CONVERTING_FACTOR。输入币别,就可以得到相应的转换比率了。

函数中所涉及的常用选项:
EXPORTING:
    CURRENCY:   将被处理的货币种别编号
IMPORTING:
    FACTOR:      转换后得到的货币比率

例1.

FORM BRF_AP USING F_BETRAG             "  金额
                  F_CURRENCY.         " 货币代码

  DATA: S_FACTOR  TYPE  P DECIMALS 3.

  CALL FUNCTION 'CURRENCY_CONVERTING_FACTOR'
    EXPORTING
      CURRENCY          = F_CURRENCY
    IMPORTING
      FACTOR            = S_FACTOR
    EXCEPTIONS
      TOO_MANY_DECIMALS = 1
      OTHERS            = 2.

  IF S_FACTOR NE 0.
    F_BETRAG = F_BETRAG / S_FACTOR.
  ENDIF.
ENDFORM.                    "BRF_AP

例2

DATA: G_PER_PRICE  TYPE P,
      G_KPER_PRICE TYPE P,
      G_PRICE      TYPE P,
      PG_FACTOR    TYPE P DECIMALS 3.

FORM CHANGEVALUEBYFACTOR USING P_WAERS CHANGING PG_FACTOR.
  CALL FUNCTION 'CURRENCY_CONVERTING_FACTOR'
    EXPORTING
      CURRENCY          = P_WAERS   "輸入的幣別
    IMPORTING
      FACTOR            = PG_FACTOR  "輸出的值
    EXCEPTIONS
      TOO_MANY_DECIMALS = 1
      OTHERS            = 2.

  IF SY-SUBRC <> 0.
    PG_FACTOR = 1.
  ENDIF.
ENDFORM.                    "CHANGEVALUEBYFACTOR

【CURRENCY_CONVERTING_FACTOR】在SAP系统中,对于曰币、韩币、台币这类特殊货币的处理是有特殊规则的。

首先,根据币别到DB表中读取 TCURX 中读取相应的小数位数 CURRDEC。

如果没有维护相应币别的信息  则默认 CURRDEC = 2。

如果 CURRDEC GT 5 就报错。

然后默认转换率是100。

在CURRDEC NE 0 的情况下

循环 CURRDEC 次,每次将转换比率 除以 10.

所以如果表 TCURX 中的 CURRDEC  = 0 就默认转换比率 为100

当表 TCURX 中没有找到相应数据时 则默认 CURRDEC = 2.

转换比率也是 100/ 10 / 10 = 1.

其他的, 如果表TCURX 中的 CURRDEC = 4,  则转换比率应该为 100/ 10 /10 /10 / 10 = 0.01

我们在SE16中看到的货币金额基本上都经过了这个转换,如曰元,都是除以100后存入数据库的。
所以当我们从数据库中读取曰元金额时也应该作相应的转换,乘以100 。

简单的使用Function CURRENCY_CONVERTING_FACTOR。输入币别,就可以得到相应的转换比率了。

函数中所涉及的常用选项:
EXPORTING:
    CURRENCY:   将被处理的货币种别编号
IMPORTING:
    FACTOR:      转换后得到的货币比率

例1.

FORM BRF_AP USING F_BETRAG             "  金额
                  F_CURRENCY.         " 货币代码

  DATA: S_FACTOR  TYPE  P DECIMALS 3.

  CALL FUNCTION 'CURRENCY_CONVERTING_FACTOR'
    EXPORTING
      CURRENCY          = F_CURRENCY
    IMPORTING
      FACTOR            = S_FACTOR
    EXCEPTIONS
      TOO_MANY_DECIMALS = 1
      OTHERS            = 2.

  IF S_FACTOR NE 0.
    F_BETRAG = F_BETRAG / S_FACTOR.
  ENDIF.
ENDFORM.                    "BRF_AP

例2

DATA: G_PER_PRICE  TYPE P,
      G_KPER_PRICE TYPE P,
      G_PRICE      TYPE P,
      PG_FACTOR    TYPE P DECIMALS 3.

FORM CHANGEVALUEBYFACTOR USING P_WAERS CHANGING PG_FACTOR.
  CALL FUNCTION 'CURRENCY_CONVERTING_FACTOR'
    EXPORTING
      CURRENCY          = P_WAERS   "輸入的幣別
    IMPORTING
      FACTOR            = PG_FACTOR  "輸出的值
    EXCEPTIONS
      TOO_MANY_DECIMALS = 1
      OTHERS            = 2.

  IF SY-SUBRC <> 0.
    PG_FACTOR = 1.
  ENDIF.
ENDFORM.                    "CHANGEVALUEBYFACTOR

猜你喜欢

转载自www.cnblogs.com/rainysblog/p/11691404.html