alv实现类似excel单元格设置小数位数和倍数显示

报表开发中,经常会遇到用户提出将金额以万元或者百万元等显示,或者为了计算精确度保留了多位小数,用户却要求仅显示2位或不显示.

多数情况为了满足用户的这个需求,我们会通过定义不同格式的字段来处理.但是这样会发生数据核对时不方便或者为了计算精确度需要定义多个字段作为临时记录.

其实在alv中通过设置字段目录可以达到这个要求,并不需要我们去调整数据(比如将金额除以万等).见下表

我们可以看到,通过设置"DECIMALS_O"字段可以调整输出的小数位数,并且会自动四舍五入,比如设置为2可以保留2位小数。要注意的是如果设置的位数超出字段原本的定义,那么显示虽然是按设置显示,但是超出部分的值只会是0.
而"ROUND"字段则用于设置倍数显示,比如要将元转为万元,则将值设置为4即可。

如果想对每条记录单独设置或者让用户在前台自自己设置,就需要增加对应的列,然后设置DECMFIELD 和ROUNDFIELD字段为对应的列名,具体见示例源程序和效果图
另外需要注意的是,如果设置了ref_table 和ref_field,这几个字段可能就会失效,
在这里插入图片描述

下面是效果图

在这里插入图片描述
附上源代码

REPORT ZSL_ALV_01.


types:begin of ty_t1,
        matnr type matnr_d,
        menge type menge_d,
        dmbtr type dmbtr,
        MENGE_ROUND TYPE LVC_RNDFN,
        dmbtr_DECIMAL TYPE LVC_DFNAME,
      end of ty_t1.
data: t_t1 type table of ty_t1.
data:o_con type ref to cl_gui_docking_container,
      o_alv type ref to cl_gui_alv_grid.

parameters p_test type c.


at selection-screen output.
  select * from mseg INTO corresponding fields of table @t_t1.

loop at t_t1 assigning field-symbol(<f1>).
  <f1>-menge_round = 2.
  <f1>-dmbtr_DECIMAL = 4.
endloop.

  if o_con is initial.
    o_con = new cl_gui_docking_container( side = 4 extension = 160 ratio = 90 ).
    o_alv = new cl_gui_alv_grid( i_parent = o_con ).
  o_alv->set_frontend_fieldcatalog( it_fieldcatalog = value #( ( FIELDNAME = 'MATNR' )
                                                               ( FIELDNAME = 'MENGE'  ROUND = 4 DECIMALS_O = '2' )
                                                               ( FIELDNAME = 'DMBTR' ROUND = 1 DECIMALS_O = '-3' ) ) ).

  data(LT_FCAT) = value LVC_T_FCAT(
        ( FIELDNAME = 'MATNR' )
        ( FIELDNAME = 'MENGE'  ROUNDFIELD = 'MENGE_ROUND'  )
        ( FIELDNAME = 'DMBTR'  DECMLFIELD = 'DMBTR_DECIMAL' )
        ( FIELDNAME = 'MENGE_ROUND' EDIT = ABAP_TRUE )
        ( FIELDNAME = 'DMBTR_DECIMAL' EDIT = ABAP_TRUE )
        ).
  O_ALV->set_table_for_first_display( changing IT_OUTTAB = T_T1 it_fieldcatalog = LT_FCAT ).

  endif.
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sap虫子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值