Solution:ALV不显示前导空格怎么办

在老白的QQ群里(15881589)看到有人讨论字符串空格的问题,想起之前做过的一个需求,把WBS描述按层级显示,代码如下:

ls_prps-post1 = repeat( val = ` ` occ = ls_prps-stufe - 1 ) && ls_prps_post1.

但是当放到ALV里展示的时候,空格都被吞了。

当时没办法,只认为是SAP的ALV控件的bug,就把半角空格换成了全角空格。

今天群里知名大佬Sariel说SALV可以显示空格,然后搜到了一下DEMO程序SALV_DEMO_TABLE_REAL_SIMPLE,复制出来,更改后代码如下:

DATA: gt_outtab TYPE TABLE OF sflight.
DATA: gr_table  TYPE REF TO cl_salv_table.


SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE gt_outtab.


gt_outtab[ 1 ]-planetype = `  ` && gt_outtab[ 1 ]-planetype.


CALL METHOD cl_salv_table=>factory
  IMPORTING
    r_salv_table = gr_table
  CHANGING
    t_table      = gt_outtab.


gr_table->get_columns( )->get_column( 'PLANETYPE' )->set_leading_spaces( 'X' ).


gr_table->display( ).

WOC,确实可以显示空格。认知又被颠覆了……

不死心。跟一下程序,看它是怎么实现的。

盲猜SALV也是用的CL_GUI_ALV_GRID的OO控件,所以肯定也会依托屏幕作为容器来展示,于是按"CALL SCREEN"打断点,顺利DEBUG进到REUSE_ALV_GRID_DISPLAY函数代码中。

然后看函数中FIELDCAT的参数,对比了一下,很容易就发现有这么个不同之处。

c630e9f324e92e8084e12477c080524c.png

于是写个DEMO看一下:

DATA: lt_makt LIKE TABLE OF makt,
      lt_fcat TYPE lvc_t_fcat.


APPEND VALUE #( maktx = '1' ) TO lt_makt.
APPEND VALUE #( maktx = ' 1' ) TO lt_makt.


APPEND VALUE #( fieldname = 'MATNR' ) TO lt_fcat.
APPEND VALUE #( fieldname = 'MAKTX' parameter0 = 'X' ) TO lt_fcat.


CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  EXPORTING
    it_fieldcat_lvc = lt_fcat
  TABLES
    t_outtab        = lt_makt
  EXCEPTIONS
    OTHERS          = 1.

运行效果如下:

c26c39f08d87384733fef6c2fa1d1179.png

最后,特别感谢大S(Sariel)。

结论很简单,就是parameter0参数。至于其他参数有什么用,期待大家的探索了。

上面的问题分析过程,你学废了吗?


我的SE38插件工具箱——视频介绍:

https://www.bilibili.com/video/BV1hP4y1N7Qz/

联系286503700获取

ABAP文章汇总:

https://mp.weixin.qq.com/s/djmMeM0qfDxPPwxbjuJABA

Excel文章汇总:

https://mp.weixin.qq.com/s/NwJ0SzIrn9hVmaCMo-UYyA

网盘永久链接:

https://mp.weixin.qq.com/s/f_WwKZdwM-vPEstTjjz_eQ

关注公众号,点下方菜单打开上面的链接,更方便哦。

笔者微信:286503700(QQ同号)

如果喜欢,谢谢转发。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值