• F1 相似查找字段存在的table


    1 REPORT ZME12_BDC1.
      2 *REPORT demo_select_dynamic_conditions .
      3 TABLES: makt,dd02t,marc.
      4 TYPE-POOLS : ABAP.
      5 DATA where_tab(80) OCCURS 10 WITH HEADER LINE.
      6 DATA where_tab2(80) OCCURS 10 WITH HEADER LINE.
      7 DATA : wa_itab LIKE makt OCCURS 10 WITH HEADER LINE.
      8 DATA : idetails TYPE abap_compdescr_tab,
      9            xdetails TYPE abap_compdescr.
     10 DATA:wa LIKE idetails WITH HEADER LINE.
     11 
     12 DATA:BEGIN OF get_table occurs 0 ,
     13 tabname TYPE string,"表名
     14 fieldname LIKE dd03l-fieldname,"字段名称
     15 rollname LIKE dd03l-rollname,"资料元素
     16 inttype LIKE dd03l-inttype, "类型
     17 END OF get_table.
     18 
     19 SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
     20 PARAMETERS:p_field TYPE string OBLIGATORY.
     21 PARAMETERS: s_trx  TYPE string LOWER CASE." LOWER CASE 大小写不转换
     22 SELECTION-SCREEN END OF BLOCK B1.
     23 
     24 INITIALIZATION.
     25 
     26 START-OF-SELECTION.
     27 *--->去掉前导 0
     28 *  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
     29 *    EXPORTING
     30 *      input  = s_trx
     31 *    IMPORTING
     32 *      output = s_trx.
     33 *IF cl_abap_matcher=>matches(
     34 *    pattern = '^(-?[1-9]d*(.d*[1-9])?)|(-?0.d*[1-9])$'
     35 *    text = s_trx ) = abap_true.
     36 *
     37 **  WRITE '数字'.
     38 *  CONCATENATE   p_field ' EQ ''' s_trx '''' INTO where_tab.
     39 *ELSE.
     40 *
     41 **  WRITE '非数字'.
     42 *  CONCATENATE   p_field ' LIKE ''%' s_trx '%''' INTO where_tab.
     43 *ENDIF.
     44 *  CONCATENATE   p_field ' LIKE ''%' s_trx '%''' INTO where_tab.
     45 *  APPEND where_tab.
     46 
     47 *  CONCATENATE   p_field ' NE ''''' INTO where_tab2.
     48 *  APPEND where_tab2.
     49 *  CLEAR where_tab2.
     50 
     51 TYPE-POOLS : ABAP.
     52 FIELD-SYMBOLS: <DYN_TABLE> TYPE STANDARD TABLE,
     53                <DYN_WA>,
     54                <DYN_FIELD>.
     55 DATA: dy_table TYPE REF TO data,
     56       dy_line  TYPE REF TO data,
     57       xfc TYPE lvc_s_fcat,
     58       ifc TYPE lvc_t_fcat.
     59 
     60   DATA:wa_structure TYPE lvc_s_fcat,
     61            wa_structure1 TYPE lvc_s_fcat,
     62            gt_structure TYPE lvc_t_fcat.
     63 
     64 DATA: gs_layout TYPE slis_layout_alv,
     65           gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
     66           wa_fieldcat TYPE slis_fieldcat_alv.
     67 
     68 START-OF-SELECTION.
     69      PERFORM data_table.
     70      PERFORM get_col.
     71      PERFORM alv_show.
     72 END-OF-SELECTION.
     73 
     74 FORM data_table.
     75 DATA: l_count TYPE i.
     76 
     77 DATA : ref_table_des TYPE REF TO cl_abap_structdescr.
     78 DATA : ef_is_unicode LIKE  /bdl/tasks-status.
     79 DATA:l_value TYPE string.
     80 DATA: l_index TYPE sy-tabix,
     81           lv_comt TYPE i,
     82           l_num TYPE i,
     83           p_len TYPE n.
     84 
     85      gs_layout-colwidth_optimize = 'X'.
     86      p_len = strlen( s_trx ).
     87       "查询ABAP 所有table表格
     88       SELECT dd02vv~TABNAME
     89                   dd03l~fieldname
     90                   dd03l~rollname
     91                   dd03l~inttype
     92         COUNT(*) FROM dd02vv
     93         INNER JOIN dd02l ON  dd02l~tabname EQ dd02vv~tabname
     94         INNER JOIN dd03l ON dd03l~tabname EQ dd02vv~tabname
     95 *        UP TO 10 ROWS
     96         INTO CORRESPONDING FIELDS OF TABLE get_table
     97         WHERE dd02vv~tabclass IN ('TRANSP','CLUSTER','POOL') AND " 透明表
     98                     dd02vv~contflag NE 'L' AND " 存储时资料的表格,空传送
     99                     dd02vv~as4local NOT IN (  'N','T' ) AND " 未启用,临时版本
    100                     ( dd03l~fieldname EQ p_field OR
    101                      dd03l~rollname EQ p_field ) AND
    102 *                    dd02vv~tabname NOT IN (  'DF50D' ,'DF40D' ) AND
    103                     dd03l~LENG >= p_len AND
    104                     is_gtt NE 'X' " X全局临时表 N 没有全局临时表
    105             GROUP BY dd02vv~tabname dd03l~fieldname
    106                             dd03l~rollname dd03l~inttype.
    107 
    108           "字符小写转换大写
    109           TRANSLATE p_field to UPPER CASE.
    110            "创建内表结构
    111           PERFORM new_teble.
    112           " 创建内表
    113           PERFORM create_dynamic_itab.
    114 
    115           LOOP AT get_table.
    116             l_index = sy-tabix.
    117             CLEAR: l_num.
    118            "查询表格内容是否有值
    119             SELECT COUNT(*) INTO l_num
    120                 UP TO 2 ROWS
    121                 FROM (get_table-tabname).
    122                IF sy-subrc <> 0.
    123                  DELETE get_table INDEX l_index.
    124                   CONTINUE.
    125                ENDIF.
    126 **      DESCRIBE TABLE get_table-tabname LINES index_z
    127 **      n = lines(get_table-tabname).
    128 *
    129 *      "***获取表结构
    130 *      CLEAR:ef_is_unicode,idetails[],xdetails,
    131 *                ref_table_des.
    132 *      " check the system is unicode or nonunicode
    133 *      CALL FUNCTION '/BDL/CHECK_UNICODE'
    134 *        IMPORTING
    135 *          ef_is_unicode = ef_is_unicode.
    136 **      get the structure of the table.
    137 *      ref_table_des ?=
    138 *      cl_abap_typedescr=>describe_by_name( get_table-tabname ).
    139 *      idetails[] = ref_table_des->components[].
    140 *
    141 *      "先获取每个table字段 与查找的table是否相同
    142 *    READ TABLE idetails INTO wa WITH KEY name = p_field BINARY SEARCH.
    143 *         IF sy-subrc = 0 .
    144       "--->1.abap 字典类型为 p x i f 8 字段调用动态 sql会down
    145       "--->2.为知 b s g y u v h V r l a e j k z 类型 调用动态 sql是否会down
    146         CLEAR:l_value.
    147         IF get_table-inttype EQ 'P' OR
    148            get_table-inttype EQ 'X' OR
    149            get_table-inttype EQ 'I' OR
    150            get_table-inttype EQ 'F' OR
    151            get_table-inttype EQ '8'.
    152 
    153 *             SELECT (p_field)
    154 *                  FROM (get_table-tabname)
    155 *                  INTO @l_value.
    156 
    157                     ASSIGN COMPONENT 'TABLE_NAME' OF
    158                                 STRUCTURE <dyn_wa> TO <dyn_field>.
    159 
    160                     <dyn_field> = get_table-tabname.
    161 
    162                     ASSIGN COMPONENT 'FIELD' OF
    163                                 STRUCTURE <dyn_wa> TO <dyn_field>.
    164 
    165                     <dyn_field> = get_table-fieldname.
    166 
    167                     ASSIGN COMPONENT 'VALUE' OF
    168                                 STRUCTURE <dyn_wa> TO <dyn_field>.
    169 
    170                     <dyn_field> = l_value .
    171 
    172                     ASSIGN COMPONENT 'ACCURACY' OF
    173                                 STRUCTURE <dyn_wa> TO <dyn_field>.
    174                     IF l_value EQ s_trx.
    175                       <dyn_field> = 1.
    176                     ELSE.
    177                       <dyn_field> = 0.
    178                     ENDIF.
    179 
    180                     APPEND <dyn_wa> TO <dyn_table>. CLEAR <dyn_wa>.
    181             ELSE.
    182                  CLEAR:where_tab[].
    183                 CONCATENATE get_table-fieldname ' LIKE ''%' s_trx '%'''
    184                                         INTO where_tab.
    185                 APPEND where_tab.
    186 
    187                SELECT SINGLE (get_table-fieldname)
    188                   FROM (get_table-tabname)
    189                   INTO @l_value
    190                   WHERE (where_tab).
    191                 IF sy-subrc = 0.
    192                     ASSIGN COMPONENT 'TABLE_NAME' OF
    193                                 STRUCTURE <dyn_wa> TO <dyn_field>.
    194 
    195                     <dyn_field> = get_table-tabname.
    196 
    197                     ASSIGN COMPONENT 'FIELD' OF
    198                                 STRUCTURE <dyn_wa> TO <dyn_field>.
    199 
    200                     <dyn_field> = get_table-fieldname.
    201 
    202                     ASSIGN COMPONENT 'VALUE' OF                                 
    203 STRUCTURE <dyn_wa> TO <dyn_field>.                     <dyn_field> 
    204 
    205 = l_value .                     
    206 
    207 ASSIGN COMPONENT 'ACCURACY' OF                                 
    208 STRUCTURE <dyn_wa> TO <dyn_field>.                     
    209 IF l_value EQ s_trx.                       <dyn_field> 
    210 = 1.                     
    211 ELSE.                       <dyn_field> 
    212 = 0.                     
    213 ENDIF.                     
    214 
    215 APPEND <dyn_wa> TO <dyn_table>. CLEAR <dyn_wa>.                 
    216 ENDIF.            
    217 ENDIF. 
    218 
    219 *        ENDIF.     
    220 ENDLOOP. 
    221 ENDFORM. 
    222 
    223 *&---------------------------------------------------------------------* 
    224 *&      form  create_dynamic_itab 
    225 *&---------------------------------------------------------------------* 
    226 *       text 
    227 *----------------------------------------------------------------------* 
    228 form create_dynamic_itab. 
    229 * create dynamic internal table and assign to fs   
    230 CALL METHOD cl_alv_table_create=>create_dynamic_table     
    231 EXPORTING       i_length_in_byte 
    232 = 'x'       it_fieldcatalog  
    233 = ifc     
    234 IMPORTING       ep_table         
    235 = dy_table.   
    236 ASSIGN dy_table->* TO <dyn_table>. 
    237 * create dynamic work area and assign to fs   
    238 CREATE DATA dy_line LIKE LINE OF <dyn_table>.   
    239 ASSIGN dy_line->* TO <dyn_wa>. 
    240 ENDFORM. 
    241 
    242 *&---------------------------------------------------------------------* 
    243 *& Form NEW_TEBLE 
    244 *&---------------------------------------------------------------------* 
    245 *& text 
    246 *&---------------------------------------------------------------------* 
    247 *& -->  p1        text 
    248 *& <--  p2        text 
    249 *&---------------------------------------------------------------------* 
    250 FORM NEW_TEBLE .   
    251 CLEAR xfc. 
    252 *      xfc-tabname = 'TABLE_NAME'.       xfc
    253 -fieldname = 'TABLE_NAME' .       xfc
    254 -datatype = 'C'.       xfc
    255 -inttype = 'C'.       xfc
    256 -intlen = 30.       
    257 "小数点 
    258 *      xfc-decimals = xdetails-decimals.       
    259 APPEND  xfc TO ifc.   
    260 CLEAR xfc. 
    261 *   xfc-tabname = 'TABLE_FIELD'.    xfc
    262 -fieldname = 'FIELD'."p_field .    xfc
    263 -datatype = 'C'.    xfc
    264 -inttype = 'C'.    xfc
    265 -intlen = 30.    
    266 "小数点 
    267 *   xfc-decimals = xdetails-decimals.    
    268 APPEND  xfc TO ifc.   
    269 
    270 CLEAR xfc. 
    271 *   xfc-tabname = 'TABLE_FIELD'.    xfc
    272 -fieldname = 'VALUE'.    xfc
    273 -datatype = 'C'.    xfc
    274 -inttype = 'C'.    xfc
    275 -intlen = 50.    
    276 "小数点 
    277 *   xfc-decimals = xdetails-decimals.    
    278 APPEND  xfc TO ifc.   
    279 
    280 CLEAR xfc. 
    281 *   xfc-tabname = 'TABLE_FIELD'.    xfc
    282 -fieldname = 'ACCURACY'.    xfc
    283 -datatype = 'P'.    xfc
    284 -inttype = 'P'.    xfc
    285 -intlen = 5.    
    286 "小数点    xfc
    287 -decimals = 2.    
    288 APPEND  xfc TO ifc. 
    289 ENDFORM. 
    290 
    291 FORM get_col.  
    292 DEFINE FILEDCAT.         gt_fieldcat
    293 -fieldname = &1.   "对应内表的字段名         gt_fieldcat
    294 -seltext_l = &2.    "输出列文本         gt_fieldcat
    295 -outputlen = &3.   "長度         
    296 APPEND gt_fieldcat.    
    297 END-OF-DEFINITION.    FILEDCAT 
    298 
    299 'TABLE_NAME'    '表格名称'  20.    FILEDCAT 
    300 'FIELD'                '表格字段'  20.    FILEDCAT 
    301 'VALUE'              ''  20.    FILEDCAT 
    302 'ACCURACY'        '值的精确度'  20. 
    303 ENDFORM. 
    304 
    305 *&---------------------------------------------------------------------* 
    306 *& Form ALV_SHOW 
    307 *&---------------------------------------------------------------------* 
    308 *& text 
    309 *&---------------------------------------------------------------------* 
    310 *& -->  p1        text 
    311 *& <--  p2        text 
    312 *&---------------------------------------------------------------------* 
    313 FORM ALV_SHOW .        
    314 
    315 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'         
    316 EXPORTING             I_CALLBACK_PROGRAM 
    317 = SY-REPID             IS_LAYOUT                   
    318 = GS_LAYOUT            IT_FIELDCAT                  
    319 = GT_FIELDCAT[]             I_SAVE                         
    320 = 'A'           
    321 TABLES           T_OUTTAB                     
    322 = <dyn_table>           
    323 EXCEPTIONS             PROGRAM_ERROR      
    324 = 1           
    325 OTHERS                       = 2. 
    326 ENDFORM.

  • 相关阅读:
    数据仓库建设随笔(2)
    实战剖析三层架构2:实例代码
    数据仓库建设随笔(1)
    如何正确地死磕一个问题
    finally块中的代码一定会执行吗
    eclipse中任务进度的使用
    如何在单元测试编码实现类的访问器?这里给出一个答案
    SplitContainer.SplitterDistance属性值设置应注意的与FixedPanel有关
    再谈ReportingService报表中数据源类型为存储过程的数据集如何使用多值参数
    工作流加载及本地通信服务常见的异常
  • 原文地址:https://www.cnblogs.com/Brokenshelltao/p/11670435.html
Copyright © 2020-2023  润新知