昨天写了个报表,似乎格式有点复杂。 一个alv 表格显示两部分数据,没办法就想起了alv的多表格。
具体方法如下,以供参考:
以两个表格为例
第一步: 首先创建两个 FIELDCAT 可以使用 REUSE_ALV_FIELDCATALOG_MERGE .
当然 也可以手工创建
第二步:调用初始化function REUSE_ALV_BLOCK_LIST_INIT
CALL FUNCTION ‘REUSE_ALV_BLOCK_LIST_INIT’
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG “ sy-repid1 * I_CALLBACK_PF_STATUS_SET = ’ ’
* I_CALLBACK_USER_COMMAND = ’ ’
* IT_EXCLUDING =
.
第三步:添加表格数据(这里是两个表格)调用REUSE_ALV_BLOCK_LIST_APPEND
因为是两个表格所以要调用两次把两个表格的参数分别传递过来
1.表格一调用的function
CALL FUNCTION ‘REUSE_ALV_BLOCK_LIST_APPEND’
EXPORTING2
IS_LAYOUT = gs_layout1
IT_FIELDCAT = T_FIELDCAT1[]
I_TABNAME = ‘P_MAKETMP’*
IT_EVENTS = it_events
IT_SORT = it_sort#
* I_TEXT = ’ ’
TABLES
T_OUTTAB = P_MAKETMP7
* EXCEPTIONS
* PROGRAM_ERROR = 1
* MAXIMUM_OF_APPENDS_REACHED = 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.
2.表格2调用的function,
CALL FUNCTION ‘REUSE_ALV_BLOCK_LIST_APPEND’% l.
EXPORTING
IS_LAYOUT = gs_layout24
IT_FIELDCAT = T_FIELDCAT2[]
I_TABNAME = ‘P_FUNDTMP’
IT_EVENTS = it_events
IT_SORT = it_sort
* I_TEXT = ’
TABLES
T_OUTTAB = P_FUNDTMP
* EXCEPTIONS5 R
* PROGRAM_ERROR = 1 * MAXIMUM_OF_APPENDS_REACHED = 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.
第四步: 输出报表 调用函数‘REUSE_ALV_BLOCK_LIST_DISPLAY
CALL FUNCTION ‘REUSE_ALV_BLOCK_LIST_DISPLAY’3 * EXPORTING
* I_INTERFACE_CHECK = ’ ’
* IS_PRINT = * I_SCREEN_START_COLUMN =
* I_SCREEN_START_LINE =
* I_SCREEN_END_COLUMN =
* I_SCREEN_END_LINE =
* IMPORTING* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
* 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.
经过以上步骤 一个多表格的alv 就成功了 有点遗憾的是两个表格中间有行空行