ALV List部分列值无法显示的原因排查求助
解决ALV列表显示无内容的问题
嘿,我瞅了你的代码,立刻就发现问题出在哪儿了——字段目录里的tabname参数设置错了!
为啥会显示不出内容?
你用关联查询把数据塞进了it_f这个内表,这个内表是用DATA(it_f)直接声明的匿名结构,它的字段不属于SCARR或SPFLI任何一个表,就是独立的字段而已。但你在字段目录里把tabname分别写成了SCARR和SPFLI,ALV会顺着这个表名去找对应的字段,结果在输出内表it_f里根本找不到属于SCARR的CARRID和属于SPFLI的CONNID,自然就啥都显示不出来了。
你调试的时候内表数据是对的,但ALV匹配字段靠的是tabname + fieldname这对组合,组合不对,就等于找不到字段,内容当然出不来。
改完就能跑的代码
把字段目录里的tabname删掉就行,直接保留fieldname让ALV自己匹配内表字段:
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( ( fieldname = 'CARRID' seltext_l = 'Carrier code' col_pos = 1 outputlen = 20 ) ( 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.
额外小技巧
如果你怕手动写字段目录出错,也可以用REUSE_ALV_FIELDCATALOG_MERGE函数自动生成,不过这种联合查询的结果,可能需要手动补充第二个表的字段,比如:
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 TYPE slis_t_fieldcat_alv. " 先自动生成SCARR表的字段目录 CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING i_structure_name = 'SCARR' CHANGING ct_fieldcat = it_fcat. " 手动补充CONNID的字段信息 APPEND VALUE slis_fieldcat_alv( fieldname = 'CONNID' seltext_l = 'Connection ID' col_pos = 2 outputlen = 20 ) TO it_fcat. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING it_fieldcat = it_fcat TABLES t_outtab = it_f.
不过对你现在的场景来说,直接删掉tabname是最快解决问题的办法~
内容的提问来源于stack exchange,提问作者Rupali Singh
相关产品推荐
相关产品推荐

