博客首页 注册 建议与交流 排行榜 加入友情链接         宝宝相册的专门空间
推荐 投诉 搜索: 帮助

Sap_Abaper

abaperjohn.cublog.cn


关于日元的货币转换问题
项目中碰到用 CONVERT_TO_LOCAL_CURRENCY 转换日元到其它货币时数额大100倍的问题,经过研究发现日元在透明表中存储时,会把原币向左移2位既缩小一百倍存储。见图:
以下是在FB01中新建一张凭证,最后在bseg表找到该凭证号
 
 
 
 
可能是因为日元没有小数位,SAP在数据存储时必须要有小数位,再次查资料,发现SAP有所谓的external及internal的数据格式,不是存透明表取出的数都是external的,所以要解决此问题应在调用CONVERT_TO_LOCAL_CURRENCY 函数前,先调用一个 BAPI_CURRENCY_CONV_TO_INTERNAL 函数,就行了。
 
下面是一个Zfunction
 
  FUNCTION ZP1_CONVERT_TO_LOCAL_CURRENCY.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(CLIENT) TYPE  SY-MANDT DEFAULT SY-MANDT
*"     REFERENCE(DATE) TYPE  SYST-DATUM
*"     REFERENCE(FOREIGN_AMOUNT)
*"     REFERENCE(FOREIGN_CURRENCY)
*"     REFERENCE(LOCAL_CURRENCY)
*"     REFERENCE(RATE) DEFAULT 0
*"     REFERENCE(TYPE_OF_RATE) DEFAULT 'M'
*"     REFERENCE(READ_TCURR) DEFAULT 'X'
*"  EXPORTING
*"     REFERENCE(EXCHANGE_RATE)
*"     REFERENCE(FOREIGN_FACTOR)
*"     REFERENCE(LOCAL_AMOUNT)
*"     REFERENCE(LOCAL_FACTOR)
*"     REFERENCE(EXCHANGE_RATEX)
*"     REFERENCE(FIXED_RATE)
*"     REFERENCE(DERIVED_RATE_TYPE) TYPE  TCURR-KURST
*"  EXCEPTIONS
*"      NO_RATE_FOUND
*"      OVERFLOW
*"      NO_FACTORS_FOUND
*"      NO_SPREAD_FOUND
*"      DERIVED_2_TIMES
*"----------------------------------------------------------------------

*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(CLIENT) TYPE  SY-MANDT DEFAULT SY-MANDT
*"     REFERENCE(DATE) TYPE  SYST-DATUM
*"     REFERENCE(FOREIGN_AMOUNT)
*"     REFERENCE(FOREIGN_CURRENCY)
*"     REFERENCE(LOCAL_CURRENCY)
*"     REFERENCE(RATE) DEFAULT 0
*"     REFERENCE(TYPE_OF_RATE) DEFAULT 'M'
*"     REFERENCE(READ_TCURR) DEFAULT 'X'
*"  EXPORTING
*"     REFERENCE(EXCHANGE_RATE)
*"     REFERENCE(FOREIGN_FACTOR)
*"     REFERENCE(LOCAL_AMOUNT)
*"     REFERENCE(LOCAL_FACTOR)
*"     REFERENCE(EXCHANGE_RATEX)
*"     REFERENCE(FIXED_RATE)
*"     REFERENCE(DERIVED_RATE_TYPE) TYPE  TCURR-KURST
*"  EXCEPTIONS
*"      NO_RATE_FOUND
*"      OVERFLOW
*"      NO_FACTORS_FOUND
*"      NO_SPREAD_FOUND
*"      DERIVED_2_TIMES
*"----------------------------------------------------------------------
DATA: l_foreign_amount_internal type bseg-wrbtr.
DATA: l_foreign_amount_external type bapicurr-bapicurr.

l_foreign_amount_external = foreign_amount.

CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_INTERNAL'
  EXPORTING
    currency                   = foreign_currency
    amount_external            = l_foreign_amount_external
    max_number_of_digits       = 13
 IMPORTING
   AMOUNT_INTERNAL            = l_foreign_amount_internal
*   RETURN                     =
          .




CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
  EXPORTING
   CLIENT                  =  client
    date                    = date
    foreign_amount          = l_foreign_amount_internal
    foreign_currency        = foreign_currency
    local_currency          = local_currency
   RATE                    = RATE
   TYPE_OF_RATE            = TYPE_OF_RATE
   READ_TCURR              = read_tcurr
 IMPORTING
   EXCHANGE_RATE           = EXCHANGE_RATE
   FOREIGN_FACTOR          = FOREIGN_FACTOR
   LOCAL_AMOUNT            = LOCAL_AMOUNT
   LOCAL_FACTOR            = LOCAL_FACTOR
   EXCHANGE_RATEX          = EXCHANGE_RATEX
   FIXED_RATE              = FIXED_RATE
   DERIVED_RATE_TYPE       = DERIVED_RATE_TYPE
 EXCEPTIONS
   NO_RATE_FOUND           = 1
   OVERFLOW                = 2
   NO_FACTORS_FOUND        = 3
   NO_SPREAD_FOUND         = 4
   DERIVED_2_TIMES         = 5
   OTHERS                  = 6
          .
    CASE SY-SUBRC.
      WHEN 1.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
        WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
        RAISING NO_FACTORS_FOUND.
      WHEN 2.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
        WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
        RAISING DERIVED_2_TIMES.
      WHEN 3.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
        WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
        RAISING NO_SPREAD_FOUND.
      WHEN 4.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
        WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
        RAISING OVERFLOW.
    ENDCASE.



ENDFUNCTION.
 

发表于: 2007-12-20 ,修改于: 2007-12-20 18:04,已浏览305次,有评论0条 推荐 投诉


网友评论

发表评论