ALV EDIT_MASK应用-负号前置/小数位处理

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表示贷,我们在显示的时候要显示“借”或“贷”,也可以写一个类似的函数来实现。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值