Abap “撞车”;尚未分配字段符号“;调用重用\u ALV\u GRID\u DISPLAY时

Abap “撞车”;尚未分配字段符号“;调用重用\u ALV\u GRID\u DISPLAY时,abap,alv,Abap,Alv,在显示ALV时,我在执行程序时会收到一份崩溃报告。为了创建ALV,我遵循了一些教程和其他内容,目前看起来如下: TYPE-POOLS: slis. *build field catalog DATA: it_fieldcat TYPE slis_t_fieldcat_alv, wa_fieldcat TYPE slis_fieldcat_alv, repid TYPE sy-repid. REFRESH it_fieldcat. CLEAR wa_fieldcat. wa_f

在显示ALV时,我在执行程序时会收到一份崩溃报告。为了创建ALV,我遵循了一些教程和其他内容,目前看起来如下:

TYPE-POOLS: slis. 
*build field catalog
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
    wa_fieldcat TYPE slis_fieldcat_alv,
    repid TYPE sy-repid.

REFRESH it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-reptext_ddic = 'Table ID'.
wa_fieldcat-fieldname    = 'table_id'.
wa_fieldcat-tabname      = 'lt_where_used_data_of_coll'.
wa_fieldcat-outputlen    = '18'.
APPEND wa_fieldcat TO it_fieldcat.

CLEAR wa_fieldcat.
wa_fieldcat-reptext_ddic = 'Table Description'.
wa_fieldcat-fieldname    = 'table_description'.
wa_fieldcat-tabname      = 'lt_where_used_data_of_coll'.
wa_fieldcat-outputlen    = '40'.
APPEND wa_fieldcat TO it_fieldcat.

CLEAR wa_fieldcat.
wa_fieldcat-reptext_ddic = 'Numer of Records Found'.
wa_fieldcat-fieldname    = 'nr_of_records'.
wa_fieldcat-tabname      = 'lt_where_used_data_of_coll'.
wa_fieldcat-outputlen    = '30'.
APPEND wa_fieldcat TO it_fieldcat.

*pass data and field catalog to ALV function module
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
  i_callback_program      = repid
  it_fieldcat             = it_fieldcat
  i_structure_name        = 'lty_where_used_data_of_coll'
TABLES
  t_outtab                = lt_where_used_data_of_coll.
“lt_where_used_data_of_coll”是我的本地表,我在程序前面已经用一个工作函数填充了该表。这个函数可以工作,我已经对它进行了测试,表中充满了数据。我的下一步是向最终用户显示这些数据。执行此程序时收到的错误报告为:

短文本:
尚未分配字段符号。

发生了什么事?:

Error in the ABAP Application Program.
    The current ABAP program "SAPLSLVC" had to be terminated because it has
    come across a statement that unfortunately cannot be executed.
错误分析:

You attempted to access an unassigned field symbol
(data segment "-1").
运行时错误的触发位置

    Program                                 SAPLSLVC
    Include                                 LSLVCF36
    Row                                     3,273
    Module type                             (FORM)
    Module Name                             FILL_DATA_TABLE
我真的不知道如何开始发现我的错误。从ABAP本身调用函数时,它似乎运行不好

非常感谢您的帮助

编辑:正如建议的那样,我实现了另一种显示ALV的方法,可以在下面找到。这种方法工作良好,没有错误。问题仍然存在,为什么旧方法会给我一个错误

我用以下代码替换了上面的整个代码块:

DATA alv TYPE REF TO cl_salv_table. DATA message TYPE REF TO cx_salv_msg.

*initialize ALV
TRY.
  cl_salv_table=>factory(
    IMPORTING
      r_salv_table = alv
    CHANGING
      t_table      = lt_where_used_data_of_coll ).
CATCH cx_salv_msg INTO message.
  " error handling
ENDTRY.
*display ALV
alv->display( ).
为什么旧方法会给我一个错误

字段目录名称区分大小写。将每个
字段名
选项卡名
值大写,然后查看错误是否仍然存在。还要确保名称与内部表
lt\u中使用的\u coll的数据\u的名称匹配

为什么旧方法会给我一个错误


字段目录名称区分大小写。将每个
字段名
选项卡名
值大写,然后查看错误是否仍然存在。还要确保名称与内部表
lt\u的名称匹配,其中使用了\u coll的\u data\u

使用class
cl\u salv\u表<代码>重用\u ALV\u网格\u显示器
非常陈旧且生锈。您面临的错误是典型的fieldcat问题,因为模块未验证您的输入。同时尝试从导出中删除
i\u结构\u名称
parameters@lausek我不知道它又旧又生锈了。我遵循的指南是2015年的,没有提到这一点。我实施了你的建议,现在效果很好。我仍然不知道为什么它以前不起作用。改用class
cl\u salv\u table
<代码>重用\u ALV\u网格\u显示器
非常陈旧且生锈。您面临的错误是典型的fieldcat问题,因为模块未验证您的输入。同时尝试从导出中删除
i\u结构\u名称
parameters@lausek我不知道它又旧又生锈了。我遵循的指南是2015年的,没有提到这一点。我实施了你的建议,现在效果很好。我仍然不知道为什么它以前不起作用。我以为ABAP不区分大小写?即使我以小写形式声明字段名和表名,它们是否也会大写?我的类型、表和字段名的声明如下:
类型:lty的开始,其中使用了\u coll的数据\u,表id类型tabname,表描述类型as4text,nr\u记录类型i,lty的结束,其中使用了\u coll的数据\u。数据:lt\u where\u使用了\u coll类型的\u数据\u lty的标准表\u where\u使用了\u coll的\u数据。
欢迎使用ABAP:)。尽管您已经用小写字母定义了类型和字段名,但您在内部使用的ALV函数模块调用了另一个FM REUSE_ALV_FIELDCATALOG_MERGE,只有当您以大写字母提供字段名时,它才有效>我认为ABAP不区分大小写@Erik您在ABAP“”中单引号之间写的任何内容都区分大小写:-)我认为ABAP不区分大小写?即使我以小写形式声明字段名和表名,它们是否也会大写?我的类型、表和字段名的声明如下:
类型:lty的开始,其中使用了\u coll的数据\u,表id类型tabname,表描述类型as4text,nr\u记录类型i,lty的结束,其中使用了\u coll的数据\u。数据:lt\u where\u使用了\u coll类型的\u数据\u lty的标准表\u where\u使用了\u coll的\u数据。
欢迎使用ABAP:)。尽管您已经用小写字母定义了类型和字段名,但您在内部使用的ALV函数模块调用了另一个FM REUSE_ALV_FIELDCATALOG_MERGE,这仅在以大写字母提供字段名时有效>我认为ABAP不区分大小写@Erik您在ABAP“”中单引号之间写的任何内容都区分大小写:-)