SAP 字符串金额带千分号,负号提前处理

简介: 关于SAP财务凭证打印,存在一些金额文本需要对于负号显示在金额前面与SAP底层存储逻辑冲突,以下是自开发函数处理

FUNCTION zfc048_010.

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

*"*"本地接口:

*"  IMPORTING

*"     REFERENCE(I_DATA) TYPE  CHAR20

*"  EXPORTING

*"     REFERENCE(O_DATA) TYPE  CHAR20

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

 DATA : zclen TYPE i,

 n TYPE i,

 zcstr(30) TYPE c,

 zcstr2(30) TYPE c,

 zctemp(3) TYPE c,

 zflag(1) TYPE c VALUE '.',

 zflag2 TYPE i VALUE 0,

 zcdec(30) TYPE c, "记录小数部分.

 znum(30),

 znum_h(30),

 ztotal(30),

 ztotal_h(30),

 l_tmp(1).

 "zstr = ''.

 znum = i_data.

 CONDENSE znum NO-GAPS.

*  znum_h = is_result-amount_h.

*  ztotal = is_result-total.

*  ztotal_h = is_result-total_h.

*  CLEAR: is_result-amount,is_result-amount_h,is_result-total,is_result-total_h.

*---------------------------------------------------------------------------------------------*1

 IF znum <> 0.

   IF znum <= -1000.

     zflag2 = 1.

     znum = znum * ( -1 ).

   ENDIF.

   IF znum >= 1000.

     zcstr = znum.

* 压缩字符串,去除前面的空格。

     CONDENSE zcstr NO-GAPS.

* 分离整数与小数,好单独处理整数。

     SPLIT zcstr AT zflag INTO zcstr zcdec.

     zclen = strlen( zcstr ).

* 在循环中从右面在每三位的前面加上一个逗号。

     WHILE zclen > 3.

       n = zclen - 3.

       zctemp = zcstr+n(3).

       IF NOT zcstr2 IS INITIAL.

         CONCATENATE zctemp zcstr2 INTO zcstr2 SEPARATED BY ','.

       ELSE.

         zcstr2 = zctemp.

       ENDIF.

       zclen = zclen - 3.

     ENDWHILE.

* 将不剩下的不足三位数加到前面

     CONCATENATE zcstr+0(zclen) zcstr2 INTO zcstr2 SEPARATED BY ','.

     IF zflag2 = 1.

       CONCATENATE '-' zcstr2   INTO zcstr2.

     ENDIF.

     CLEAR zcstr.

* 将处理过的整数与小数连接起来。

     IF strlen( zcdec ) > 1.

       CONCATENATE zcstr2 zcdec INTO zcstr SEPARATED BY zflag.

     ELSE.

       CONCATENATE zcdec '0' INTO zcdec.

       CONCATENATE zcstr2 zcdec  INTO zcstr SEPARATED BY zflag.

     ENDIF.

* 将值返回

     o_data = zcstr.

   ELSE.

     zclen = strlen( znum ).

     SEARCH znum FOR '-' STARTING AT zclen.

     IF sy-subrc = 0.

       SPLIT znum AT '-' INTO znum l_tmp.

       SHIFT znum LEFT DELETING LEADING space.

       CONCATENATE '-' znum INTO znum.

       SHIFT znum RIGHT DELETING TRAILING space.

       CONDENSE znum NO-GAPS.

     ENDIF.

     o_data = znum.

   ENDIF.

 ENDIF.

 CLEAR: zflag2,zcstr,zcdec,zclen,zctemp,zcstr2,n.

ENDFUNCTION.

目录
相关文章
SAP 金额转中文大写自开发函数
关于凭证打印时需将金额转换成中文大写
116 0
|
测试技术
SAP MM MIRO的时候,可以调整帐户分配类别里的金额或者数量,而系统会自动做联动!
SAP MM MIRO的时候,可以调整帐户分配类别里的金额或者数量,而系统会自动根据修改后的数据做联动!   测试效果如下: A如下PO,帐户分配对象为K,有三个成本中心。
1380 0
|
测试技术
SAP MM 107收货之后去做MIRO,不能带出收货数量和金额等信息之对策
SAP MM 107收货之后去做MIRO,不能带出收货数量和金额等信息之对策   Inbound delivery 180003220   MIGO+107 移动...
2501 0
|
测试技术
SAP MM MIRO的时候,可以调整帐户分配类别金额或数量,系统会自动做联动!
SAP MM MIRO的时候,可以调整帐户分配类别金额或数量,系统会根据用户修改而做联动! 测试效果如下: A如下PO,帐户分配对象为K,有三个成本中心。
2352 0
SAP MM 包含多个Account Assignment Object的PO收货金额自动为0
SAP MM 包含多个Account Assignment Object的PO收货金额自动为0 1>PO# 8500010329, see the  PO history, the 101 GR history, the amount is 0.
1502 0
SAP MM/FI_运费处理方式
常见的采购运费处理方式
SAP MM 途损处理方式
通常客户采购业务需求提到货物运输有损耗,需要针对此业务给出合理方案输出,下面笔者针对此类业务分析下各种实现方案的可行性!
SAP MM初阶之事务代码MIGO界面批次拆分最多输入15行?
SAP MM初阶之事务代码MIGO界面批次拆分最多输入15行?
SAP MM初阶之事务代码MIGO界面批次拆分最多输入15行?