zoukankan      html  css  js  c++  java
  • 利用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  ZGETTABLEFIELD                                              *
    *&                                                                     *
    *&---------------------------------------------------------------------*
    *&                                                                     *
    *&                                                                     *
    *&---------------------------------------------------------------------*

    report  zgettablefield                                              .
    * 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:   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 'VBAK'.

    *======================================================================*
    * 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'.

    *======================================================================*
    * Ereignis : AT SELECTION-SCREEN OUTPUT (PBO-Zeitpunkt)                *
    *======================================================================*
    at selection-screen output.
      data exclude like rsexfcode occurs 0 with header line.
      if sy-dynnr = 1000.
        call function 'RS_SET_SELSCREEN_STATUS'
          exporting
            p_status  = 'ZGETTBFD'
          tables
            p_exclude = exclude
          exceptions
            others    = 1.
      endif.
      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[].
    *  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
    *    EXPORTING
    *      i_callback_program = g_repid
    *      it_fieldcat        = gt_fieldcat[]
    *    TABLES
    *      t_outtab           = gt_outtabf.
      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'.
    *  LS_FIELDCAT-NO_OUT        = 'X'.
      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

    *&---------------------------------------------------------------------*
    *&      Form  FUNCTION_EXCLUDE
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->P_EXCLUDE  text                                              *
    *----------------------------------------------------------------------*
    form function_exclude tables   p_exclude structure exclude.
    *  data : rcode like sy-subrc.
    * clear p_exclude.
    * refresh p_exclude.
    * exclude-fcode = 'EERW'.
    * append exclude.
    * exclude-fcode = 'EXIT'.
    * append exclude.
    endform.                               " FUNCTION_EXCLUDE 

    相关连接:http://blog.csdn.net/CompassButton/archive/2005/02/05/281435.aspx

  • 相关阅读:
    MFC下使用Mysql
    Curl的移植编译以及注意事项
    MFC 封装类为静态链接库
    MFC 任务托盘显示气泡
    MFC 获取本机IP、网络ip和物理地址
    MFC下获取系统内存和当前进程的内存使用情况
    C++ windows客户端支持SSL双向认证
    jdk+tomcat+mysql一键安装脚本
    mysql修改数据库密码
    MFC 任务托盘经常消失问题
  • 原文地址:https://www.cnblogs.com/xiaomaohai/p/6157442.html
Copyright © 2011-2022 走看看