
*&---------------------------------------------------------------------* *& Report ZME12_BDC1. *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT ZME12_BDC1. TABLES: makt,dd02t,marc. TYPE-POOLS : abap. DATA where_tab(80) OCCURS 10 WITH HEADER LINE. DATA where_tab2(80) OCCURS 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:wa LIKE idetails WITH HEADER LINE. DATA:BEGIN OF get_table OCCURS 0 , tabname TYPE string, "表名 tabddtext TYPE string, "表格名称 fieldname LIKE dd03l-fieldname, "字段名称 rollname LIKE dd03l-rollname, "资料元素 inttype LIKE dd03l-inttype, "类型 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. *IF cl_abap_matcher=>matches( * pattern = '^(-?[1-9]\d*(\.\d*[1-9])?)|(-?0\.\d*[1-9])$' * text = s_trx ) = abap_true. * ** WRITE '数字'. * CONCATENATE p_field ' EQ ''' s_trx '''' INTO where_tab. *ELSE. * ** WRITE '非数字'. * CONCATENATE p_field ' LIKE ''%' s_trx '%''' INTO where_tab. *ENDIF. * CONCATENATE p_field ' LIKE ''%' s_trx '%''' INTO where_tab. * APPEND where_tab. * CONCATENATE p_field ' NE ''''' INTO where_tab2. * APPEND where_tab2. * CLEAR where_tab2. 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 i, p_len TYPE n. gs_layout-colwidth_optimize = 'X'. p_len = strlen( s_trx ). * p_len = strlen( '40998' ). "查询ABAP 所有table表格 SELECT dd02vv~tabname dd03l~fieldname dd03l~rollname dd03l~inttype 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 OR dd03l~rollname EQ p_field ) AND * dd02vv~tabname NOT IN ( 'DF50D' ,'DF40D' ) AND dd03l~leng >= p_len AND is_gtt NE 'X' " X全局临时表 N 没有全局临时表 GROUP BY dd02vv~tabname dd03l~fieldname dd03l~rollname dd03l~inttype. "字符小写转换大写 TRANSLATE p_field TO UPPER CASE. "创建内表结构 PERFORM new_teble. " 创建内表 PERFORM create_dynamic_itab. LOOP AT get_table. l_index = sy-tabix. SELECT SINGLE ddtext INTO get_table-tabddtext FROM dd02t WHERE tabname = get_table-tabname AND ddlanguage = sy-langu. IF sy-subrc = 0. SELECT SINGLE ddtext INTO get_table-tabddtext FROM dd02t WHERE tabname = get_table-tabname. ENDIF. CLEAR: l_num. "查询表格内容是否有值 SELECT COUNT(*) INTO l_num UP TO 2 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 . "--->1.abap 字典类型为 p x i f 8 字段调用动态 sql会down "--->2.为知 b s g y u v h V r l a e j k z 类型 调用动态 sql是否会down CLEAR:l_value. IF get_table-inttype EQ 'P' OR get_table-inttype EQ 'X' OR get_table-inttype EQ 'I' OR get_table-inttype EQ 'F' OR get_table-inttype EQ '8'. * SELECT (p_field) * FROM (get_table-tabname) * INTO @l_value. ASSIGN COMPONENT 'TABLE_NAME' OF STRUCTURE <dyn_wa> TO <dyn_field>. <dyn_field> = get_table-tabname. ASSIGN COMPONENT 'TABLE_DDTEXT' OF STRUCTURE <dyn_wa> TO <dyn_field>. <dyn_field> = get_table-tabddtext. ASSIGN COMPONENT 'FIELD' OF STRUCTURE <dyn_wa> TO <dyn_field>. <dyn_field> = get_table-fieldname. ASSIGN COMPONENT 'VALUE' OF STRUCTURE <dyn_wa> TO <dyn_field>. <dyn_field> = l_value . ASSIGN COMPONENT 'ACCURACY' OF STRUCTURE <dyn_wa> TO <dyn_field>. IF l_value EQ s_trx. <dyn_field> = 1. ELSE. <dyn_field> = 0. ENDIF. APPEND <dyn_wa> TO <dyn_table>. CLEAR <dyn_wa>. ELSE. CLEAR:where_tab[]. CONCATENATE get_table-fieldname ' LIKE ''%' s_trx '%''' INTO where_tab. APPEND where_tab. SELECT SINGLE (get_table-fieldname) 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 'TABLE_DDTEXT' OF STRUCTURE <dyn_wa> TO <dyn_field>. <dyn_field> = get_table-tabddtext. ASSIGN COMPONENT 'FIELD' OF STRUCTURE <dyn_wa> TO <dyn_field>. <dyn_field> = get_table-fieldname. ASSIGN COMPONENT 'VALUE' OF STRUCTURE <dyn_wa> TO <dyn_field>. <dyn_field> = l_value . ASSIGN COMPONENT 'ACCURACY' OF STRUCTURE <dyn_wa> TO <dyn_field>. IF l_value EQ s_trx. <dyn_field> = 1. ELSE. <dyn_field> = 0. ENDIF. APPEND <dyn_wa> TO <dyn_table>. CLEAR <dyn_wa>. ENDIF. 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-fieldname = 'TABLE_DDTEXT' . xfc-datatype = 'C'. xfc-inttype = 'C'. xfc-intlen = 60. "小数点 * 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. CLEAR xfc. * xfc-tabname = 'TABLE_FIELD'. xfc-fieldname = 'ACCURACY'. xfc-datatype = 'P'. xfc-inttype = 'P'. xfc-intlen = 5. "小数点 xfc-decimals = 2. 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 'TABLE_DDTEXT' '表格名称' 20. filedcat 'FIELD' '表格字段' 20. filedcat 'VALUE' '值' 20. filedcat 'ACCURACY' '值的精确度' 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.
分类:
SAP ABAP
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