SAP ABAP 查找数据表程序

来源:互联网 发布:oppo手机数据自动关闭 编辑:程序博客网 时间:2024/05/05 13:49


REPORT  Z_SEARCH_TABLENAME            .
TABLES: DD02L,  DD03L, DD02T, DD02V.
*&----------------------------------------------------
*&                    屏幕输出
*&-----------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK ioc01 WITH FRAME TITLE text-a01.
SELECT-OPTIONS:
    TABNAME FOR  DD03L-TABNAME,
    S-NAME FOR DD03L-FIELDNAME,
    TABCLASS FOR DD02V-TABCLASS DEFAULT 'TRANSP',    "表类型
    ROLLNAME FOR DD03L-ROLLNAME,   "数据元素
    DOMNAME FOR DD03L-DOMNAME,     "域名
    INTLEN FOR  DD03L-INTLEN.       "字段长度
SELECTION-SCREEN END OF BLOCK ioc01.

SELECTION-SCREEN BEGIN OF BLOCK ioc02 WITH FRAME TITLE text-a02.
PARAMETERS PO AS CHECKBOX DEFAULT 'X'.
PARAMETERS DDTEXT LIKE DD02T-DDTEXT.
SELECTION-SCREEN END OF BLOCK ioc02.

TYPE-POOLS: SLIS.
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv,  "存放ALV字段描述的表
      g_repid LIKE sy-repid.
DATA: fieldcat TYPE slis_fieldcat_alv.
DATA: eventstab TYPE  slis_t_event WITH HEADER LINE.
DATA: fieldlayout type slis_layout_alv.

TYPES: BEGIN OF RESULT,
       TABNAME LIKE DD03L-TABNAME,
       FIELDNAME LIKE DD03L-FIELDNAME,
       TABCLASS LIKE DD02V-TABCLASS,
       ROLLNAME LIKE DD03L-ROLLNAME,
       DOMNAME LIKE DD03L-DOMNAME,
       INTLEN LIKE DD03L-INTLEN,
       DDTEXT LIKE DD02T-DDTEXT,
       END OF RESULT.
DATA: WA TYPE RESULT,
      ITAB TYPE RESULT OCCURS 0 WITH HEADER LINE.

DATA PM_TXT LIKE DD02T-DDTEXT.
*************************************************************************
AT SELECTION-SCREEN.
  IF  PO = 'X'.
    IF DDTEXT = SPACE.
      MESSAGE '模糊查询时,物料描述不能为空' type 'W'.
    ENDIF.
  ENDIF.

*************************************************************************
START-OF-SELECTION.
  g_repid = sy-repid.
  IF PO = 'X'.
    MOVE DDTEXT TO PM_TXT.
    CONCATENATE '%' PM_TXT '%' INTO PM_TXT.
    SELECT DISTINCT a~TABNAME a~FIELDNAME  b~TABCLASS a~ROLLNAME a~DOMNAME a~INTLEN c~DDTEXT
    FROM DD03L AS a
       INNER JOIN DD02V AS b
         ON a~TABNAME = b~TABNAME
       INNER JOIN DD02T AS c
         ON b~TABNAME = c~TABNAME  AND
            b~DDTEXT = c~DDTEXT
         INTO CORRESPONDING FIELDS of WA
        WHERE a~TABNAME IN TABNAME  AND
              a~FIELDNAME IN S-NAME AND
              b~TABCLASS IN TABCLASS AND
              a~ROLLNAME IN ROLLNAME AND
              a~DOMNAME IN DOMNAME  AND
              a~INTLEN  IN INTLEN   AND
              c~DDTEXT LIKE  PM_TXT
              ORDER BY a~TABNAME DESCENDING.
      APPEND WA TO ITAB.
      CLEAR WA.
    ENDSELECT.
    IF SY-SUBRC <> 0.
      MESSAGE '根据输入的信息找不到相关的数据表,请重新输入搜索条件!' type 'S'.
    ENDIF.
  ELSE.
    SELECT DISTINCT a~TABNAME a~FIELDNAME  b~TABCLASS a~ROLLNAME a~DOMNAME a~INTLEN c~DDTEXT
    FROM DD03L AS a
        INNER JOIN DD02V AS b
          ON a~TABNAME = b~TABNAME
        INNER JOIN DD02T AS c
         ON b~TABNAME = c~TABNAME  AND
          b~DDTEXT = c~DDTEXT
         INTO CORRESPONDING FIELDS of WA
       WHERE a~TABNAME IN TABNAME  AND
               a~FIELDNAME IN S-NAME AND
               b~TABCLASS IN TABCLASS AND
               a~ROLLNAME IN ROLLNAME AND
               a~DOMNAME  IN DOMNAME  AND
               a~INTLEN  IN INTLEN
               ORDER BY a~TABNAME DESCENDING.
      APPEND WA TO ITAB.
      CLEAR WA.
    ENDSELECT.
    IF SY-SUBRC <> 0.
     MESSAGE '根据输入的信息找不到相关的数据表,请重新输入搜索条件!' type 'S'.
    ENDIF.
  ENDIF.
  DELETE ADJACENT DUPLICATES FROM ITAB COMPARING TABNAME.
  PERFORM perpare_gt_fieldcatalog.
  PERFORM perpare_layout using fieldlayout.
  PERFORM fill_eventstab tables eventstab.
  PERFORM display_list.
