SAP ALV 输出文本开头空格

背景介绍:

这部分内容纯粹是为了凑字数,比较啰嗦,可以忽略。

一般情况下SAP这边填写内容不会以空格开头,此次需求是EDI平台将客户的叫料计划传到SAP生成销售计划协议计划行,其中有一些客户特定信息需要存下以便后面交货生成ASN信息回传给客户,因为没有SAP前台字段,所以存在自建表中。

其中有个信息“EDI客户件号”客户填写时候会以空格开头,并且中间还可能出现空格或者连续空格。

ALV如果不特别设置参数,默认中间空格会显示,而开头空格不会显示。

自建表中数据

ALV报表查询结果

解决过程:

此部分也是为了凑字数,并有自吹自擂嫌疑。

翻遍ALV常用传入参数类型LVC_S_LAYO和LVC_S_FCAT都没有发现描述与此问题相关的参数。

辛弃疾说:“众里寻他千百度。蓦然回首,那人却在,灯火阑珊处。"当我蓦然回首时,没有发现美人,却发现了SE16查看表数据也是用的ALV格式,而且能够显示前导空格。所以接下来又到了我展示高超Debug技术的时刻了。

调试发现SE16查看数据调用的是ALV函数REUSE_ALV_GRID_DISPLAY

 查看传入参数IS_LAYOUT并未发现异样,查看传入参数IT_FIELDCAT,看到PARAMETER0打上了“X",凭借敏锐的直觉感觉这里有情况。

解决方法:

将ALV传入参数IT_FIELDCAT里的PARAMETER0设为“X",即可输出前导空格。这时候我不反对大家尽情吐槽SAP的晦涩难懂。

 如果是OO ALV,使用了类CL_GUI_ALV_GRID,则调用方法SET_TABLE_FOR_FIRST_DISPLAY时将参数IT_FIELDCATALOG里的PARAMETER0设为“X"。

如果是SALV,使用了类CL_SALV_TABLE,则可以调用类CL_SALV_COLUMN的方法SET_LEADING_SPACES实现,参考如下


   
   
  1. *SALV相关参数
  2. DATA: GR_ TABLE TYPE REF TO CL_SALV_ TABLE,
  3. GR_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS_LIST,
  4. GR_ DISPLAY TYPE REF TO CL_SALV_ DISPLAY_SETTINGS,
  5. GR_ COLUMNS TYPE REF TO CL_SALV_ COLUMNS_ TABLE,
  6. GR_ COLUMN TYPE REF TO CL_SALV_ COLUMN_ TABLE.
  7. FORM FRM_SALV.
  8. DATA: LX_MSG TYPE REF TO CX_SALV_MSG.
  9. DATA: LV_TITLE TYPE LVC_TITLE,
  10. LV_CONT TYPE I,
  11. LV_CONTT TYPE LVC_TITLE.
  12. ASSIGN GR_ DATA- > * TO <GT_DYN >.
  13. TRY .
  14. CL_SALV_ TABLE = > FACTORY( IMPORTING R_SALV_ TABLE = GR_ TABLE CHANGING T_ TABLE = <GT_DYN > ).
  15. CATCH CX_SALV_MSG INTO LX_MSG.
  16. GV_MESSAGE = LX_MSG- > GET_TEXT( ).
  17. MESSAGE GV_MESSAGE TYPE 'E'.
  18. RETURN.
  19. ENDTRY.
  20. LV_CONT = LINES( <GT_DYN >[] ).
  21. LV_CONTT = LV_CONT.
  22. CONDENSE LV_CONTT NO-GAPS.
  23. CONCATENATE '总计共' LV_CONTT '条数据' INTO LV_TITLE.
  24. CONDENSE LV_TITLE NO-GAPS.
  25. GR_FUNCTIONS = GR_ TABLE- > GET_FUNCTIONS( ).
  26. GR_FUNCTIONS- > SET_ ALL( ABAP_ TRUE ).
  27. GR_ DISPLAY = GR_ TABLE- > GET_ DISPLAY_SETTINGS( ).
  28. * gr_ display- > set_striped_pattern( cl_salv_ display_settings = > true ).
  29. GR_ DISPLAY- > SET_LIST_HEADER( EXPORTING VALUE = LV_TITLE ).
  30. GR_ COLUMNS = GR_ TABLE- > GET_ COLUMNS( ).
  31. TRY.
  32. LOOP AT GR_ COLUMNS- > GET( ) INTO DATA(LR_ COLUMNS).
  33. IF LR_COLUMNS-COLUMNNAME = 'MESG'.
  34. GR_ COLUMN ? = GR_ COLUMNS- > GET_ COLUMN( LR_COLUMNS-COLUMNNAME ).
  35. GR_ COLUMN- > SET_ OUTPUT_ LENGTH( VALUE = | 50| ).
  36. ELSEIF LR_COLUMNS-COLUMNNAME = 'ICON'.
  37. GR_ COLUMN ? = GR_ COLUMNS- > GET_ COLUMN( LR_COLUMNS-COLUMNNAME ).
  38. GR_ COLUMN- > SET_ OUTPUT_ LENGTH( VALUE = | 5| ).
  39. GR_ COLUMN- > SET_ALIGNMENT( VALUE = IF_SALV_C_ALIGNMENT = >CENTERED ).
  40. ELSE.
  41. GR_ COLUMN ? = GR_ COLUMNS- > GET_ COLUMN( LR_COLUMNS-COLUMNNAME ).
  42. IF SY-TCODE <> 'ZFI001'.
  43. GR_ COLUMN- > SET_ OUTPUT_ LENGTH( VALUE = | 20| ).
  44. ELSE.
  45. GR_ COLUMN- > SET_OPTIMIZED( VALUE = 'X').
  46. ENDIF.
  47. GR_ COLUMN- > SET_ALIGNMENT( VALUE = IF_SALV_C_ALIGNMENT = > LEFT ).
  48. GR_ COLUMN- > SET_ LEADING_ SPACES( VALUE = 'X' ).
  49. CLEAR GS_ZTAB 0002.
  50. READ TABLE GT_ZTAB 0002 INTO GS_ZTAB 0002
  51. WITH KEY FNAME = LR_COLUMNS-COLUMNNAME.
  52. IF SY-SUBRC = 0.
  53. GR_ COLUMN- > SET_LONG_TEXT( GS_ZTAB 0002-TEXT_L ).
  54. GR_ COLUMN- > SET_MEDIUM_TEXT( GS_ZTAB 0002-TEXT_M ).
  55. GR_ COLUMN- > SET_SHORT_TEXT( GS_ZTAB 0002-TEXT_S ).
  56. ENDIF.
  57. ENDIF.
  58. ENDLOOP.
  59. CATCH CX_SALV_ NOT_FOUND.
  60. ENDTRY.
  61. "IF SY-BATCH IS INITIAL.
  62. TRY.
  63. GR_TABLE->SET_SCREEN_STATUS(
  64. PFSTATUS = 'ZCMRP001_STATUS'
  65. REPORT = SY-REPID
  66. SET_FUNCTIONS = GR_TABLE->C_FUNCTIONS_ALL ).
  67. CATCH CX_SALV_MSG.
  68. ENDTRY.
  69. DATA(GR_EVENT) = GR_TABLE->GET_EVENT( ).
  70. CREATE OBJECT EVENT_HANDLER.
  71. SET HANDLER EVENT_HANDLER->ON_USER_COMMAND FOR GR_EVENT.
  72. " ENDIF.
  73. GR_ TABLE- > DISPLAY( ).
  74. ENDFORM.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值