SAP中的负号是放后面的,其实也无所谓,谁看不出来啊,关键人家要你改也没有办法。有个函数CLOI_PUT_SIGN_IN_FRONT是把负号提前的,但是它是把字符转化为字符型输出的。就是把负号split下然后放前面,这样的问题就是在显示的时候字符型数字没有3位一分的千位分隔符。再把字符型赋予数字型输出,但是输出的时候负号还是会自动加后面滴~

CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
        CHANGING
          VALUE = gt_table-column5.

问MK了下,告诉我用write to语句把负数取绝对值,然后把数字型写入字符型可以保留千位符,再判断正负数,在输出的时候添上负号。在FORM里我就是这样改的了,很方便。

Form asset_front_minus changing value1.
   value2 = abs( value1 ).
write value2 to string1.
   condense string1.
   if value1 < 0.
   write: '-', string1 LEFT-JUSTIFIED NO-GAP NO-ZERO.
   else.
   write: string1 LEFT-JUSTIFIED NO-GAP NO-ZERO.
   endif.
endform.

FR告诉我手动把字符型加千位符的,取整,判断长度,除3以后循环mask"___,"格式,分割,再处理头3位,觉得有点头晕,麻烦啊。不过真有强人这么做,下面就是了,手动把字符型加千位符号。

FORM NUMTOSTR USING VALUE(ZNUM) CHANGING VALUE(ZSTR).
DATA : ZCLEN TYPE I,
N TYPE I,
ZCSTR(20) TYPE C,
ZCSTR2(20) TYPE C,
ZCTEMP(3) TYPE C,
ZFLAG(1) TYPE C VALUE '.',
ZFLAG2 TYPE I VALUE 0,
ZCDEC(20) TYPE C. "记录小数部分.
ZSTR = ''.
CHECK ZNUM <> 0.
IF ZNUM <= -1000.
ZFLAG2 = 1.
ZNUM = ABS( ZNUM ).
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.
* 将处理过的整数与小数连接起来。
CONCATENATE ZCSTR2 ZCDEC INTO ZCSTR SEPARATED BY ZFLAG.
* 将值返回
ZSTR = ZCSTR.
ELSE.
ZSTR = ZNUM.
ENDIF.
ENDFORM.

************************************************************************

我根据上面提供的函数进行了测试,出现了一些BUG,我对他进行了完善和修改。

修改如下:

FORM NUMTOSTR USING VALUE(ZNUM) CHANGING VALUE(ZSTR).
DATA : ZCLEN TYPE I,
         ZCLEN2 TYPE I, " 记录数据长度.
         N TYPE I,
         ZCSTR(20) TYPE C,
         ZCSTR2(20) TYPE C,
         ZCTEMP(3) TYPE C,
         ZFLAG(1) TYPE C VALUE '.',
         ZFLAG2 TYPE I VALUE 0,
         ZCDEC(20) TYPE C.   "记录小数部分.
ZSTR = ''.
CHECK ZNUM <> 0.
IF ZNUM < 0.
   ZFLAG2 = 1.
   ZNUM = ABS( ZNUM ).
ENDIF.

IF ZNUM >= 0.
   ZCSTR = ZNUM.
* 压缩字符串,去除前面的空格。
   CONDENSE ZCSTR NO-GAPS.
* 分离整数与小数,好单独处理整数。
   SPLIT ZCSTR AT ZFLAG INTO ZCSTR ZCDEC.
   ZCLEN = STRLEN( ZCSTR ).
   ZCLEN2 = ZCLEN.
* 在循环中从右面在每三位的前面加上一个逗号。
   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.
* 将不剩下的不足三位数加到前面
   IF ZCLEN2 > 3 .
     CONCATENATE ZCSTR+0(ZCLEN) ZCSTR2 INTO ZCSTR2 SEPARATED BY ','.
   ELSE.
     ZCSTR2 = ZCSTR+0(ZCLEN).
   ENDIF.
   IF ZFLAG2 = 1.
     CONCATENATE '-' ZCSTR2 INTO ZCSTR2.
   ENDIF.
   CLEAR ZCSTR.
* 将处理过的整数与小数连接起来。
   IF ZCDEC <> ''.
     CONCATENATE ZCSTR2 ZCDEC INTO ZCSTR SEPARATED BY ZFLAG.
   ELSE.
     ZCSTR = ZCSTR2.
   ENDIF.
* 将值返回
   ZSTR = ZCSTR.
ELSE.
   ZSTR = ZNUM.
ENDIF.
ENDFORM.

*************************************************************************
write时将'-'号提前
PERFORM change_qty USING l_srqty
CHANGING it_inv-srqty.

