Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >ABAP 之将金额数据输出为中文\u002F英文

ABAP 之将金额数据输出为中文\u002F英文

作者头像
百里丶落云
发布于 2022-12-13 09:37:41
发布于 2022-12-13 09:37:41
45900
代码可运行
举报
文章被收录于专栏:享~方法享~方法
运行总次数:0
代码可运行

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第20天,点击查看活动详情

HELLO,这里是百里,一个学习中的ABAPER, 最近接收了这么一个奇怪的需求,没错,就是讲金额输出为因为并且打印出来.当我听到这个时候蒙圈,ABAP又不是NLP,那种人工智能,你还想给你翻译成英文.开发笑呢?经过后来多方面的查询, 唉还, 没想到还真有.

为什么会用到输出中文/英文

后来了解到,在财务这块,开票及对外贸易都得需要显示对应的数字才可以,就像中文的大写的壹弍叁肆这种,需要写在发票中,才算开发票,但是我们系统中大部分数据都是以阿拉伯数字,即1,2,3,4这种显示的.想起了武林外传的更,这个玉宝石1个哦,就因为在阿拉伯数字上加了点.所以说这是个必要且实用的工能.

语法解析

通过调用函数 SPELL_AMOUNT 我们就可以进行数字转换,将我们对应的数字类型输出为中文或者英文内容.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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.

实例解析

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
我们通过前台输入一串数字后,通过调用子例程,设定输出为中文/英文.

数据准备

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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.

选择屏幕设定

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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.

中文子例程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

英文子例程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 .

这里是百里,一个努力的学习者. 努力学习好好记录,点滴进步,就是成功.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ABAP ALV之自建表可编辑内表的增删改查
开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第29天,点击查看活动详情
百里丶落云
2022/12/20
2.1K0
ABAP ALV之自建表可编辑内表的增删改查
ABAP 之如何传输数据时分批传输
开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第28天,点击查看活动详情
百里丶落云
2022/12/19
9780
ABAP 之如何传输数据时分批传输
ABAP 之ALV展示及下钻弹窗数据页面
开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情
百里丶落云
2022/12/01
9480
ABAP 之ALV展示及下钻弹窗数据页面
ABAP ALV之同一屏幕显示两个关联性表单
开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情
百里丶落云
2022/12/02
8550
ABAP ALV之同一屏幕显示两个关联性表单
ABAP 模块化编程概念详解
模块化编程概念 模块化编程 基础概念 把程序中部分源代码储存到一个模块里 封装成一个特定的功能,可以认为是程序的一部分 公用的,多个程序都可以调用 (类似py中的函数) 优点 提高程序透明度 提高代码重用 简化程序维护 方便程序调试 样例 获取每月最后一天(函数) 获取当前时间(函数) 模块化编程内容 函数 子例程 宏 类 参数 用于在程序和模块之间交换数据 定义模块化单元的时候就确定了可以使用哪些参数 参数分类 输入参数——是用来传递数据给模块化单元 导出参数——把模块化单元中的数据返回给调用程
百里丶落云
2022/11/03
1.6K0
ABAP 模块化编程概念详解
ABAP 之DATA_CHANGED和DATA_CHANGE_FINISHED的应用场景
开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看
百里丶落云
2022/11/28
2.5K0
ABAP 之DATA_CHANGED和DATA_CHANGE_FINISHED的应用场景
ABAP ALV的最常规写法及常用功能 (一)
“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第3篇文章,点击查看活动详情”
百里丶落云
2022/11/03
1.6K0
ABAP  ALV的最常规写法及常用功能 (一)
solr
Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。Solr 提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式)。它易于安装和配置,而且附带了一个基于HTTP 的管理界面。可以使用 Solr 的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要。Solr的特性包括:
Java架构师历程
2018/09/26
11.2K0
solr
一种绝对提高开发水平的方法
如果做了多年开发的你发现自己的水平一直上不去,你可能要提高自己的英文水平了,英语就是你技术的瓶颈,对有些人可能是硬伤。
张果
2018/07/31
9.1K2
一种绝对提高开发水平的方法
机器学习之朴素贝叶斯分类算法
朴素贝叶斯分类算法:朴素贝叶斯(Naive Bayes ,NB)算法是基于贝叶斯定理与特征条件独立假设的分类方法,该算法是有监督的学习算法,解决的是分类问题,是将一个未知样本分到几个预先已知类别的过程。朴素贝叶斯的思想就是根据某些个先验概率计算Y变量属于某个类别的后验概率,也就是根据先前事件的有关数据估计未来某个事件发生的概率。
全栈程序员站长
2022/11/04
2.8K0
机器学习之朴素贝叶斯分类算法
经典 40 篇完整版
Hiding behind the loose dusty curtain, a teenager packed up his overcoat into the suitcase. He planned to leave home at dusk though there was thunder and lightning outdoors. He had got to do this because he was tired of his parents’ nagging (唠叨的) about his English study and did not want to go through it any longer. He couldn’t get along well with English and disliked joining in English classes because he thought his teacher ignored him on purpose. As a result, his score in each exam never added up to over 60.
独元殇
2023/03/14
1.6K0
相关推荐
ABAP ALV之自建表可编辑内表的增删改查
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验