首页 > 其他 > 详细

F1 相似查找字段存在的table

时间:2019-10-14 12:15:54      阅读:190      评论:0      收藏:0      [点我收藏+]

技术分享图片

*&---------------------------------------------------------------------*
*& Report ZDQUERY
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZME12_BDC1.

TYPE-POOLS : ABAP.
DATA where_tab(80OCCURS 10 WITH HEADER LINE.
DATA where_tab2(80OCCURS 10 WITH HEADER LINE.
DATA : wa_itab LIKE makt OCCURS 10 WITH HEADER LINE.
*DATA : idetails TYPE abap_compdescr_tab,
*           xdetails TYPE abap_compdescr.
DATA:BEGIN OF get_table occurs ,
  TABNAME TYPE string,
END OF get_table.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
PARAMETERS:p_field TYPE string OBLIGATORY.
PARAMETERS: s_trx  TYPE string LOWER CASE." LOWER CASE 大小写不转换
SELECTION-SCREEN END OF BLOCK B1.

INITIALIZATION.

START-OF-SELECTION.
*--->去掉前导 0
*  CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_OUTPUT‘
*    EXPORTING
*      input  = s_trx
*    IMPORTING
*      output = s_trx.

  CONCATENATE   p_field ‘ LIKE ‘‘%‘ s_trx ‘%‘‘‘ INTO where_tab.
  APPEND where_tab.

TYPE-POOLS : ABAP.
FIELD-SYMBOLS: <DYN_TABLE> TYPE STANDARD TABLE,
               <DYN_WA>,
               <DYN_FIELD>.
DATA: dy_table TYPE REF TO data,
      dy_line  TYPE REF TO data,
      xfc TYPE lvc_s_fcat,
      ifc TYPE lvc_t_fcat.

  DATA:wa_structure TYPE lvc_s_fcat,
           wa_structure1 TYPE lvc_s_fcat,
           gt_structure TYPE lvc_t_fcat.

DATA: gs_layout TYPE slis_layout_alv,
          gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
          wa_fieldcat TYPE slis_fieldcat_alv.

START-OF-SELECTION.
     PERFORM data_table.
     PERFORM get_col.
     PERFORM alv_show.
END-OF-SELECTION.

FORM data_table.
DATA: l_count TYPE i.

DATA : ref_table_des TYPE REF TO cl_abap_structdescr.
DATA : ef_is_unicode LIKE  /bdl/tasks-status.
DATA:l_value TYPE string.
DATA: l_index TYPE sy-tabix,
          lv_comt TYPE i,
          l_num TYPE ,
          p_len TYPE n.

     gs_layout-colwidth_optimize ‘X‘.
     p_len strlen( s_trx ).
      "查询ABAP 所有table表格
      SELECT dd02vv~TABNAME COUNT(*FROM dd02vv
        INNER JOIN dd02l ON  dd02l~tabname EQ dd02vv~tabname
        INNER JOIN dd03l ON dd03l~tabname EQ dd02vv~tabname
*        UP TO 10 ROWS
        INTO CORRESPONDING FIELDS OF TABLE get_table
        WHERE dd02vv~tabclass IN (‘TRANSP‘,‘CLUSTER‘,‘POOL‘AND " 透明表
                    dd02vv~contflag NE ‘L‘ AND " 存储时资料的表格,空传送
                    dd02vv~as4local NOT IN (  ‘N‘,‘T‘ AND " 未启用,临时版本
                    dd03l~fieldname EQ p_field AND
                    dd03l~intlen >= p_len AND
                    is_gtt NE ‘X‘ " X全局临时表 N 没有全局临时表
            GROUP BY dd02vv~TABNAME .

          "字符小写转换大写
          TRANSLATE p_field to UPPER CASE.
           "创建内表结构
          PERFORM new_teble.
          " 创建内表
          PERFORM create_dynamic_itab.

          LOOP AT get_table.
            l_index = sy-tabix.
            CLEAR: l_num.
           "查询表格内容是否有值
            SELECT COUNT(*INTO l_num
                UP TO ROWS
                FROM (get_table-tabname).
               IF sy-subrc <> 0.
                 DELETE get_table INDEX l_index.
                  CONTINUE.
               ENDIF.
**               DESCRIBE TABLE get_table-tabname LINES index_z
**               n = lines(get_table-tabname).
*
*             "***获取表结构
*               CLEAR:ef_is_unicode,idetails[],xdetails,
*                         ref_table_des.
*               " check the system is unicode or nonunicode
*               CALL FUNCTION ‘/BDL/CHECK_UNICODE‘
*                 IMPORTING
*                   ef_is_unicode = ef_is_unicode.
**              get the structure of the table.
*               ref_table_des ?=
*               cl_abap_typedescr=>describe_by_name( get_table-tabname ).
*               idetails[] = ref_table_des->components[].
*
*               "先获取每个table字段 与查找的table是否相同
*               READ TABLE idetails INTO wa WITH KEY name = p_field BINARY SEARCH.
*               IF sy-subrc = 0 .
                 CLEAR:l_value.
                    SELECT SINGLE (p_field)
                        FROM (get_table-tabname)
                        INTO @l_value
                        WHERE (where_tab).
                      IF sy-subrc 0.
                          ASSIGN COMPONENT ‘TABLE_NAME‘ OF STRUCTURE <dyn_wa> TO <dyn_field>.
                          <dyn_field> = get_table-tabname.

                          ASSIGN COMPONENT ‘FIELD‘ OF STRUCTURE <dyn_wa> TO <dyn_field>.
                          <dyn_field> = p_field.

                          ASSIGN COMPONENT ‘VALUE‘ OF STRUCTURE <dyn_wa> TO <dyn_field>.
                          <dyn_field> = l_value .
                          APPEND <dyn_wa> TO <dyn_table>CLEAR <dyn_wa>.
                      ENDIF.
*              ENDIF.
          ENDLOOP.
ENDFORM.

*&---------------------------------------------------------------------*
*&      form  create_dynamic_itab
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
form create_dynamic_itab.
* create dynamic internal table and assign to fs
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      i_length_in_byte ‘x‘
      it_fieldcatalog  = ifc
    IMPORTING
      ep_table         = dy_table.
  ASSIGN dy_table->* TO <dyn_table>.
* create dynamic work area and assign to fs
  CREATE DATA dy_line LIKE LINE OF <dyn_table>.
  ASSIGN dy_line->* TO <dyn_wa>.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form NEW_TEBLE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM NEW_TEBLE .
  CLEAR xfc.
*      xfc-tabname = ‘TABLE_NAME‘.
      xfc-fieldname ‘TABLE_NAME‘ .
      xfc-datatype ‘C‘.
      xfc-inttype ‘C‘.
      xfc-intlen 30.
      "小数点
*      xfc-decimals = xdetails-decimals.
      APPEND  xfc TO ifc.
  CLEAR xfc.
*   xfc-tabname = ‘TABLE_FIELD‘.
   xfc-fieldname ‘FIELD‘."p_field .
   xfc-datatype ‘C‘.
   xfc-inttype ‘C‘.
   xfc-intlen 30.
   "小数点
*   xfc-decimals = xdetails-decimals.
   APPEND  xfc TO ifc.

  CLEAR xfc.
*   xfc-tabname = ‘TABLE_FIELD‘.
   xfc-fieldname ‘VALUE‘.
   xfc-datatype ‘C‘.
   xfc-inttype ‘C‘.
   xfc-intlen 50.
   "小数点
*   xfc-decimals = xdetails-decimals.
   APPEND  xfc TO ifc.
ENDFORM.

FORM get_col.
 DEFINE FILEDCAT.
        gt_fieldcat-fieldname = &1.   "对应内表的字段名
        gt_fieldcat-seltext_l = &2.    "输出列文本         gt_fieldcat
-outputlen = &3.   "長度         
APPEND gt_fieldcat.    
END-OF-DEFINITION.    FILEDCAT 

‘TABLE_NAME‘    ‘表格名称‘  20.    FILEDCAT 
‘FIELD‘                ‘表格字段‘  20.    FILEDCAT 
‘VALUE‘              ‘查询内容‘  20.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form ALV_SHOW
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM ALV_SHOW .        

CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY‘         
EXPORTING             I_CALLBACK_PROGRAM 
= SY-REPID             IS_LAYOUT                   
= GS_LAYOUT            IT_FIELDCAT                  
= GT_FIELDCAT[]             I_SAVE                         
‘A‘           
TABLES           T_OUTTAB                     
= <dyn_table>           
EXCEPTIONS             PROGRAM_ERROR      
1           
OTHERS                       2.
ENDFORM.

技术分享图片

 

F1 相似查找字段存在的table

原文:https://www.cnblogs.com/Brokenshelltao/p/11670435.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!