使用REUSE_ALV_FIELDCATALOG_MERGE创建FIELDCAT注意的二三事
当使用REUSE_ALV_FIELDCATALOG_MERGE函数根据程序定义的内表生成ALV输出FIELDCAT时,需要注意如下几项:
1、如果报表对应的程序行字符超出72个会报如下异常错误,需要将程序行内容缩短到72个字符以下
对于批量修改程序行长度,可以通过如下方式批量处理
2、参照内表定义必须通过data: begin of xxx occurs 0 ......... end of xxx,在定义内表字段的时候如果是参照数据库表字段的必须使 用LIKE定义,而不能使用TYPE,TYPE只有在使用SAP的内置数据类型时才能使用,如N,C,D等.
3、填充函数参数需要注意下面几点
3-1、i_internal_tabname对应内表的名字,必须用引号引起来,同时大写字母。
3-2、i_bypassing_buffer设置为'X',表示每次调用都根据内表重新生成fieldcat,而不是直接取上次运行的缓存的结果,如果没有
设置这个参数每次更改内表结构都樁退出系统再重新进去才能生成正确的fieldcat。
3-3、ct_fieldcat参数,如果定义带表头必须要加上[ ]。
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_internal_tabname = 'GT_OUT'
* I_STRUCTURE_NAME = ''
* I_CLIENT_NEVER_DISPLAY = 'X'
i_inclname = sy-repid
i_bypassing_buffer = 'X'
* I_BUFFER_ACTIVE =
CHANGING
ct_fieldcat = gt_fieldcat[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.