1、建立自定义函数
1.1 整数显示
FUNCTION CONVERSION_EXIT_Z001_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_Z001_OUTPUT.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(INPUT)
*" EXPORTING
*" REFERENCE(OUTPUT)
*"----------------------------------------------------------------------
DATA: output1(20) TYPE C,
output2(20),
outdatum(16) TYPE p DECIMALS 2.
IF NOT INPUT IS INITIAL.
outdatum = INPUT.
IF INPUT > 0.
WRITE outdatum TO output1 ."RIGHT-JUSTIFIED .
ELSE.
outdatum = outdatum * ( -1 ).
WRITE outdatum TO output1 ."RIGHT-JUSTIFIED.
CONCATENATE '-' output1 INTO output1.
ENDIF.
ELSE.
CLEAR output1.
ENDIF.
CONDENSE output1 NO-GAPS .
WRITE output1 TO output2 RIGHT-JUSTIFIED .
OUTPUT = output2.
clear: 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 = '==Z001'.
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.
只是针对正数的情况,如果是负数请自行调整程序
PS:为了让ALV输出特殊格式,edit_mask提供了这个方便的接口,下面是从网上找到的一些资料,供参考
1、建立自定义函数
浮点数显示
FUNCTION conversion_exit_zsign_output. ”固定的函数命名规范 conversion_exit_xxxxx_output
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(INPUT)
*" EXPORTING
*" REFERENCE(OUTPUT)
*"----------------------------------------------------------------------
DATA: output1(20) TYPE c,
output2(20),
outdatum TYPE p DECIMALS 6.
IF not input is initial.
outdatum = input.
IF input > 0.
WRITE outdatum TO output1 ."RIGHT-JUSTIFIED .
ELSE.
outdatum = outdatum * ( -1 ).
WRITE outdatum TO output1 ."RIGHT-JUSTIFIED.
CONCATENATE '-' output1 INTO output1.
ENDIF.
ELSE.
CLEAR output1.
ENDIF.
CONDENSE output1 NO-GAPS .
WRITE output1 TO output2 RIGHT-JUSTIFIED .
output = output2.
ENDFUNCTION.
2、设置ALV输出格式字段格式
clear ls_fcat.
ls_fcat-fieldname = 'DEC'.
ls_fcat-inttype = 'P'.
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 = '==ZSIGN'. “函数名的部分字符,固定格式‘==xxxxx’
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.
这种方式同样可以实现相对复杂的显示效果,如财务凭证中S表示借,H表示贷,我们在显示的时候要显示“借”或“贷”,也可以写一个类似的函数来实现。