利用REUSE_ALV_HIERSEQ_LIST_DISPLAY进行多层输出(输出表结构的又一例)
1、在程序里包含SLIS
TYPE-POOLS: SLIS.
2、声明主表和明细表
* GLOBAL STRUCTURE OF LIST
TYPES: BEGIN OF T_TABLE,
TABNAME LIKE DD03L-TABNAME,
DDTEXT LIKE DD02T-DDTEXT,
AS4USER LIKE DD02L-AS4USER,
END OF T_TABLE.
TYPES: BEGIN OF UD_STRUCT,
POSITION LIKE DD03L-POSITION,
TABNAME LIKE DD03L-TABNAME,
FIELDNAME LIKE DD03L-FIELDNAME,
DDTEXT LIKE DD03T-DDTEXT,
KEYFLAG LIKE DD03L-KEYFLAG,
ROLLNAME LIKE DD03L-ROLLNAME,
DOMNAME LIKE DD03L-DOMNAME,
DATATYPE LIKE DD03L-DATATYPE,
DDLENG LIKE DD03L-LENG,
CHECKTABLE LIKE DD03L-CHECKTABLE,
DECIMALS LIKE DD03L-DECIMALS,
EDDTEXT LIKE DD03T-DDTEXT,
DDDTEXT LIKE DD03T-DDTEXT,
END OF UD_STRUCT.
DATA: GT_OUTTABT TYPE T_TABLE OCCURS 0 WITH HEADER LINE.
DATA: GT_OUTTABF TYPE UD_STRUCT OCCURS 0 WITH HEADER LINE.
3、申明主表和明细表的名称变量
G_TABNAME_HEADER TYPE SLIS_TABNAME,
G_TABNAME_ITEM TYPE SLIS_TABNAME.
4、声明主表和明细表连接关键字变量
DATA: GS_KEYINFO TYPE SLIS_KEYINFO_ALV
5 、设置输出格式
6、具体完整样例
REPORT ZZGETTABLEFIELD.
* DATA DECLARATION
TYPE-POOLS: SLIS.
* GLOBAL STRUCTURE OF LIST
TYPES: BEGIN OF T_TABLE,
TABNAME LIKE DD03L-TABNAME,
DDTEXT LIKE DD02T-DDTEXT,
AS4USER LIKE DD02L-AS4USER,
END OF T_TABLE.
TYPES: BEGIN OF UD_STRUCT,
POSITION LIKE DD03L-POSITION,
TABNAME LIKE DD03L-TABNAME,
FIELDNAME LIKE DD03L-FIELDNAME,
DDTEXT LIKE DD03T-DDTEXT,
KEYFLAG LIKE DD03L-KEYFLAG,
ROLLNAME LIKE DD03L-ROLLNAME,
DOMNAME LIKE DD03L-DOMNAME,
DATATYPE LIKE DD03L-DATATYPE,
DDLENG LIKE DD03L-LENG,
CHECKTABLE LIKE DD03L-CHECKTABLE,
DECIMALS LIKE DD03L-DECIMALS,
EDDTEXT LIKE DD03T-DDTEXT,
DDDTEXT LIKE DD03T-DDTEXT,
END OF UD_STRUCT.
TABLES: DD03L,DD02L.
DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: GT_OUTTABT TYPE T_TABLE OCCURS 0 WITH HEADER LINE.
DATA: GT_OUTTABF TYPE UD_STRUCT OCCURS 0 WITH HEADER LINE.
DATA: GS_KEYINFO TYPE SLIS_KEYINFO_ALV,
G_TABNAME_HEADER TYPE SLIS_TABNAME,
G_TABNAME_ITEM TYPE SLIS_TABNAME.
DATA:GS_LAYOUT TYPE SLIS_LAYOUT_ALV. "ALVレイアウト情��造
DATA: G_REPID LIKE SY-REPID.
DATA : BEGIN OF EXCLUDE OCCURS 5,
FCODE LIKE SY-UCOMM,
END OF EXCLUDE.
DATA P_UCOMM LIKE SY-UCOMM.
SELECT-OPTIONS S_TNAME FOR DD02L-TABNAME DEFAULT 'T001'.
*======================================================================*
* INITIALIZATION FIELDCATALOG
*======================================================================*
INITIALIZATION.
G_REPID = SY-REPID.
G_TABNAME_HEADER = 'GT_OUTTABT'.
G_TABNAME_ITEM = 'GT_OUTTABF'.
* DEFINE KEYINFO
CLEAR GS_KEYINFO.
GS_KEYINFO-HEADER01 = 'TABNAME'.
GS_KEYINFO-ITEM01 = 'TABNAME'.
GS_KEYINFO-HEADER02 = SPACE.
GS_KEYINFO-ITEM02 = 'POSITION'.
P_UCOMM = SPACE.
*======================================================================*
* EREIGNIS : AT SELECTION-SCREEN (PAI-ZEITPUNKT) *
* LETZTES PAI-EREIGNIS *
*======================================================================*
AT SELECTION-SCREEN.
P_UCOMM = SY-UCOMM.
CASE P_UCOMM.
WHEN 'STBL'.
SET PARAMETER ID 'DTB' FIELD S_TNAME.
* PERFORM AUTHORITY_CHECK USING 'SE11' .
CALL TRANSACTION 'SE11' AND SKIP FIRST SCREEN.
ENDCASE.
*======================================================================*
* DATA SELECTION
*======================================================================*
START-OF-SELECTION.
PERFORM SELECT_TABLE TABLES GT_OUTTABT.
PERFORM SELECT_FIELD TABLES GT_OUTTABF.
*======================================================================*
* DISPLAY LIST
*======================================================================*
END-OF-SELECTION.
PERFORM FIELDCAT_INIT USING GT_FIELDCAT[].
*----- レイアウト情��集
GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. "最�化を行う
GS_LAYOUT-ZEBRA = 'X'. "ストライプパタ�ン
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
IS_LAYOUT = GS_LAYOUT
IT_FIELDCAT = GT_FIELDCAT[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS = GT_SP_GROUP[]
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_DEFAULT = G_DEFAULT
* I_SAVE = G_SAVE
* IS_VARIANT = G_VARIANT
* IT_EVENTS = GT_EVENTS[]
* IT_EVENT_EXIT =
I_TABNAME_HEADER = G_TABNAME_HEADER
I_TABNAME_ITEM = G_TABNAME_ITEM
IS_KEYINFO = GS_KEYINFO
* IS_PRINT =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
TABLES
T_OUTTAB_HEADER = GT_OUTTABT
T_OUTTAB_ITEM = GT_OUTTABF.
************************************************************************
* FORM NAME : FIELDCAT_INIT
* CREATED BY : DEV01
* CREATED ON :
* FORM DESCRIPTION:
* SET FIELD'S OUTPUT LAYOUT
*----------------------------------------------------------------------*
*PARAMETER DESCRIPTION
*----------------------------------------------------------------------*
* <--- RT_FIELDCAT: RETURN FIELD'S INFORMATION
*----------------------------------------------------------------------*
* MODIFICATION LOG:
* DATE PROGRAMMER DESCRIPTION
*----------------------------------------------------------------------*
************************************************************************
FORM FIELDCAT_INIT
USING RT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
DATA: POS TYPE I VALUE 1.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'TABNAME'.
LS_FIELDCAT-TABNAME = G_TABNAME_HEADER.
LS_FIELDCAT-REF_FIELDNAME = 'TABNAME'.
LS_FIELDCAT-REF_TABNAME = 'DD03T'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'DDTEXT'.
LS_FIELDCAT-TABNAME = G_TABNAME_HEADER.
LS_FIELDCAT-REF_FIELDNAME = 'DDTEXT'.
LS_FIELDCAT-REF_TABNAME = 'DD02T'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
* LS_FIELDCAT-FIELDNAME = 'TABNAME'.
* LS_FIELDCAT-TABNAME = G_TABNAME_ITEM.
* LS_FIELDCAT-REF_FIELDNAME = 'TABNAME'.
* LS_FIELDCAT-REF_TABNAME = 'DD03T'.
* LS_FIELDCAT-KEY = 'X'.
* APPEND LS_FIELDCAT TO RT_FIELDCAT.
* CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'POSITION'.
LS_FIELDCAT-TABNAME = G_TABNAME_ITEM.
LS_FIELDCAT-REF_FIELDNAME = 'POSITION'.
LS_FIELDCAT-REF_TABNAME = 'DD03L'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'FIELDNAME'.
LS_FIELDCAT-TABNAME = G_TABNAME_ITEM.
LS_FIELDCAT-REF_FIELDNAME = 'FIELDNAME'.
LS_FIELDCAT-REF_TABNAME = 'DD03T'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'DDTEXT'.
LS_FIELDCAT-TABNAME = G_TABNAME_ITEM.
LS_FIELDCAT-REF_FIELDNAME = 'DDTEXT'.
LS_FIELDCAT-REF_TABNAME = 'DD03T'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'KEYFLAG'.
LS_FIELDCAT-TABNAME = G_TABNAME_ITEM.
LS_FIELDCAT-REF_FIELDNAME = 'KEYFLAG'.
LS_FIELDCAT-REF_TABNAME = 'DD03L'.
* LS_FIELDCAT-NO_OUT = 'X'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'DATATYPE'.
LS_FIELDCAT-TABNAME = G_TABNAME_ITEM.
LS_FIELDCAT-REF_FIELDNAME = 'DATATYPE'.
LS_FIELDCAT-REF_TABNAME = 'DD03T'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'DDLENG'.
LS_FIELDCAT-TABNAME = G_TABNAME_ITEM.
LS_FIELDCAT-REF_FIELDNAME = 'LENG'.
LS_FIELDCAT-REF_TABNAME = 'DD03L'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'DECIMALS'.
LS_FIELDCAT-TABNAME = G_TABNAME_ITEM.
LS_FIELDCAT-REF_FIELDNAME = 'DECIMALS'.
LS_FIELDCAT-REF_TABNAME = 'DD03L'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'CHECKTABLE'.
LS_FIELDCAT-TABNAME = G_TABNAME_ITEM.
LS_FIELDCAT-REF_FIELDNAME = 'CHECKTABLE'.
LS_FIELDCAT-REF_TABNAME = 'DD03L'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'ROLLNAME'.
LS_FIELDCAT-TABNAME = G_TABNAME_ITEM.
LS_FIELDCAT-REF_FIELDNAME = 'ROLLNAME'.
LS_FIELDCAT-REF_TABNAME = 'DD03L'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'DOMNAME'.
LS_FIELDCAT-TABNAME = G_TABNAME_ITEM.
LS_FIELDCAT-REF_FIELDNAME = 'DOMNAME'.
LS_FIELDCAT-REF_TABNAME = 'DD03L'.
* LS_FIELDCAT-NO_OUT = 'X'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
ENDFORM. "FIELDCAT_INIT
************************************************************************
* FORM NAME : SELECT_TABLE
* CREATED BY : DEV01
* CREATED ON :
* FORM DESCRIPTION:
* GET TABLE'S INFORMATION
*----------------------------------------------------------------------*
*PARAMETER DESCRIPTION
*----------------------------------------------------------------------*
* <---RT_OUTTAB: RETURN FIELD'S INFORMATION
*----------------------------------------------------------------------*
* MODIFICATION LOG:
* DATE PROGRAMMER DESCRIPTION
*----------------------------------------------------------------------*
************************************************************************
FORM SELECT_TABLE TABLES RT_OUTTAB LIKE GT_OUTTABT[].
SELECT DD02L~TABNAME DD02T~DDTEXT DD02L~AS4USER
INTO (RT_OUTTAB-TABNAME,RT_OUTTAB-DDTEXT,RT_OUTTAB-AS4USER)
FROM DD02L LEFT JOIN DD02T
ON DD02L~TABNAME = DD02T~TABNAME
AND DD02L~AS4LOCAL = DD02T~AS4LOCAL
AND DD02L~AS4VERS = DD02T~AS4VERS
AND DD02T~DDLANGUAGE = SY-LANGU
WHERE DD02L~TABNAME IN S_TNAME
AND DD02L~AS4LOCAL = 'A'
ORDER BY DD02L~TABNAME.
APPEND RT_OUTTAB.
ENDSELECT.
ENDFORM. "SELECT_DATA
************************************************************************
* FORM NAME : SELECT_FIELD
* CREATED BY : DEV01
* CREATED ON :
* FORM DESCRIPTION:
* GET TABLE FIELD'S INFORMATION
*----------------------------------------------------------------------*
*PARAMETER DESCRIPTION
*----------------------------------------------------------------------*
* <---RT_OUTTAB: RETURN FIELD'S INFORMATION
*----------------------------------------------------------------------*
* MODIFICATION LOG:
* DATE PROGRAMMER DESCRIPTION
*----------------------------------------------------------------------*
************************************************************************
FORM SELECT_FIELD TABLES
RT_OUTTAB LIKE GT_OUTTABF[].
SELECT DD03L~POSITION DD03L~TABNAME
DD03L~FIELDNAME
DD03T~DDTEXT
DD03L~KEYFLAG
DD03L~ROLLNAME
DD03L~DOMNAME
DD03L~DATATYPE
DD03L~LENG
DD03L~CHECKTABLE DD03L~DECIMALS
DD04T~DDTEXT DD01T~DDTEXT
INTO (RT_OUTTAB-POSITION, RT_OUTTAB-TABNAME,
RT_OUTTAB-FIELDNAME, RT_OUTTAB-DDTEXT,
RT_OUTTAB-KEYFLAG,RT_OUTTAB-ROLLNAME,
RT_OUTTAB-DOMNAME,RT_OUTTAB-DATATYPE,
RT_OUTTAB-DDLENG,RT_OUTTAB-CHECKTABLE,
RT_OUTTAB-DECIMALS,
RT_OUTTAB-EDDTEXT,RT_OUTTAB-DDDTEXT)
FROM DD03L LEFT JOIN DD03T
ON DD03L~TABNAME = DD03T~TABNAME
AND DD03L~FIELDNAME = DD03T~FIELDNAME
AND DD03T~DDLANGUAGE = SY-LANGU
LEFT JOIN DD04T
ON DD03L~ROLLNAME = DD04T~ROLLNAME
AND DD04T~DDLANGUAGE = SY-LANGU
LEFT JOIN DD01T
ON DD03L~DOMNAME = DD01T~DOMNAME
AND DD01T~DDLANGUAGE = SY-LANGU
WHERE DD03L~TABNAME IN S_TNAME
ORDER BY DD03L~TABNAME DD03L~POSITION.
IF RT_OUTTAB-DDTEXT = SPACE.
IF RT_OUTTAB-EDDTEXT = SPACE.
RT_OUTTAB-DDTEXT = RT_OUTTAB-DDDTEXT.
ELSE.
RT_OUTTAB-DDTEXT = RT_OUTTAB-EDDTEXT.
ENDIF.
ENDIF.
APPEND RT_OUTTAB.
ENDSELECT.
ENDFORM. "SELECT_DATA
No comments:
Post a Comment