之前写的一个金额小写转大写(英文)的函数,用户美国的票据打印显示。
因为美国票据有特定的打印格式,所以自己在标准函数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.