ABAP 金额大写使用SPELL_AMOUNT 无法转换小数位的解决方法
当使用SPELL_AMOUNT函数转换金额大写时会发现小数位会被忽略
这里我们需要参考SPELL_AMOUNT自行创建一个转换函数,其代码如下
FUNCTION YNF_SPELL_AMOUNT.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(I_AMOUNT) TYPE NETWR
*" EXPORTING
*" VALUE(E_AMOUNT) TYPE CHAR70
*"----------------------------------------------------------------------
DATA:SPELL_01 TYPE SPELL,
SPELL_02 TYPE SPELL,
SPELL_03 TYPE SPELL,
LV_ZH_01 TYPE CHAR30,
LV_ZH_02 TYPE CHAR30,
LV_ZH_03 TYPE CHAR30,
FLTP01 TYPE CHAR30,
FLTP02 TYPE CHAR30.
LV_ZH_01 = I_AMOUNT.
SPLIT LV_ZH_01 AT '.' INTO LV_ZH_02 LV_ZH_03.
FLTP01 = LV_ZH_03(1).
FLTP02 = LV_ZH_03+1(1).
IF LV_ZH_02 <> '0' .
CALL FUNCTION 'SPELL_AMOUNT'
EXPORTING
LANGUAGE = 'E' "sy-langu
CURRENCY = SY-WAERS
AMOUNT = LV_ZH_02
FILLER = ' '
IMPORTING
IN_WORDS = SPELL_01.
ENDIF.
CALL FUNCTION 'SPELL_AMOUNT'
EXPORTING
LANGUAGE = 'E' "sy-langu
CURRENCY = SY-WAERS
AMOUNT = FLTP01
FILLER = ' '
IMPORTING
IN_WORDS = SPELL_02.
IF FLTP02 <> '0' .
CALL FUNCTION 'SPELL_AMOUNT'
EXPORTING
LANGUAGE = 'E' "sy-langu
CURRENCY = SY-WAERS
AMOUNT = FLTP02
FILLER = ' '
IMPORTING
IN_WORDS = SPELL_03.
ENDIF.
IF SPELL_02-WORD = 'ZERO' AND SPELL_03 IS INITIAL .
E_AMOUNT = |{ SPELL_01-WORD } ONLY|.
ELSE.
E_AMOUNT = |{ SPELL_01-WORD } AND|.
IF SPELL_02-WORD <> 'ZERO' .
E_AMOUNT = |{ E_AMOUNT } POINT { SPELL_02-WORD }|.
ENDIF.
IF SPELL_03 IS NOT INITIAL AND SPELL_02-WORD <> 'ZERO' ..
E_AMOUNT = |{ E_AMOUNT }-{ SPELL_03-WORD }|.
ELSEIF SPELL_03 IS NOT INITIAL AND SPELL_02-WORD = 'ZERO' .
E_AMOUNT = |{ E_AMOUNT } { SPELL_03-WORD }|.
ENDIF.
E_AMOUNT = |{ E_AMOUNT } ONLY|.
ENDIF.
ENDFUNCTION.
其效果如下: