开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第20天,点击查看活动详情
HELLO,这里是百里,一个学习中的ABAPER, 最近接收了这么一个奇怪的需求,没错,就是讲金额输出为因为并且打印出来.当我听到这个时候蒙圈,ABAP又不是NLP,那种人工智能,你还想给你翻译成英文.开发笑呢?经过后来多方面的查询, 唉还, 没想到还真有.
后来了解到,在财务这块,开票及对外贸易都得需要显示对应的数字才可以,就像中文的大写的壹弍叁肆这种,需要写在发票中,才算开发票,但是我们系统中大部分数据都是以阿拉伯数字,即1,2,3,4这种显示的.想起了武林外传的更,这个玉宝石1个哦,就因为在阿拉伯数字上加了点.所以说这是个必要且实用的工能.
通过调用函数 SPELL_AMOUNT
我们就可以进行数字转换,将我们对应的数字类型输出为中文或者英文内容.
CALL FUNCTION 'SPELL_AMOUNT'
EXPORTING
amount = l_amt
currency = l_waers
filler = ''
language = 'E'
IMPORTING
in_words = lw_spell.
lw_spell-decimal = lw_spell-decimal / 10.
IF NOT lw_spell-decimal IS INITIAL.
我们通过前台输入一串数字后,通过调用子例程,设定输出为中文/英文.
DATA:g_money(100) TYPE c.
DATA:money_str(33).
DATA:i TYPE i.
DATA:units_off TYPE i,
curnt_off TYPE i.
DATA:lastd TYPE n,curntd TYPE n.
DATA:cword(2),weight(2).
DATA:units(30) VALUE '分角元拾佰仟万拾佰仟亿拾佰仟万',
digts(20) VALUE '零壹贰叁肆伍陆柒捌玖'.
DATA:g_total_value
TYPE string.
SELECTION-SCREEN BEGIN OF BLOCK xavery WITH FRAME TITLE TEXT-001.
PARAMETERS: p_dmbtr TYPE bf_dmbtr OBLIGATORY DEFAULT '1'.
SELECTION-SCREEN END OF BLOCK xavery.
*单选按钮
SELECTION-SCREEN BEGIN OF BLOCK xue WITH FRAME TITLE TEXT-002.
PARAMETERS:p_rd1 RADIOBUTTON GROUP asia USER-COMMAND dis DEFAULT 'X', "功能 "中文
p_rd2 RADIOBUTTON GROUP asia. "配置 "英文
SELECTION-SCREEN END OF BLOCK xue.
FORM sub_unicode_version .
IF p_dmbtr = 0.
g_money = '零'.
EXIT.
ENDIF.
money_str = p_dmbtr.
CONDENSE money_str NO-GAPS.
IF money_str CN '0123456789. '.
RAISE wrong_money.
ENDIF.
IF money_str CS '.'.
i = sy-fdpos + 1.
money_str+sy-fdpos = money_str+i.
ENDIF.
CONDENSE money_str NO-GAPS.
lastd = 0.
curnt_off = strlen( money_str ) - 1.
WHILE curnt_off >= 0.
curntd = money_str+curnt_off(1).
i = curntd.
cword = digts+i(1).
weight = units+units_off(1).
i = units_off / 1.
IF curntd = 0.
IF i = 2 OR i = 6 OR i = 10.
CLEAR:cword.
IF curnt_off = 0.
CLEAR:weight.
ENDIF.
ELSEIF lastd = 0.
CLEAR:cword,weight.
ELSE.
CLEAR:weight.
ENDIF.
ENDIF.
CONCATENATE cword weight g_money INTO g_money.
lastd = curntd.
SUBTRACT 1 FROM curnt_off.
ADD 1 TO units_off.
ENDWHILE.
IF g_money NS '分'.
CONCATENATE g_money '整' INTO g_money.
ELSE.
cword = g_money.
IF cword = '零'.
SHIFT g_money BY 1 PLACES.
ENDIF.
ENDIF.
g_money = '中文' && ':' && g_money.
ENDFORM. " SUB_UNICODE_VERSION
*&---------------------------------------------------------------------
**& Form SUB_WRITE_TO_SCREEN
*&---------------------------------------------------------------------
FORM sub_write_to_screen .
IF p_rd1 = 'X'.
WRITE g_money.
ELSEIF p_rd2 = 'X'.
WRITE g_total_value.
ENDIF.
ENDFORM. " SUB_WRITE_TO_SCREEN
FORM amount_to_word USING l_amt TYPE bf_dmbtr
l_waers TYPE eban-waers
CHANGING saywords TYPE string.
DATA: lw_spell LIKE spell,
lv_text TYPE ltext,
lv_cent TYPE spell.
SELECT SINGLE ktext INTO lv_text
FROM tcurt
WHERE spras = 'E' AND
waers = l_waers.
TRANSLATE lv_text TO UPPER CASE.
CALL FUNCTION 'SPELL_AMOUNT'
EXPORTING
amount = l_amt
currency = l_waers
filler = ''
language = 'E'
IMPORTING
in_words = lw_spell.
lw_spell-decimal = lw_spell-decimal / 10.
IF NOT lw_spell-decimal IS INITIAL.
CALL FUNCTION 'SPELL_AMOUNT'
EXPORTING
amount = lw_spell-decimal
filler = ''
language = 'E'
IMPORTING
in_words = lv_cent.
ENDIF.
CLEAR saywords.
IF NOT lv_cent-word IS INITIAL.
CONCATENATE lw_spell-word lv_cent-word
INTO saywords SEPARATED BY ','.
ELSE.
saywords = '英文' && ':' && lw_spell-word .
ENDIF.
ENDFORM. "amount_to_word
选择屏幕输入内容
输出中文
输出英文
今天讲述的内容是,如将金额数据输出为大写的中文及对应的英文doller ,是一个不错的工能,在财务中开票中肯定会用的到,拿来实际案例即可直接使用就好.
I am a slow walker, but I never walk backwards .
这里是百里,一个努力的学习者. 努力学习好好记录,点滴进步,就是成功.
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有