FORM change_qty USING p_qty
CHANGING p_qty1.
p_qty1 = p_qty.
SHIFT p_qty1 LEFT DELETING LEADING ' '.
SHIFT p_qty1 UP TO '-' LEFT CIRCULAR.
CONDENSE p_qty1 NO-GAPS.
ENDFORM. " change_qty
********************************************************************************************
目的:将字符串尾的负号放在字符串首
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
CHANGING
value = itab-amunt.

ABAP 负号 提前相关推荐

  1. 在ABAP中将负号提前的方法

    在ABAP中将负号提前的方法 第一种: PERFORM. change_qty USING l_srqty CHANGING it_inv-srqty. FORM. change_qty USING ...

  2. Smartform中负号提前解决方法

    Smartform中, 打印 输出格式会经常出现问题,特别是金额.数量字段,如何解决打印时负号后置的问题呢? 其实很简单: &field(<)&             符号位显 ...

  3. abp web ui 负号提前显示

    crm web ui 负号默认显示在后面,统一把负号改为左边显示, 代码增强方法 CL_BSP_UTILITY->MAKE_STRING ENHANCEMENT 1  ZENH_CRM_CL_B ...

  4. 【ABAP妙用】复制ALV之负号提前

    场景: 用户一般Ctrl+C复制ALV数据到Excel处理,如果有负数的数值,负号在数值的后面,Excel不认识,要费劲巴拉的一个个改正,苦不堪言! 本程序功能: 在ALV复制数据后,直接更改剪贴板里 ...

  5. SAP ALV 负号提前

    需求:ALV中的数量和金额的负号默认是显示在最后面的,现在要将负号显示在前面. 效果展示: 实现: 关键代码: FUNCTION conversion_exit_zsign_output . *&qu ...

  6. SAP ABAP 中一些常用函数

    函数名描述 ABAP_DOCU_DOWNLOAD Download ABAP documentation in HTML format. ARFC_GET_TID – 以十六进制形式返回终端的IP地址 ...

  7. sap ABAP中常用函数

    函数名描述 ABAP_DOCU_DOWNLOAD Download ABAP documentation in HTML format. ARFC_GET_TID – 以十六进制形式返回终端的IP地址 ...

  8. SAP中负数的表示增强 负号从数字后更改到数字前面

    SAP中的负号是放后面的,其实也无所谓,谁看不出来啊,关键人家要你改也没有办法.有个函数CLOI_PUT_SIGN_IN_FRONT是把负号提前的,但是它是把字符转化为字符型输出的.就是把负号spli ...

  9. ABAP 金额内外部转换函数

    SAP货币存储 一般而言,币种的小数位为2,所以系统默认的位数也是2,但是有一些特殊币种如日元JPY,没有小数位.只要小数位不等于2,需要在系统中特殊处理(通过转换因子进行转换). 1.如果某货币的小 ...

最新文章

  1. JGG:口腔微生物组助力妊娠糖尿病识别
  2. 《Windows驱动开发技术详解》读书笔记(一)
  3. 分组密码的工作模式--wiki
  4. Qt学习之路(1)------Qt常用类用法说明
  5. 电脑记时----千年虫
  6. nemesis什么车_nemesis是什么意思_nemesis的翻译_音标_读音_用法_例句_爱词霸在线词典...
  7. Shuffling Machine (20)
  8. Elasticsearch 实战2:ES 项目实战(二):基本操作、批处理、高级查询
  9. 经典卷积神经网络的学习(三)—— Inception Net
  10. 毕马威_毕马威中国为清华大学经管学院学生现场授课
  11. SQL,修改表列明错误,不允许保存更改,阻止保存要求重新创建表的更改
  12. C语言自学之路六(循环语句详解)
  13. 本地项目上传至git码云步骤(超详细,附图文)
  14. iOS开发系列--NextPrevious On-Demand Resource Basics
  15. matlab在点内加入权值,matlab权值矩阵
  16. 微博创作者网址及申请条件,微博创作者收益
  17. 使用PHP做一个网站访问IP记录功能
  18. 基于FPGA的图像处理之幂律(伽马校正)变化
  19. wnmp(wordpress环境程序windows+Nginx+PHP7.2)
  20. 软件测试项目流程报告,周口软件测试报告流程,科技项目申报

热门文章

  1. 机器学习--聚类系列--层次聚类
  2. Nancy简单实战之NancyMusicStore(二):打造首页
  3. json的键为变量而不是字符串时,怎么写?
  4. 快速得到栈、队列的最大值
  5. 1-3 数组的反序输出
  6. OpenStack Liberty 连接vCenter
  7. 详解网页中的关键词分布技术
  8. Dmoz介绍及怎么提交?
  9. 使用SourceTree拉取代码出现Permission denied (publickey)
  10. MyBatis配置项--properties