SAP 金额转中文大写自开发函数

简介: 关于凭证打印时需将金额转换成中文大写

function zfm_dx_je.

*"----------------------------------------------------------------------

*"*"本地接口:

*"  IMPORTING

*"     REFERENCE(I_MONEY) TYPE  BF_DMBTR

*"  EXPORTING

*"     REFERENCE(O_MONEY)

*"----------------------------------------------------------------------

 data:

   v_s00(2)     value '零',

   v_s01(2)     value '壹',

   v_s02(2)     value '贰',

   v_s03(2)     value '叁',

   v_s04(2)     value '肆',

   v_s05(2)     value '伍',

   v_s06(2)     value '陆',

   v_s07(2)     value '柒',

   v_s08(2)     value '捌',

   v_s09(2)     value '玖',

   v_w00(2)     value '',

   v_w01(2)     value '拾',

   v_w02(2)     value '佰',

   v_w03(2)     value '仟',

   v_w04(2)     value '万',

   v_w05(4)     value '拾',

   v_w06(4)     value '佰',

   v_w07(4)     value '仟',

   v_w08(2)     value '亿',

   v_w09(4)     value '拾',

   v_w10(4)     value '佰',

   v_w11(4)     value '仟',

   v_w12(4)     value '万',

   v_sy(2)      value '元',

   v_sj(2)      value '角',

   v_sf(2)      value '分',

   gv_fs(2)     value '负',

   v_amount(16),"将金额转换成字符型

   v_len        type i, "v_amount或out的长度

   v_var(5),"v_s0,v_s1,...,v_w0,v_w1,...

   v_num(2)     type n, "每一位的数值

   v_s_num(2),"v_s0,v_s1,...中的值

   v_weight(2)  type n, "权数

   v_w_num(4),"v_w0,v_w1,...中的值

   v_flag0      type i value 0, "是否输出'零',0不输出,1输出

   v_n          type i value 0,

   v_index      type sy-index,

   gv_flag      type char1. "正负标识

 if i_money < 0.

   gv_flag = 'X'. "负数标识

 endif.

 data(gv_money) = conv zjine( abs( i_money ) ) .

 v_amount =   gv_money.

 clear o_money.

 shift v_amount left deleting leading space.

 shift v_amount left deleting leading '0'.

*-计算分-----------------------------------------

 v_len = strlen( v_amount ).

 v_len = v_len - 1.

 v_num = v_amount+v_len(1).

 if v_num <> '0'.

   concatenate 'v_s' v_num into v_var.

   write (v_var) to v_s_num.

   concatenate v_s_num v_sf o_money into o_money.

 endif.

*-计算角-----------------------------------------

 v_len = strlen( v_amount ).

 v_len = v_len - 2.

 v_num = v_amount+v_len(1).

 if v_num <> '0'.

   concatenate 'v_s' v_num into v_var.

   write (v_var) to v_s_num.

   concatenate v_s_num v_sj o_money into o_money.

 endif.

*-输出‘整’字-------------------------------------

 if o_money = ' '.

   concatenate '整' o_money into o_money.

 endif.

*-计算整数---------------------------------------

 v_len = strlen( v_amount ).

 v_len = v_len - 3.

 if v_len = 0.

   exit.

 endif.

 v_amount = v_amount(v_len)." 整数部分

*-输出‘元’字-------------------------------------

 concatenate v_sy o_money into o_money.

 v_n = v_len - 1.

 v_weight = 0.

 do v_len times.

   v_index = sy-index.

*   从个位开始

   v_num = v_amount+v_n(1).

   if v_num <> '0'.

     concatenate 'v_s' v_num into v_var.

     write (v_var) to v_s_num.

     concatenate 'v_w' v_weight into v_var.

     write (v_var) to v_w_num.

     concatenate v_s_num v_w_num o_money into o_money.

     v_flag0 = 1.

   else.

     if v_flag0 = 1.

       concatenate 'v_s' v_num into v_var.

       write (v_var) to v_s_num.

       concatenate v_s_num o_money into o_money.

       v_flag0 = 0.

     endif.

     if v_index = 5  and v_len > 5 and v_len < 9 .

       concatenate '万' o_money into o_money.

     elseif v_index = 9 and v_len > 9.

       concatenate '亿' o_money into o_money.

     endif.

*      CASE SY-INDEX.

*        WHEN 5.CONCATENATE '万' OUT INTO OUT.

*        WHEN 9.CONCATENATE '亿' OUT INTO OUT.

*      ENDCASE.

   endif.

   v_weight = v_weight + 1.

   v_n = v_n - 1.

 enddo.

*-删除个位可能出现'零'的情况-----------------

 search o_money for '圆'.

 if sy-subrc = 0.

   v_n = sy-fdpos - 2.

   if v_n >= 0.

     if o_money+v_n(2) = v_s00.

       v_len = strlen( o_money ).

       concatenate o_money(v_n) o_money+sy-fdpos into o_money.

     endif.

   endif.

 endif.

 if gv_flag = 'X'.

   o_money = gv_fs && o_money.

 endif.

endfunction.

目录
相关文章
|
6月前
|
API
在阿里云RPA中,你可以使用"SetForegroundWindow"函数来将SAP控件置顶
【2月更文挑战第28天】 在阿里云RPA中,你可以使用"SetForegroundWindow"函数来将SAP控件置顶
102 1
|
3月前
|
Linux C++ Windows
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
|
SQL 设计模式 前端开发
【置顶】SAP ABAP开发实战——从入门到精通系列目录
本文章为SAP ABAP开发实战——从入门到精通系列的目录以及关于该教程的后续写作计划表
1557 0
【置顶】SAP ABAP开发实战——从入门到精通系列目录
|
Java Serverless
在函数计算中调用 SAP 的 RFC 函数
在函数计算中调用 SAP 的 RFC 函数
95 0
|
SQL
SAP ABAP-OPENSQL-数值函数简介
S4中针对OPENSQL新提供一些函数
139 0
|
SQL
SAP ABAP-OPENSQL-日期/时间戳函数
S4提供针对OPENSQL一些新的SQL函数调用,本文展示相关函数的使用
637 0
|
存储
SAP 字符串金额带千分号,负号提前处理
关于SAP财务凭证打印,存在一些金额文本需要对于负号显示在金额前面与SAP底层存储逻辑冲突,以下是自开发函数处理
343 0
|
BI
SAP ABAP在线预览文档对象的开发实现
应用场景:有些定制化开发(报表/功能增强等)完成之后,客户需要将其操作手册或者相关文档放在某个报表的初始画面,供实际操作者在线查阅,当然这个功能也同样类似于模板的下载,这里就以在线预览(直接打开)为例进行说明。
224 0
SAP DALOG开发-代码触发回车事件
对于指定输入框:触发屏幕回车事件
232 0
SAP ABAP——简单函数编写及调用
本文是一个ABAP简单函数编写以及调用的demo,废话不多说直接看demo场景
675 2
SAP ABAP——简单函数编写及调用