zoukankan      html  css  js  c++  java
  • SAP中的Currency Converting Factor

        ABAP编程中,有个概念很重要,即Currency Converting Factor(货币转换因子)。可能很多ABAP初学者都不知道这是什么东西,这里我们就简单探讨下。

    1. 什么是货币转换因子
    在SAP中,货币是维护在TCURC表里面,这从Domain: WAERS中可以看到。
    不过这里我们要介绍的是表TCURX,它维护了货币金额的小数位。比如JPY日元,在该表是0。正常的货币都是2位小数的。那么,该表有什么意义呢?我们来看下面的例子。
     
    DATA: netwr TYPE p DECIMALS 2.
    netwr = '1.3'.
    WRITE: netwr CURRENCY 'JPY'.
     
    输出的结果是130,即1.3*100,我们说日元的转换因子为100。这是因为TCURX定义了日元没有小数位,那么数据库表的实际数字 1.3 就解释成了130。反过来就是,我们认为的130日元,在数据库里存储成了1.3。这个过程都是SAP自动处理的。
    同理,小数位为1的,其转换因子为10;而RMB因为小数位为2,其转换因子为1,这也是系统的默认值。
     
    2. 如何将CURR字段赋给DEC(P)字段
    如果要将一个CURR字段赋值给类型为DEC(P)的字段,则要考虑货币转换因子的影响。当我们写与外系统集成的接口时,这就显得很有必要了。
    这里介绍个函数:CURRENCY_CONVERTING_FACTOR,它可用于读取货币转换因子。
     
    DATA: v LIKE vbap-netwr,
          p TYPE p DECIMALS 2,
          cur LIKE vbap-waerk,
          factor TYPE p DECIMALS 3.

    v = '1.3'.
    cur = 'JPY'.

    CALL FUNCTION 'CURRENCY_CONVERTING_FACTOR'
      EXPORTING
        currency          = cur
      IMPORTING
        factor            = factor
      EXCEPTIONS
        too_many_decimals = 1
        OTHERS            = 2.
    IF sy-subrc <> 0.
      factor = 1.
    ENDIF.

    p = v * factor.
    WRITE: p.
    这样,我们与外系统集成时,应该以p作为接口参数,130日元就不会错误地成了1.3日元。
     
    3. ABAP编程中需要注意的地方
    在编程中,我们对CURR字段要多加以注意,下面简单举几个应用例子。
    (1) List中,当输出CURR字段时,记得指定对应的货币.
        如: WRITE: vbap-netwr CURRENCY vbap-waerk.
    (2) Screen中,对于CURR字段,需要设置对应的货币字段,
    (3) ALV中,需要对FIELD CATALOG进行设置.
        如: ls_cfieldname = 'WAERS'. "这里的WAERS是内表中的另一字段
  • 相关阅读:
    01-JAVA语言基础(动手动脑)
    大道至简第一章JAVA伪代码形式读后感
    《美国教授写给被开除中国留学生的信》阅读笔记
    《大道至简》读后感
    使用java2Word生成Word文档打不开报错 存在非法字符xml
    继上篇博客对安卓爬虫以及TextView更新的问题解释
    安卓Jsoup爬虫
    AndroidStdio模拟器打不开报错 Guest isn't online after 7 seconds
    MapReduce
    水晶报表报错:log4net初始值问题
  • 原文地址:https://www.cnblogs.com/ruingy/p/3476409.html
Copyright © 2011-2022 走看看