调用另外的一个程序,想得到ALV内表数据,可以使用变量读写内存方法,或者使用SET/GET parameters方法来传递,但这两种方法都需要修改被调用的程序把需要传的值 先保存起来,在想得到标准程序 的ALV程序时就很麻烦了,以下是在对得到调用程序的ALV内表数据,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
DATA LT_TAB TYPE TABLE OF ABAPLIST."ALV返回内存 TYPES: BEGIN OF TY_TAB_DATA, LINE(4000), END OF TY_TAB_DATA. DATA: LT_TAB_DATA TYPE TABLE OF TY_TAB_DATA, LS_TAB_DATA TYPE TY_TAB_DATA. "查询期间 S_MONAT = VALUE #( ( SIGN = 'I' OPTION = 'BT' LOW = P_MONAT HIGH = LS_CALENDARDATE-CALENDARDAY ) ). SUBMIT ZRTRR04720 EXPORTING LIST TO MEMORY WITH S_BUKRS IN S_BUKRS WITH S_MONAT IN S_MONAT WITH S_PRCTR IN S_PRCTR WITH P_GJAHR = P_GJAHR WITH P_MONAT = P_MONAT "传递selection类型的参数到被调用程序中 "WITH SELECTION-TABLE LT_TABSEL AND RETURN. "从被调用程序中导入结果,如有需要应该再把FIELDCAT也存到内存中,在这里返回 "IMPORT GT_MARD TO GT_MARD FROM MEMORY ID G_MEMORY. " "从ABAP内存中加载缓存的LIST * CALL FUNCTION 'LIST_FROM_MEMORY' TABLES LISTOBJECT = LT_TAB EXCEPTIONS NOT_FOUND = 1 OTHERS = 2. CALL FUNCTION 'LIST_TO_ASCI' " EXPORTING " LIST_INDEX = -1 TABLES LISTASCI = LT_TAB_DATA LISTOBJECT = LT_TAB EXCEPTIONS EMPTY_LIST = 1 LIST_INDEX_INVALID = 2 OTHERS = 3. |
程序中LT_TAB_DATA就得到了ALV的内表数据,内表中的数据分三大部分,第一部分为ALV显示 的HEAD信息(此部分信息应该是4行),第二部分信息为ALV的列TITLE文本内容(从第6行开始,第5行为—分隔附),每个TITLE就会有一行,ALV有多少列就会有多少个TITLE,第三部分为ALV数据内容。
后面只要把此内表的数据整理到当前程序的内表中就可以了
