首页 > 解决方案 > 为什么不显示 ALV 列表的某些列的值?

问题描述

我正在尝试创建具有列表显示的 ALV 报告,但某些内容未显示在输出列表中。我创建了一个经典报告和一个带有网格显示的 ALV 报告,我成功了。但是这个列表显示正在制造一个问题。

我已经包含了该REUSE_ALV_LIST_DISPLAY函数,并带有正确的内部表名。我已经调试并且我的所有数据都正确地进入了最终的内部表,但它没有显示在输出列表中:

在此处输入图像描述

这是我的代码(请注意,飞行演示数据将通过程序生成SAPBC_DATA_GENERATOR一次):

REPORT ztest.

SELECT scarr~carrid, spfli~connid
  FROM scarr INNER JOIN spfli ON scarr~carrid = spfli~carrid
  INTO TABLE @DATA(it_f).

DATA(it_fcat) = VALUE slis_t_fieldcat_alv(
  ( tabname   = 'SCARR'
    fieldname = 'CARRID'
    seltext_l = 'Carrier code'
    col_pos   = 1
    outputlen = 20 )
  ( tabname   = 'SPFLI'
    fieldname = 'CONNID'
    seltext_l = 'Connection ID'
    col_pos   = 2
    outputlen = 20 ) ).

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
  EXPORTING
    it_fieldcat = it_fcat
  TABLES
    t_outtab    = it_f.

标签: abap

解决方案


在简单的 ALV 表中,您不必填写TABNAME字段目录的组件。只有作为两个表的输出TABNAME的分层顺序列表(例如功能模块)才需要。REUSE_ALV_HIERSEQ_LIST_DISPLAY

如果您省略它,或者为所有列提供相同的值(任何值),您将获得正确的输出:

在此处输入图像描述

带有更正的代码:

SELECT scarr~carrid, spfli~connid
  FROM scarr INNER JOIN spfli ON scarr~carrid = spfli~carrid
  INTO TABLE @DATA(it_f).

DATA(it_fcat) = VALUE slis_t_fieldcat_alv(
  ( " do not fill TABNAME // tabname   = 'SCARR'
    fieldname = 'CARRID'
    seltext_l = 'Carrier code'
    col_pos   = 1
    outputlen = 20 )
  ( " do not fill TABNAME // tabname   = 'SPFLI'
    fieldname = 'CONNID'
    seltext_l = 'Connection ID'
    col_pos   = 2
    outputlen = 20 ) ).

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
  EXPORTING
    it_fieldcat = it_fcat
  TABLES
    t_outtab    = it_f.

推荐阅读