**************************************************************************************
FORM perpare_gt_fieldcatalog.
  CLEAR fieldcat.
  fieldcat-fieldname = 'TABNAME'.
  fieldcat-reptext_ddic = '表名'.
  fieldcat-key = 'X'.
  APPEND fieldcat TO gt_fieldcat.

  CLEAR fieldcat.
  fieldcat-fieldname = 'FIELDNAME'.
  fieldcat-reptext_ddic = '字段名'.
  fieldcat-key = 'X'.
  APPEND fieldcat TO gt_fieldcat.

  CLEAR fieldcat.
  fieldcat-fieldname = 'TABCLASS'.
  fieldcat-reptext_ddic = '表类型'.
  APPEND fieldcat TO gt_fieldcat.

  CLEAR fieldcat.
  fieldcat-fieldname = 'ROLLNAME'.
  fieldcat-reptext_ddic = '字段元素'.
  APPEND fieldcat TO gt_fieldcat.

  CLEAR fieldcat.
  fieldcat-fieldname = 'DOMNAME'.
  fieldcat-reptext_ddic = '字段域名'.
  APPEND fieldcat TO gt_fieldcat.

  CLEAR fieldcat.
  fieldcat-fieldname = 'INTLEN'.
  fieldcat-reptext_ddic = '字段长度'.
  APPEND fieldcat TO gt_fieldcat.

  CLEAR fieldcat.
  fieldcat-fieldname = 'DDTEXT'.
  fieldcat-reptext_ddic = '字段描述'.
  APPEND fieldcat TO gt_fieldcat.

ENDFORM.                    "perpare_gt_fieldcatalog
*&---------------------------------------------------------
*&               布局设置
*&----------------------------------------------------------
FORM perpare_layout using fieldlayout type  slis_layout_alv.
  fieldlayout-zebra = 'X'.
  fieldlayout-colwidth_optimize = 'X'.    "优化列宽设置
  fieldlayout-no_vline = ' '.
  fieldlayout-confirmation_prompt = ' '.
  fieldlayout-no_colhead = ' '.
ENDFORM.                    "perpare_layout

*&----------------------------------------------------------------
*&                       输出行项目
*&------------------------------------------------------------------
FORM display_list.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program      = g_repid
      i_callback_user_command = 'USER_COMMAND'
      is_layout               = fieldlayout
      it_fieldcat             = gt_fieldcat
      it_events               = eventstab[]
    TABLES
      t_outtab                = ITAB[].
ENDFORM.                    "display_list
*&---------------------------------------------------------------------*
*&      Form  fill_eventstab
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_EVENTSTAB  text
*----------------------------------------------------------------------*
FORM fill_eventstab tables p_eventstab structure eventstab.
  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type     = 0
    IMPORTING
      et_events       = p_eventstab[]
    EXCEPTIONS
      list-type_wrong = 1
      others          = 2.

ENDFORM.                    "fill_eventstab
*&--------------------------------------------------------------------------
*&                         double click events
*&---------------------------------------------------------------------------
FORM USER_COMMAND USING RF_UCOMM LIKE SY-UCOMM
                       RS  TYPE SLIS_SELFIELD.
  if rf_ucomm = '&IC1'.
    CLEAR WA.
    read table ITAB into WA index rs-tabindex.
    if sy-subrc = 0.
      set parameter id 'DTB' field WA-TABNAME.
*      set parameter id 'DFD' field WA-FIELDNAME.
      IF WA-TABNAME <> SPACE.
        call transaction 'SE11' and skip first screen.
      ELSE.
        MESSAGE '不存在此数据信息!' type  'W'.
      ENDIF.
    endif.
    clear WA.
  endif.
  clear rf_ucomm.
ENDFORM.                    "USER_COMMAND

0 0
原创粉丝点击