二维码

SAP自建ABAP函数实现金额转换成大写

Twilight发表于 2016-06-02 10:37chan0815 最后回复于 2020-05-12 14:42 [复制链接] 7417 3

在财务单据打印上,有很多这样的需求,自建一个函数,代码如下:
  1. FUNCTION zfi_translate.
  2. *"----------------------------------------------------------------------
  3. *"*"本地接口:
  4. *"       IMPORTING
  5. *"             VALUE(ZNETWR) LIKE  VBRP-NETWR
  6. *"       EXPORTING
  7. *"             VALUE(ZTEXT) LIKE  SKAT-TXT50
  8. *"----------------------------------------------------------------------

  9.   DATA: m_curr(15) .
  10.   DATA: m_char(6) .
  11.   DATA: m_chare(1) .
  12.   DATA: m_len TYPE i .
  13.   DATA: m_lenn TYPE i .
  14.   DATA: m_count TYPE i .
  15.   CLEAR: m_text , ztext .
  16.   WRITE znetwr TO m_curr DECIMALS 2
  17.                          USING EDIT MASK 'RRV_________.__' .
  18.   CONDENSE m_curr .
  19.   m_len = strlen( m_curr ) .
  20.   m_lenn = m_len .
  21.   m_count = 0 .
  22.   DO m_len TIMES .
  23.     m_count = m_count + 1 .
  24.     m_lenn = m_lenn - 1 .
  25.     m_chare = m_curr+m_lenn(1) .
  26.     CASE m_chare.
  27.       WHEN '0' .
  28.         m_char = '零' .
  29.       WHEN '1' .
  30.         m_char = '壹' .
  31.       WHEN '2' .
  32.         m_char = '贰' .
  33.       WHEN '3' .
  34.         m_char = '叁' .
  35.       WHEN '4' .
  36.         m_char = '肆' .
  37.       WHEN '5' .
  38.         m_char = '伍' .
  39.       WHEN '6' .
  40.         m_char = '陆' .
  41.       WHEN '7' .
  42.         m_char = '柒' .
  43.       WHEN '8' .
  44.         m_char = '捌' .
  45.       WHEN '9' .
  46.         m_char = '玖' .
  47.       WHEN '-' .
  48.         m_char = '(负)' .
  49.     ENDCASE .
  50.     IF m_char NE '(负)' AND m_char NE space .
  51.       CASE m_count .
  52.         WHEN '1' .
  53.           CONCATENATE m_char '分' INTO m_char .
  54.         WHEN '2' .
  55.           CONCATENATE m_char '角' INTO m_char .
  56.         WHEN '4' .
  57.           CONCATENATE m_char '圆' INTO m_char .
  58.         WHEN '5' OR '9' .
  59.           CONCATENATE m_char '拾' INTO m_char .
  60.         WHEN '6' OR '10'.
  61.           CONCATENATE m_char '佰' INTO m_char .
  62.         WHEN '7' OR '11' .
  63.           CONCATENATE m_char '仟' INTO m_char .
  64.         WHEN '8' .
  65.           CONCATENATE m_char '万' INTO m_char .
  66.         WHEN '12' .
  67.           CONCATENATE m_char '亿' INTO m_char .
  68.       ENDCASE .
  69.     ENDIF.
  70.     CONCATENATE m_char m_text INTO m_text .
  71.     CONDENSE m_text .
  72.     CLEAR m_char .
  73.   ENDDO .

  74.   ztext = m_text .
  75. *PERFORM sub_translate .

  76. ENDFUNCTION.
复制代码

使用下面的函数,输入结果更人性化
  1. FUNCTION zfifm067.
  2. *"----------------------------------------------------------------------
  3. *"*"本地接口:
  4. *"  IMPORTING
  5. *"     VALUE(I_AMOUNT) TYPE  VBRP-NETWR
  6. *"  EXPORTING
  7. *"     VALUE(E_TEXT) TYPE  SKAT-TXT50
  8. *"----------------------------------------------------------------------
  9.   DATA: lv_str      TYPE string,
  10.         lv_int_part TYPE string,   " 整数部分
  11.         lv_dec_part TYPE string,   " 小数部分(两位,如 '03')
  12.         lv_jiao     TYPE i,
  13.         lv_fen      TYPE i.
  14.   DATA:ls_words TYPE spell.
  15.   CONSTANTS: c_num(20)  TYPE c VALUE '零壹贰叁肆伍陆柒捌玖'.

  16.   lv_str = i_amount.
  17.   CONDENSE lv_str NO-GAPS.
  18.   SPLIT lv_str AT '.' INTO lv_int_part lv_dec_part.

  19.   CALL FUNCTION 'SPELL_AMOUNT'
  20.     EXPORTING
  21.       amount    = lv_int_part
  22.       language  = sy-langu
  23.     IMPORTING
  24.       in_words  = ls_words
  25.     EXCEPTIONS
  26.       not_found = 1
  27.       too_large = 2
  28.       OTHERS    = 3.

  29.   lv_jiao = lv_dec_part(1) - '0'.
  30.   lv_fen  = lv_dec_part+1(1) - '0'.

  31.   IF lv_jiao = 0 AND lv_fen = 0.
  32.     e_text = ls_words-word && '元整'.
  33.   ELSE." 小数部分
  34.     e_text = ls_words-word && '元'.
  35.     IF lv_jiao > 0.
  36.       e_text = e_text && c_num+lv_jiao(1) && '角'.
  37.     ENDIF.
  38.     IF lv_fen > 0.
  39.       e_text = e_text && c_num+lv_fen(1) && '分'.
  40.     ENDIF.
  41.   ENDIF.

  42. ENDFUNCTION.
复制代码

回复

使用道具 举报

zll
棒棒棒棒哒
回复

使用道具 举报

zhongguomao
棒棒棒棒哒
回复

使用道具 举报

chan0815
thank you for share documents~~
回复 支持 反对

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表