2008/12/03

REUSE_ALV_HIERSEQ_LIST_DISPLAY多层输出

利用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: