SAP 查表程序(通过字段,元素,表名,描述)查表

本文介绍了一款用于SAP系统的ABAP程序,该程序能够帮助用户通过字段名或字段描述来查找表信息,包括表名、类别、描述等,简化了SAP表查找的过程。

对于对SAP不是很熟悉的人来说,查表是件痛苦的事,对于ABAPER菜鸟来说更是痛苦,为些我写了一个查表程序,大多数情况下我是用它来找表的。

*&***************************************************************
*& Finding the table thru a field or field description , tables
*& description,Element,etc.
*& Creation Date: 2008-01-24
*& Created BY : Michael Chow
*&****************************************************************
REPORT   ZKFTB.

PARAMETERS:   p_tb        LIKE DD02L-TABNAME,                         "Table Name
         p_tbTx    LIKE DD02T-DDTEXT,                         "Table Name
         p_fld    LIKE DD03L-FIELDNAME,                      "Field Name
         P_fldTx     LIKE DD04T-DDTEXT,
         p_cls    LIKE DD02L-TABCLASS DEFAULT 'TRANSP',       "Table category
         p_ROLL    LIKE DD03L-ROLLNAME,                          "Element
         P_value(80) TYPE C,                                     "Field Value
         p_lang    LIKE DD02T-DDLANGUAGE DEFAULT 'EN'.           "Language

TYPE-POOLS: SLIS.
DATA: WA_LINE TYPE SLIS_FIELDCAT_ALV.
DATA: IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV .
DATA: WA_LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA: IT_SORT TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE.


DATA:   BEGIN OF IT_Tab OCCURS 0,
         TABNAME     LIKE DD02L-TABNAME,
         TABCLASS LIKE DD02L-TABCLASS,
         TABTEXT     LIKE DD02T-DDTEXT,
         FIELDNAME LIKE DD03L-FIELDNAME,
         DATATYPE LIKE DD03L-DATATYPE,
         ROLLNAME LIKE DD04T-ROLLNAME,
         FILDTEXT LIKE DD04T-DDTEXT,
         DEL_IND(1)   TYPE C.             "Deleted indicator.

DATA:    END OF IT_Tab.

DATA: g_command_form TYPE slis_formname VALUE 'USER_COMMAND',
   it_event TYPE slis_t_event,
   wa_event TYPE slis_alv_event,
   g_repid LIKE sy-repid.

INITIALIZATION.

g_repid = sy-repid.

START-OF-SELECTION.

PERFORM PERFORMSQL.
PERFORM ALV_FIELDS.
PERFORM Dispaly_ALV.

END-OF-SELECTION.

*e+ Delete reducing Informaton from Internal Table
FORM Clean_DATA.

*DATA: v_value TYPE REF TO DATA,
*    V_INDEX like sy-tabix.
*
*FIELD-SYMBOLS <FS> TYPE ANY.
*
*
*if ( p_value is not initial )
*   AND ( p_fld   is not initial )
*   AND LINES( IT_TAB ) > 0.
*   Loop at it_tab where Fieldname = p_fld.
* V_INDEX = SY-TABIX.
* if sy-subrc NE 0.
*    it_tab-del_ind = 'X'.
*    modify it_tab index v_index.
* else.
*    ASSIGN it_tab-FIELDNAME TO <FS>.
*
*





ENDFORM.



FORM Dispaly_ALV.
DATA:
      report_name    LIKE sy-repid,
      alvlo_stb        TYPE slis_layout_alv.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
   IT_FIELDCAT = IT_FIELDCAT[]
   IS_LAYOUT     = WA_LAYOUT
   I_callback_program    = g_repid
   i_callback_user_command = g_command_form
   it_events = it_event
   IT_SORT    = IT_SORT[]
    TABLES
   T_OUTTAB    = IT_Tab
EXCEPTIONS
   PROGRAM_ERROR = 1
   OTHERS        = 2.
   IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
   ENDIF.

ENDFORM.

DEFINE APPEND_ALV_FIELD.
   CLEAR WA_LINE .
   WA_LINE-FIELDNAME = &1.
   WA_LINE-SELTEXT_L = &2.
   WA_LINE-SELTEXT_M = &2.
   WA_LINE-SELTEXT_S = &2.
   WA_LINE-CFIELDNAME = &3.
   WA_LINE-TECH = &4.
   WA_LINE-QFIELDNAME = &5.
   WA_LINE-EDIT_MASK   = &6.
   WA_LINE-OUTPUTLEN   = &7.
   WA_LINE-DDICTXT = 'L'.
   APPEND WA_LINE TO IT_FIELDCAT.
END-OF-DEFINITION .

