2012-02-08 52 views
2

我在运行此程序时收到了短转储(字段符号尚未分配)。 我知道,如果我没有正确填写t_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. 

回答

4

不幸的是,这种情况在这里很重要。更改以下行:

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

fill_fieldcatalog 1 'CARRID' 't_scarr' 10. 
fill_fieldcatalog 2 'CARRNAME' 't_scarr' 10. 
+2

我想知道,它也可能是大写字母表名称的好习惯。 – tomdemuyt 2012-02-08 19:02:59

+0

@jagger感谢它的工作。 :) – 2012-02-09 03:28:17

+0

@tomdemuyt感谢您的建议。 – 2012-02-09 03:33:42

1

另一个选项是做翻译为大写宏。这样调用它时你永远不会犯错。

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