ABAP ALV报表将数值字段负号提前

SAP有一个函数"CLOI_PUT_SIGN_IN_FRONT",此函数不能将字段类型是P的负号提前,只能对字段类型是C的负号提前。

FUNCTION CLOI_PUT_SIGN_IN_FRONT.

  DATA: TEXT1(1) TYPE C.

  SEARCH VALUE FOR '-'.
  IF SY-SUBRC = 0 AND SY-FDPOS <> 0.
    SPLIT VALUE AT '-' INTO VALUE TEXT1.
    CONDENSE VALUE.
    CONCATENATE '-' VALUE INTO VALUE.
  ELSE.
    CONDENSE VALUE.
  ENDIF.

ENDFUNCTION.

索性我将我的字段类型全部设定为C型,记住一定要给C设置和P类型的长度一样。

比如: kbetr(16) type c.

这个16个长度来自KBETR的数据元素,如图:


双击 Domain 域 中的 WERTV6,如图: 可以看到 输出长度为16



再定义一个公共变量:这个变量可以公用,1用完了清空,给2用..

DATA: gkbetr TYPE  p DECIMALS 3.

LOOP AT ITAB.
READ TABLE itab1 WITH KEY knumv = itab-knumv
                            kposn = itab-ebelp.
 IF sy-subrc = 0 .
      itab-kbetr1 =  itab1-kbetr.
      gkbetr = ABS( itab-kbetr1 ).
      IF itab-kbetr1 < 0.
        itab-kbetr1 = gkbetr.
        CONCATENATE '-' itab-kbetr1 INTO itab-kbetr1.
      ELSE.
        itab-kbetr1 = gkbetr.
      ENDIF.
      CONDENSE itab-kbetr1 NO-GAPS. "sap 里面数字相关类型默认右对齐, 字符相关类型默认左对齐 ,先对齐,再统一清空空格
      CLEAR gkbetr.
    ENDIF.
ENDLOOP."如果你ALV显示多个数值,就可以将此段代码写多次。


因为都定义为C类型的,所以在ALV里显示的时候,数值是靠左排列的。。这一点看起来不给力。

这里可以用到ALV的FIELDCAT-JUST = ‘R’ .  这样所有的字段都靠右排了,包含汉字部分,也不给力。

所以应该这么做:

设置个变量:RJUST  放在 

FIELDCAT-JUST = RJUST . 

FORM INPUT_FIELDCAT USING ZID WENB KEYS GD COLOR REFTAB REFFILE RJUST.
  ADD 1 TO FIELDCAT-COL_POS.
  FIELDCAT-FIELDNAME =  ZID. " 对应的内表中的字段名称
  FIELDCAT-SELTEXT_M =  WENB. "ALV中显示的字段名称
  FIELDCAT-KEY = KEYS.
  FIELDCAT-JUST = RJUST.
  FIELDCAT-FIX_COLUMN = GD .
  FIELDCAT-EMPHASIZE = COLOR.  "列颜色
  FIELDCAT-REF_TABNAME = REFTAB.
  FIELDCAT-REF_FIELDNAME = REFFILE.
  APPEND FIELDCAT.
  CLEAR FIELDCAT.
ENDFORM.    

  PERFORM input_fieldcat  USING 'KBETR'  '标准成本'  ''  '' '' '' '' 'R'.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值