FORM ALV_FIELDS .
   CLEAR IT_FIELDCAT[].
   APPEND_ALV_FIELD 'TABNAME' TEXT-H01 '' '' ''   '' 10.
   APPEND_ALV_FIELD 'TABCLASS'   TEXT-H02 '' '' ''   '' 10.
   APPEND_ALV_FIELD 'TABTEXT' TEXT-H03 '' '' ''   '' 30.
   APPEND_ALV_FIELD 'FIELDNAME' TEXT-H04 '' '' ''   '' 15.
   APPEND_ALV_FIELD 'DATATYPE'   TEXT-H08 '' '' ''   '' 10.
   APPEND_ALV_FIELD 'ROLLNAME'   TEXT-H05 '' '' ''   '' 15.
   APPEND_ALV_FIELD 'FILDTEXT'   TEXT-H06 '' '' ''   '' 30.
*   APPEND_ALV_FIELD 'Language'   TEXT-H07 '' '' ''   '' 10.

ENDFORM.                    " ALV_FIELDS


FORM PERFORMSQL.

   DATA: SQLstr(72) TYPE c,
   itabSQL LIKE TABLE OF SQLstr,
   v_text(30) TYPE C.

CONCATENATE SPACE 't2~DDLANGUAGE = ''' p_lang   '''' INTO   SQLstr.
CONCATENATE SPACE 't4~DDLANGUAGE = ''' p_lang   '''' INTO   SQLstr.
APPEND   SQLstr TO   itabSQL.

IF ( p_tb IS NOT INITIAL ).
CONCATENATE SPACE 'AND t1~TABNAME = ''' p_tb   '''' INTO   SQLstr.
APPEND   SQLstr TO   itabSQL.
ENDIF.

IF ( p_tbtx is not initial   ).
clear v_text.
concatenate   p_tbtx '%' into v_text.
CONCATENATE SPACE 'AND t2~DDTEXT Like   ''' v_text   '''' INTO   SQLstr.
APPEND   SQLstr TO   itabSQL.
ENDIF.

IF ( p_fld is not initial ).
CONCATENATE SPACE 'AND t3~FIELDNAME = ''' p_fld '''' INTO   SQLstr.
APPEND   SQLstr TO   itabSQL.
ENDIF.

if ( p_fldtx is not initial ).
clear v_text.
concatenate   P_fldTx   '%' into v_text.
CONCATENATE SPACE 'AND t4~DDTEXT Like   ''' v_text   ''''   INTO   SQLstr.
APPEND   SQLstr TO   itabSQL.
ENDIF.

IF ( p_cls is not initial ).
CONCATENATE SPACE 'AND t1~TABCLASS = ''' p_cls '''' INTO   SQLstr.
APPEND   SQLstr TO   itabSQL.
ENDIF.

IF ( p_ROLL is not initial   ).
clear v_text.
concatenate   p_ROLL '%' into v_text.
CONCATENATE SPACE 'AND t3~ROLLNAME Like   ''' v_text   '''' INTO   SQLstr.
APPEND   SQLstr TO   itabSQL.
ENDIF.


SELECT DISTINCT T1~TABNAME t1~TABCLASS t2~DDTEXT AS TABTEXT
         T3~FIELDNAME t3~DATATYPE t3~ROLLNAME
         t4~DDTEXT as FILDTEXT
         INTO Corresponding fields of table it_tab
         FROM   DD02L AS t1
         INNER JOIN DD02T as t2
         ON t1~TABNAME = t2~TABNAME
         INNER JOIN DD03L AS t3
         ON t2~TABNAME = t3~TABNAME
         INNER JOIN DD04T as t4
         ON t3~ROLLNAME = t4~ROLLNAME
         AND t2~DDLANGUAGE = t4~DDLANGUAGE
         WHERE (itabSQL).

sort it_tab by tabname fieldname.


ENDFORM.

FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN '&IC1'. "doubleclick
READ TABLE it_tab INDEX rs_selfield-tabindex.
IF sy-subrc = 0.
IF rs_selfield-fieldname EQ 'TABNAME' AND
   it_TAB-TABNAME IS NOT INITIAL.
SET PARAMETER ID 'DTB' FIELD it_TAB-TABNAME .
CALL TRANSACTION 'SE11' AND SKIP FIRST SCREEN.
CLEAR r_ucomm.
ENDIF.
ENDIF.
ENDCASE.

ENDFORM. "user_command

<think> 嗯,用户这次问的是在SAP中如何查询自定义字段相关的编程信息。从对话历史看,用户之前提供的引用内容涉及S4HANAMSEG扩展字段、BP屏幕增强、字段访问追踪等多个技术点,但当前问题聚焦在"查询方法"上,说明用户可能需要开发或维护方面的技术指引。 用户可能是SAP ABAP开发人员或系统维护顾问,正面临实际开发任务。ta的深层需求可能是:1)快速定位自定义字段的技术位置;2)获取标准化的查询工具使用方式;3)了解不同查询方法的适用场景。情绪上应该比较急切,因为这类问题通常出现在故障排查或紧急开发时。 从技术角度需要分层解答: 首先明确自定义字段的两种存在形式——通过增强添加的字段(如MSEG扩展)和标准对象的自定义字段配置(如BP屏幕增强)。这两种情况的查询方式完全不同。 对于结构中的自定义字段: - 最核心的工具是SE11数据字典,这是所有ABAP开发的基础。需要强调Z*/Y*命规范,因为SAP约定自定义对象必须以此开头 - SE16N事务码的实用技巧容易被忽略,特别是添加自定义字段到选择屏幕的功能,这对业务用户很友好 - 要注意关联关系,比如BP模块的自定义字段实际存储在BUT000,但界面在BP事务码里 对于配置型自定义字段: - SPRO路径查询是关键,用户可能不知道增强点名称通常包含"USER"字样 - 字段访问追踪功能(事务码SATT)是个宝藏工具,但引用[2]提到它主要用于安全审计,这里需要说明其技术查询价值 - Liquid UI这类第三方工具虽然方便,但属于付费方案不作为首选推荐 最后考虑用户可能的后续问题,准备了三个延伸方向:性能优化建议(大容量查询)、调试技巧(字段值追踪)、权限问题(查看权限不足的情况)。特意在问题3提到安全审计,因为引用[2]的字段访问追踪功能可能被用户忽略其技术价值。 补充一点细节:在ABAP演示代码中使用内联注释说明关键参数,因为实际开发中SCUSTOM结构需要替换为用户真实,这个细节能避免新手错误。 </think> 在SAP系统中查询自定义字段相关编程信息,可通过以下分层方法实现: --- ### 一、**基础查询(开发层面)** 1. **数据字典查询(SE11)** - 执行事务码 `SE11`,输入(如`MSEG`、`BUT000`等)。 - 定位字段,**自定义字段通常以`Z`或`Y`开头**(如`Z_INVOICE_NAME`)。 - **关键操作**: ```abap 点击字段 → 按F1 → 选择“技术设置” 查看字段所属的增强结构(如CI_MSEG)或附加结构(如ZXXX_MSEG) ``` - 通过结构可追溯关联的ABAP程序或增强点。 2. **程序源码检索(SE38/SE80)** - 若已知字段,通过`SE38`执行代码搜索: ```abap SELECT * FROM () WHERE (字段) = 'XXX' ``` - 使用`WHERE-USED LIST`工具(Shift+F2)追踪字段程序中的调用位置。 --- ### 二、**增强关联查询(配置层面)** 1. **增强点定位(SMOD/CMOD)** - 通过事务码 `SMOD`,输入增强点名称(如`EXIT_SAPMM07E_001`)。 - 检查包含文件(如`ZXM07UXX`),定位字段增强逻辑。 - **示例流程**: ``` SMOD → 输入增强点 → 查看包含文件 → SE38打开源码 ``` 2. **字段目录工具(SE91/SE84)** - 使用`SE84`(存储库信息系统): ``` 路径: ABAP工作台 → 基本组件 → 数据元素 → 按字段搜索 ``` - 查看字段的技术属性及关联数据域。 --- ### 三、**业务场景定向查询** 1. **BP自定义字段(Business Partner)** - 结合引用[5]的BDT技术方案: - 事务码 `SE24` 检查类`CL_IM_LE_SHP_DELIVERY_PROC`(示例)。 - 在方法`SAVE_DATA`中追踪字段保存逻辑。 - 关键关联: ```mermaid graph LR BP界面字段 --> BUT000 BUT000 --> CVI_VEND_LINK --> LFA1(供应商主数据) BUT000 --> CVI_CUST_LINK --> KNA1(客户主数据) ``` 2. **S/4 HANA Cloud扩展字段** - 通过自定义业务对象(Custom Business Objects): - 事务码 `SCOV` 检查扩展字段的CDS视图关联。 - 云端扩展需使用**In-App Extension**工具(见引用[4])。 --- ### 四、**高级工具** 1. **字段访问追踪(SATT)** - 事务码 `SATT` → 激活追踪模板 `SAP_BC_FIELD_USAGE`。 - 监控字段访问记录(用户、时间、值变化),需安全权限(参考引用[2])。 2. **动态SQL分析(ST05)** - 开启SQL跟踪 → 操作含自定义字段的事务 → 分析`SELECT`语句中的字段。 --- ### 疑难场景处理 - **字段未保存问题**(引用[5]案例): - 检查BDT增强的`DSAVE`事件是否调用`BUP_MEMORY_BUT000_FILL`。 - 验证字段是否在`BUT000`增强结构(如`CI_BUT000`)中注册。 --- ### 总结流程 ```mermaid graph TD A[已知自定义字段] --> B[SE11查表结构] A --> C[SE84搜索数据元素] B --> D{是否在附加结构?} D --是--> E[查找增强结构关联程序] D --否--> F[SE16N直接查询数据] C --> G[定位技术属性] G --> H[用WHERE-USED LIST追踪代码] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值