ALV 负号提前 (EDIT_MASK应用)

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.

只是针对正数的情况,如果是负数请自行调整程序

你可能感兴趣的:(it)