ABAP金额小写转大写(英文)

之前写的一个金额小写转大写(英文)的函数,用户美国的票据打印显示。

因为美国票据有特定的打印格式,所以自己在标准函数SPELL_AMOUNT上做了一些转换,比如:首字母大写、整数的话需要在后面加上Dollar或Dollars(根据单复数来判断)。

FUNCTION zjexx_to_jedx_us.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(I_NETWR) TYPE  NETWR
*"  EXPORTING
*"     VALUE(E_SAYWORDS) TYPE  CHAR200
*"----------------------------------------------------------------------
  DATA:  ls_spell TYPE spell,
         p_char   TYPE char200,
         p_word1  TYPE char200, "整数位位置大写结果
         p_word2  TYPE char200. "小数位位置大写结果

  CLEAR:ls_spell,p_char,p_word1,p_word2.

*(1)初始化大写结果
  CALL FUNCTION 'SPELL_AMOUNT'
    EXPORTING
      amount   = i_netwr
      currency = 'USD'
      filler   = ''
      language = 'E'
    IMPORTING
      in_words = ls_spell.
*(2)对大写结果进行处理
*(2.1)首字母大写
  TRANSLATE ls_spell-word TO LOWER CASE.
  DO.
    IF ls_spell-word IS INITIAL.
      EXIT.
    ENDIF.
    SPLIT ls_spell-word AT space INTO p_char ls_spell-word.
    TRANSLATE p_char(1) TO UPPER CASE.
    SEARCH p_char FOR '-' .
    IF sy-subrc = 0.
      sy-fdpos = sy-fdpos + 1.
      TRANSLATE p_char+sy-fdpos(1) TO UPPER CASE.
    ENDIF.
    IF p_word1 IS INITIAL.
      p_word1 = p_char.
    ELSE.
      CONCATENATE p_word1  p_char INTO p_word1 SEPARATED BY space.
    ENDIF.
    CLEAR: p_char.
  ENDDO.
  ls_spell-word = p_word1.
*(2.2)附加小数位大写结果
  IF NOT ls_spell-decimal IS INITIAL.
    TRANSLATE ls_spell-decword TO LOWER CASE.
    DO.
      IF ls_spell-decword IS INITIAL.
        EXIT.
      ENDIF.
      SPLIT ls_spell-decword AT space INTO p_char ls_spell-decword.
      TRANSLATE p_char(1) TO UPPER CASE.
      SEARCH p_char FOR '-' .
      IF sy-subrc = 0.
        sy-fdpos = sy-fdpos + 1.
        TRANSLATE p_char+sy-fdpos(1) TO UPPER CASE.
      ENDIF.
      IF p_word2 IS INITIAL.
        p_word2 = p_char.
      ELSE.
        CONCATENATE p_word2  p_char INTO p_word2 SEPARATED BY space.
      ENDIF.
      CLEAR: p_char.
    ENDDO.
    IF ls_spell-number = 1.
      CONCATENATE ls_spell-word 'Dollar' 'and' p_word2
       INTO ls_spell-word  SEPARATED BY space.
    ELSE.
      CONCATENATE ls_spell-word 'Dollars' 'and' p_word2
       INTO ls_spell-word  SEPARATED BY space.
    ENDIF.
    IF ls_spell-decimal = 10.
      CONCATENATE ls_spell-word 'Cent'
       INTO e_saywords  SEPARATED BY space.
    ELSE.
      CONCATENATE ls_spell-word 'Cents'
       INTO e_saywords  SEPARATED BY space.
    ENDIF.
  ELSE.
    IF ls_spell-number = 1.
      CONCATENATE ls_spell-word 'Dollar  ONLY' INTO e_saywords  SEPARATED BY space.
    ELSE.
      CONCATENATE ls_spell-word 'Dollars ONLY' INTO e_saywords  SEPARATED BY space.
    ENDIF.
  ENDIF.

ENDFUNCTION.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值