Abap 短转储:尚未分配字段符号

Abap 短转储:尚未分配字段符号,abap,Abap,当我运行此程序时,我得到一个短转储(字段符号尚未分配)。 我知道如果我没有正确填写t\u fieldcat,可能会出现此错误。 据我所知,我已正确填写了字段目录 我想不出问题出在哪里请帮忙 REPORT Y_ALV1. type-pools slis. tables: scarr. data: t_scarr type table of scarr, t_fieldcat type slis_t_fieldcat_alv. data: wa_field

当我运行此程序时,我得到一个短转储(字段符号尚未分配)。 我知道如果我没有正确填写
t\u fieldcat
,可能会出现此错误。 据我所知,我已正确填写了字段目录

我想不出问题出在哪里请帮忙

REPORT  Y_ALV1.

type-pools slis.
tables: scarr.

data:
      t_scarr type table of scarr,
      t_fieldcat type slis_t_fieldcat_alv.

data:
      wa_fieldcat type slis_fieldcat_alv.

select-options:
      s_carrid for scarr-carrid.

start-of-selection.
      select * into table t_scarr from scarr where carrid in s_carrid.
        if sy-subrc ne 0.
          leave list-processing.
          endif.

define fill_fieldcatalog.
  wa_fieldcat-col_pos = &1.
  wa_fieldcat-fieldname = &2.
  wa_fieldcat-tabname = &3.
  wa_fieldcat-outputlen = &4.

  append wa_fieldcat to t_fieldcat.

  end-of-definition.


  fill_fieldcatalog 1 'carrid' 't_scarr' 10.
  fill_fieldcatalog 2 'carrname' 't_scarr' 10.

  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
   EXPORTING
      IT_FIELDCAT                    = t_fieldcat
    TABLES
      T_OUTTAB                       = t_scarr
   EXCEPTIONS
     PROGRAM_ERROR                  = 1
     OTHERS                         = 2
            .
  IF SY-SUBRC <> 0.
 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
报告Y_ALV1。
键入池SLI。
桌子:斯卡尔。
数据:
t_SCAR的SCAR类型表,
t_fieldcat型SLI_t_fieldcat_alv。
数据:
wa_fieldcat类型slis_fieldcat_alv。
选择选项:
s_carrid代表Scar carrid。
开始选择。
从s_carrid中carrid所在的scarr中选择*进入表t_scarr。
如果sy subrc ne为0。
休假名单处理。
恩迪夫。
定义填充字段目录。
wa_fieldcat-col_pos=&1。
wa_fieldcat-fieldname=&2。
wa_fieldcat-tabname=&3。
wa_fieldcat-outputlen=&4。
将wa_fieldcat追加到t_fieldcat。
定义结束。
填充字段目录1“carrid”t\u scarr“10。
填写字段目录2“carrname”t\u scarr“10”。
调用函数“重用\u ALV\u列表\u显示”
出口
IT_FIELDCAT=t_FIELDCAT
桌子
T_OUTTAB=T_scar
例外情况
程序错误=1
其他=2
.
如果SY-SUBRC为0。
消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
使用SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
恩迪夫。

不幸的是,这个案例在这里确实很重要。更改以下行:

fill_fieldcatalog 1 'carrid' 't_scarr' 10.
fill_fieldcatalog 2 'carrname' 't_scarr' 10.


另一个选择是将宏转换为大写。这样你打电话时就不会出错

wa_fieldcat-fieldname = &2.
TRANSLATE wa_fieldcat-fieldname TO UPPER CASE.
wa_fieldcat-tabname = &3.
TRANSLATE wa_fieldcat-tabname TO UPPER CASE.

我想知道,将表名也大写可能是一种好的做法。@tomdemyt谢谢您的建议。
wa_fieldcat-fieldname = &2.
TRANSLATE wa_fieldcat-fieldname TO UPPER CASE.
wa_fieldcat-tabname = &3.
TRANSLATE wa_fieldcat-tabname TO UPPER CASE.