SAP中汇率

汇率存储的表位TCURR

汇率维护的事务代码为:OB08

每一种货币汇率都有很多版本,按照时间有效性管理

汇率涉及的两种货币,第一个为从,第二个为到,一般换算比率都是1,但也有不是1的情况(主要是换算双方差别较大,防止小数点位数太多导致差异过大),比如从日元到人民币的换算的汇率就是  100日元 兑换 ?? 人民币。

汇率按照汇率类型进行管理

实际的汇率类型设计以及汇率的形式的定义都是按照相关法律法规以及实际业务的需要,汇率值是按照国际汇率的情况,定期进行更新。

另外在采购、收货、发票等环节,都会使用当时的最新的汇率进行计算,比如:

如果是进口件采购,使用外币签订订单则

在采购订单抬头上有货币(ekko-waers)和当时汇率(ekko-wkurs

采购订单行项目中有相应的货币的单价(ekpo-netpr)和总价(ekpo-netwr)

采购订单收货时:除外币收货金额(ekbe-wrbtr)外,还有按照当时汇率折算的本币金额ekbe-dmbtr。在采购订单收货凭证中也有货币(ekbe-waers)

开发票时,也是按照到货金额(外币),但是还会按照当时的汇率折算一个本地金额(CNY

在发票抬头中有开票的货币rbkp-waers(外币)及汇率rbkp-kursf(开票当时)。

 

 

汇率读取和计算的function module:

 

 

1,汇率读取:

 

FUNCTION zmm272_get_ukurs.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(I_DATUM) TYPE  DATUM
*"     VALUE(I_CURR) TYPE  FWAER2
*"  EXPORTING
*"     VALUE(O_UKURS) TYPE  UKURS_CURR
*"----------------------------------------------------------------------

  DATA lt_tcurr LIKE tcurr OCCURS WITH HEADER LINE.
  DATAl_gdatu LIKE sy-datum,
        l_fcurr LIKE tcurr-fcurr,
        l_tcurr LIKE tcurr-tcurr,
        l_kurst LIKE tcurr-kurst.


  CALL FUNCTION 'CONVERSION_EXIT_INVDT_INPUT'
    EXPORTING
      input  i_datum
    IMPORTING
      output l_gdatu.

  CASE i_curr.
    WHEN 'EUR'"     如果是欧元
      l_fcurr 'CNY'.
      l_tcurr i_curr.
      l_kurst 'EURX'.
    WHEN OTHERS.   " 如果是其它货币
      l_fcurr i_curr.
      l_tcurr 'CNY'.
      l_kurst 'M'.
  ENDCASE.

  SELECT  kurst fcurr tcurr ukurs gdatu  UP TO ROWS
     INTO CORRESPONDING FIELDS OF TABLE lt_tcurr
        FROM tcurr                  "汇率
        WHERE kurst EQ 'M'          "汇率类型
        AND  fcurr EQ   l_fcurr     "从货币
       AND  tcurr EQ   l_tcurr      "最终货币
         AND  gdatu >=  l_gdatu      "汇率有效起始日期
        ORDER BY gdatu.
 read table  lt_tcurr index 1.
 if sy-subrc 0.

   O_UKURS lt_tcurr-ukurs.
 endif.

ENDFUNCTION.

 

2. 基于汇率的价格换算

 

FUNCTION ZMM272_GET_NETPR.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(I_DATUM) TYPE  DATUM
*"     VALUE(I_CURR) TYPE  FWAER2
*"     VALUE(I_NETPR) TYPE  NETPR
*"     VALUE(I_FLAG) TYPE  CHAR1
*"     VALUE(I_UKURS) TYPE  UKURS_CURR OPTIONAL
*"  EXPORTING
*"     VALUE(O_NETPR) TYPE  NETPR
*"----------------------------------------------------------------------

  DATA lt_tcurr LIKE tcurr OCCURS WITH HEADER LINE.
  DATAl_gdatu LIKE sy-datum,
        l_fcurr LIKE tcurr-fcurr,
        l_tcurr LIKE tcurr-tcurr,
        l_kurst LIKE tcurr-kurst.

  DATA l_ukurs TYPE ukurs_curr.
  l_ukurs i_ukurs.
  IF l_ukurs IS INITIAL.
    CALL FUNCTION 'ZMM272_GET_UKURS'
      EXPORTING
        i_datum i_datum
        i_curr  i_curr
      IMPORTING
        o_ukurs l_ukurs.
  ENDIF.
  IF l_ukurs > 0.
    IF i_flag 'A'.   " 从CNY到外币转换;
      CASE i_curr.
        WHEN 'EUR'"     如果是欧元
          o_netpr i_netpr * l_ukurs.
        WHEN 'JPY'.      "  如果是日元,要考虑100倍的问题
          o_netpr i_netpr * 100 / l_ukurs.
        WHEN OTHERS.   " 如果是其它货币
          o_netpr i_netpr * 100 / l_ukurs.
      ENDCASE.
    ELSEIF i_flag 'B'.   " 从外币到CNY转换
      CASE i_curr.
        WHEN 'EUR'"     如果是欧元
          o_netpr i_netpr / l_ukurs.
        WHEN 'JPY'.      "  如果是日元,要考虑100倍的问题
          o_netpr i_netpr *  l_ukurs / 100  .
        WHEN OTHERS.   " 如果是其它货币
          o_netpr i_netpr  * l_ukurs.
      ENDCASE.
    ENDIF.
  ENDIF.
ENDFUNCTION.

 

3. 基于汇率的金额计算

FUNCTION zmm272_get_money.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(I_DATUM) TYPE  DATUM
*"     VALUE(I_CURR) TYPE  FWAER2
*"     VALUE(I_MONEY) TYPE  DFIDPT_AMOUNT
*"     VALUE(I_FLAG) TYPE  CHAR1
*"     VALUE(I_UKURS) TYPE  UKURS_CURR OPTIONAL
*"  EXPORTING
*"     VALUE(O_MONEY) TYPE  DFIDPT_AMOUNT
*"----------------------------------------------------------------------

  DATA lt_tcurr LIKE tcurr OCCURS WITH HEADER LINE.
  DATAl_gdatu LIKE sy-datum,
        l_fcurr LIKE tcurr-fcurr,
        l_tcurr LIKE tcurr-tcurr,
        l_kurst LIKE tcurr-kurst.

  DATA l_ukurs TYPE ukurs_curr.
  l_ukurs i_ukurs.
  IF l_ukurs IS INITIAL.
    CALL FUNCTION 'ZMM272_GET_UKURS'
      EXPORTING
        i_datum i_datum
        i_curr  i_curr
      IMPORTING
        o_ukurs l_ukurs.
  ENDIF.
  IF l_ukurs > 0.
    IF i_flag 'A'.   " 从CNY到外币转换;
      CASE i_curr.
        WHEN 'EUR'"     如果是欧元
          o_money i_money * l_ukurs.
        WHEN 'JPY'.      "  如果是日元,要考虑100倍的问题
          o_money i_money * 100 / l_ukurs.
        WHEN OTHERS.   " 如果是其它货币
          o_money i_money * 100 / l_ukurs.
      ENDCASE.
    ELSEIF i_flag 'B'.   " 从外币到CNY转换
      CASE i_curr.
        WHEN 'EUR'"     如果是欧元
          o_money i_money / l_ukurs.
        WHEN 'JPY'.      "  如果是日元,要考虑100倍的问题
          o_money i_money *  l_ukurs / 100  .
        WHEN OTHERS.   " 如果是其它货币
          o_money i_money  * l_ukurs.
      ENDCASE.
    ENDIF.
  ENDIF.
ENDFUNCTION.

 

你可能感兴趣的:(SAP中汇率)