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'.