代码之家  ›  专栏  ›  技术社区  ›  Erik

调用REUSE\u ALV\u GRID\u DISPLAY时崩溃“尚未分配字段符号”

  •  1
  • Erik  · 技术社区  · 7 年前

    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\u where\u used\u data\u of\u coll”是我的本地表,我在程序的前面已经填充了一个工作函数。这个函数可以工作,我已经对它进行了测试,表中充满了数据。我的下一步是向最终用户显示这些数据。我在执行此程序时收到的错误报告是:

    短文本: Field symbol has not yet been assigned.

    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
    

    非常感谢您的帮助。

    编辑: 正如建议的那样,我实现了另一种显示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( ).
    
    1 回复  |  直到 4 年前
        1
  •  5
  •   Marco Hernández    7 年前

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

    字段目录名称区分大小写。大写每 fieldname tabname 然后查看错误是否仍然存在。还要确保名称与内部表的名称匹配 lt_where_used_data_of_coll

    推荐文章