1、建立自定义函数
1.1 整数显示
FUNCTION CONVERSION_EXIT_Z0002_OUTPUT.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(INPUT)
*" EXPORTING
*" REFERENCE(OUTPUT)
*"----------------------------------------------------------------------
DATA: OUTPUT1(12) TYPE C,
OUTDATUM TYPE INT4.
IF INPUT <> SPACE.
OUTDATUM = INPUT.
if input > 0.
move OUTDATUM TO OUTPUT .
else.
OUTDATUM = OUTDATUM * ( -1 ).
move OUTDATUM TO OUTPUT1 .
CONCATENATE '-' output1 into output.
CONDENSE output NO-GAPS .
endif.
ELSE.
OUTPUT = SPACE.
ENDIF.
ENDFUNCTION.
1.2 浮点数显示
FUNCTION conversion_exit_zsign_output.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(INPUT)
*" EXPORTING
*" REFERENCE(OUTPUT)
*"----------------------------------------------------------------------
DATA: output1(19) TYPE c,
output2(19),
outdatum TYPE p DECIMALS 2.
IF not input is initial.
outdatum = input.
IF input > 0.
WRITE outdatum TO output1 ."RIGHT-JUSTIFIED .
CONCATENATE ' ' output1 INTO output1.
ELSE.
outdatum = outdatum * ( -1 ).
WRITE outdatum TO output1 ."RIGHT-JUSTIFIED.
CONCATENATE '-' output1 INTO output1.
ENDIF.
ELSE.
* output = '0.00'.
CLEAR output1.
ENDIF.
CONDENSE output1 NO-GAPS .
WRITE output1 TO output2 RIGHT-JUSTIFIED .
output = output2.
ENDFUNCTION.
2、设置ALV输出格式字段格式
clear ls_fcat.
ls_fcat-fieldname = 'INT4'.
ls_fcat-inttype = 'I'.
ls_fcat-intlen = 10.
ls_fcat-col_pos = l_lin.
ls_fcat-seltext_s = ls_fcat-fieldname.
ls_fcat-seltext_m = ls_fcat-fieldname.
ls_fcat-seltext_l = ls_fcat-fieldname.
ls_fcat-edit_mask = '==Z0002'.
append ls_fcat to ct_fcat.
3、调用函数就可达到负数符号前显的效果。
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
it_fieldcat = lt_fcat
tables
t_outtab = gt_outtab
exceptions
program_error = 1
others = 2.
==========================================
EDIT_MASK
LVC_EDTMSK
Char(60)
SPACE, conv (conversion exit)
If you set a conversion exit (for example, conv = ' ==ALPHA ' for function module CONVERSION_EXIT_ALPHA_OUTPUT ), you enforce output conversion for the associated output field. (See also F1 help for WRITE edit option USING EDIT MASK) .
See also: Using the Conversion Exit
老白,我知道ALV输出时可以控制小数数位。可是现在业务部门有这样一个需求,比如说,如果系统数量是7.000的时候输出为整数7,如果系统数量是7.050的时候输出为7.05,如果系统数量是7.056的时候输出为7.056。有什么好办法处理么?谢谢。
Blog作者的回复:
LIKE THIS:
.....
ls_fieldcat-edit_mask = '==ZZERO' .
.....
FUNCTION conversion_exit_zzero_output.
*"----------------------------------------------------------
*"Local interface:
*" IMPORTING
*" VALUE(INPUT) OPTIONAL
*" EXPORTING
*" REFERENCE(OUTPUT)
*"-----------------------------------------------------------
DATA: str TYPE string ,
str2 TYPE string .
str = input.
CONDENSE str NO-GAPS.
SPLIT str AT '.' INTO str str2.
SHIFT str2 RIGHT DELETING TRAILING '0' .
CONDENSE str2.
CONCATENATE str '.' str2 INTO str.
SHIFT str RIGHT DELETING TRAILING '.' .
output = str.
ENDFUNCTION.
只是针对正数的情况,如果是负数请自行调整程序