根據欄位名等查詢SAP的表或結構(程式程式碼)
在SAP中找表對初學者來說是很復雜的事情,所以為自己寫了一個找表的程式,程式碼如下:
*&---------------------------------------------------------------------*
*& Report Z_FIND_TABLE
*&---------------------------------------------------------------------*
*&查詢表或結構
*&
*&---------------------------------------------------------------------*
REPORT Z_FIND_TABLE.
TABLES: TADIR,TRDIRT,TSTC,DD03L,DD02L,DD04L,DD02T,DD03T,DD04T.
TYPE-POOLS: SLIS.
DATA: FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
FIELDCAT_LN LIKE LINE OF FIELDCAT,
EVENT_EXIT TYPE SLIS_T_EVENT_EXIT,
EVENT_EXIT_LN LIKE LINE OF EVENT_EXIT,
SORTCAT TYPE SLIS_T_SORTINFO_ALV,
SORTCAT_LN LIKE LINE OF SORTCAT,
EVENTCAT TYPE SLIS_T_EVENT,
EVENTCAT_LN LIKE LINE OF EVENTCAT.
DATA: GT_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.
DATA: GC_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'ALV_TOP_OF_PAGE'.
DATA : PS_LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA: BEGIN OF WA_ITAB,
TABNAME LIKE DD02L-TABNAME,
TABTEXT LIKE DD02T-DDTEXT,
TABCLASS LIKE DD02L-TABCLASS,
FIELDNAME LIKE DD03L-FIELDNAME,
FIELDTEXT LIKE DD03T-DDTEXT,
END OF WA_ITAB.
DATA: ITAB LIKE WA_ITAB OCCURS 0 WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: V_TNAME FOR DD02L-TABNAME, "表名
V_TABCLS FOR DD02L-TABCLASS DEFAULT 'TRANSP', "表型別
V_FNAME FOR DD03L-FIELDNAME. "欄位名
PARAMETERS: P_TTEXT LIKE DD02T-DDTEXT. "本
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
PARAMETERS: P_TAB AS CHECKBOX. "只查詢表記錄
SELECTION-SCREEN END OF BLOCK B2.
START-OF-SELECTION.
PERFORM GET_DATA.
REFRESH GT_LIST_TOP_OF_PAGE[].
PERFORM E04_COMMENT_BUILD .
CLEAR FIELDCAT.
REFRESH FIELDCAT.
PERFORM BUILD_FIELDCAT.
PERFORM BUILD_EVENTCAT.
PERFORM ALV_DISPLAY.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
*
*----------------------------------------------------------------------*
FORM GET_DATA .
CLEAR: ITAB[], ITAB.
CONCATENATE '%' P_TTEXT '%' INTO P_TTEXT.
IF P_TAB = 'X'.
SELECT A~TABNAME C~DDTEXT AS TABTEXT A~TABCLASS INTO CORRESPONDING FIELDS OF TABLE ITAB
FROM DD02L AS A
INNER JOIN DD03L AS B ON A~TABNAME = B~TABNAME
INNER JOIN DD02T AS C ON A~TABNAME = C~TABNAME AND C~DDLANGUAGE = SY-LANGU
LEFT JOIN DD03T AS D ON B~FIELDNAME = D~FIELDNAME AND D~DDLANGUAGE = SY-LANGU
WHERE A~TABNAME IN V_TNAME
AND A~TABCLASS IN V_TABCLS
AND B~FIELDNAME IN V_FNAME
AND C~DDTEXT LIKE P_TTEXT.
SORT ITAB BY TABNAME.
DELETE ADJACENT DUPLICATES FROM ITAB.
ELSE.
SELECT A~TABNAME C~DDTEXT AS TABTEXT A~TABCLASS B~FIELDNAME D~DDTEXT AS FIELDTEXT INTO CORRESPONDING FIELDS OF TABLE ITAB
FROM DD02L AS A
INNER JOIN DD03L AS B ON A~TABNAME = B~TABNAME
INNER JOIN DD02T AS C ON A~TABNAME = C~TABNAME AND C~DDLANGUAGE = SY-LANGU
LEFT JOIN DD03T AS D ON B~FIELDNAME = D~FIELDNAME AND D~DDLANGUAGE = SY-LANGU
WHERE A~TABNAME IN V_TNAME
AND A~TABCLASS IN V_TABCLS
AND B~FIELDNAME IN V_FNAME
AND C~DDTEXT LIKE P_TTEXT.
SORT ITAB BY TABNAME FIELDNAME.
DELETE ADJACENT DUPLICATES FROM ITAB.
ENDIF.
ENDFORM. " GET_DATA
*&--------------------------------------------------------------------*
*& FORM BUILD_EVENTCAT
*&--------------------------------------------------------------------*
* TEXT
*---------------------------------------------------------------------*
FORM BUILD_EVENTCAT.
DATA : LS_EVENT TYPE SLIS_ALV_EVENT.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = EVENTCAT.
READ TABLE EVENTCAT
WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
INTO LS_EVENT.
IF SY-SUBRC = 0.
MOVE GC_FORMNAME_TOP_OF_PAGE TO LS_EVENT-FORM.
APPEND LS_EVENT TO EVENTCAT.
ENDIF.
ENDFORM. " BUILD_EVENTCAT
*&----------------------------------------------------
*& FORM ALV_DISPLAY
* TEXT
*-----------------------------------------------------
* --> P1 TEXT
* < -- P2 TEXT
*-----------------------------------------------------
FORM ALV_DISPLAY.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = 'ZTEST_JIM_002'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IS_LAYOUT = PS_LAYOUT
IT_FIELDCAT = FIELDCAT
I_SAVE = 'A'
IT_EVENTS = EVENTCAT
TABLES
T_OUTTAB = ITAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. " ALV_DISPLAY
*&--------------------------------------------------------------------*
*& FORM ALV_TOP_OF_PAGE
*&--------------------------------------------------------------------*
* TEXT
*---------------------------------------------------------------------*
FORM ALV_TOP_OF_PAGE.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = GT_LIST_TOP_OF_PAGE.
* I_LOGO = 'SAPLOGO' .
* I_END_OF_LIST_GRID = 'X'.
ENDFORM. "ALV_TOP_OF_PAGE
*-----------------------------------------------------
* FORM BUILD_FIELDCAT
*-----------------------------------------------------
* ........
*-----------------------------------------------------
FORM BUILD_FIELDCAT.
DATA : COL_POS TYPE I VALUE 0.
PS_LAYOUT-GET_SELINFOS = 'X'.
PS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
PS_LAYOUT-DETAIL_POPUP = 'X'.
PS_LAYOUT-NO_KEYFIX = ''.
PS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
ADD 1 TO COL_POS.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-TABNAME = 'ITAB'.
FIELDCAT_LN-REF_FIELDNAME = 'TABNAME'.
FIELDCAT_LN-FIELDNAME = 'TABNAME '.
FIELDCAT_LN-KEY = 'X'.
FIELDCAT_LN-SELTEXT_L = '表格名'.
FIELDCAT_LN-COL_POS = COL_POS.
APPEND FIELDCAT_LN TO FIELDCAT.
ADD 1 TO COL_POS.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-TABNAME = 'ITAB'.
FIELDCAT_LN-REF_FIELDNAME = 'TABTEXT'.
FIELDCAT_LN-FIELDNAME = 'TABTEXT '.
FIELDCAT_LN-KEY = 'X'.
FIELDCAT_LN-SELTEXT_L = '表格說明'.
FIELDCAT_LN-COL_POS = COL_POS.
APPEND FIELDCAT_LN TO FIELDCAT.
ADD 1 TO COL_POS.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-TABNAME = 'ITAB'.
FIELDCAT_LN-REF_FIELDNAME = 'TABCLASS'.
FIELDCAT_LN-FIELDNAME = 'TABCLASS '.
FIELDCAT_LN-KEY = 'X'.
FIELDCAT_LN-SELTEXT_L = '表格類別'.
FIELDCAT_LN-COL_POS = COL_POS.
APPEND FIELDCAT_LN TO FIELDCAT.
IF P_TAB <> 'X'.
ADD 1 TO COL_POS.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-TABNAME = 'ITAB'.
FIELDCAT_LN-REF_FIELDNAME = 'FIELDNAME'.
FIELDCAT_LN-FIELDNAME = 'FIELDNAME'.
FIELDCAT_LN-KEY = 'X'.
FIELDCAT_LN-SELTEXT_L = '欄位名'.
FIELDCAT_LN-COL_POS = COL_POS.
APPEND FIELDCAT_LN TO FIELDCAT.
ADD 1 TO COL_POS.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-TABNAME = 'ITAB'.
FIELDCAT_LN-REF_FIELDNAME = 'FIELDTEXT'.
FIELDCAT_LN-FIELDNAME = 'FIELDTEXT'.
FIELDCAT_LN-KEY = 'X'.
FIELDCAT_LN-SELTEXT_L = '欄位說明'.
FIELDCAT_LN-COL_POS = COL_POS.
APPEND FIELDCAT_LN TO FIELDCAT.
ENDIF.
ENDFORM. "BUILD_FIELDCAT
*&--------------------------------------------------------------------*
*& FORM USER_COMMAND
*&--------------------------------------------------------------------*
* TEXT
*---------------------------------------------------------------------*
* -->UCOMM TEXT
* -->SELFIELD TEXT
*---------------------------------------------------------------------*
FORM USER_COMMAND USING UCOMM LIKE SY-UCOMM
SELFIELD TYPE SLIS_SELFIELD.
READ TABLE ITAB INDEX SELFIELD-TABINDEX.
CHECK SY-SUBRC = 0.
CASE UCOMM.
WHEN '&IC1'.
CASE SELFIELD-SEL_TAB_FIELD.
WHEN 'ITAB-TABNAME'.
SET PARAMETER ID 'DTB' FIELD ITAB-TABNAME.
CALL TRANSACTION 'SE11' AND SKIP FIRST SCREEN.
ENDCASE.
WHEN 'PRI' .
ENDCASE.
ENDFORM. "USER_COMMAND
*&---------------------------------------------------------------------*
*& Form E04_COMMENT_BUILD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
*
*----------------------------------------------------------------------*
FORM E04_COMMENT_BUILD .
DATA : LIST_LINE LIKE LINE OF GT_LIST_TOP_OF_PAGE.
DATA: I_COUNT TYPE I, C_COUNT(5) TYPE C.
LIST_LINE-TYP = 'H'.
LIST_LINE-KEY = ''.
DESCRIBE TABLE ITAB LINES I_COUNT.
C_COUNT = I_COUNT.
CONCATENATE '符合條件的記錄數:' C_COUNT INTO LIST_LINE-INFO.
APPEND LIST_LINE TO GT_LIST_TOP_OF_PAGE.
ENDFORM. " E04_COMMENT_BUILD
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9437124/viewspace-908162/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 根據欄位名查詢所有表
- 根據不同欄位,升降序排列查詢結果
- SQL server根據表名查詢表主鍵SQLServer
- Laravel ORM 中,根據關聯查詢的欄位值,對主查詢排名LaravelORM
- sql根據多個欄位查詢重複記錄SQL
- windows根據程式號查詢程式目錄Windows
- 根據表查詢索引資訊索引
- 根據父表查詢子表
- 「SAP技術」SAP WM 如何根據TR號碼查詢TO號碼?
- 獲取表的結構、欄位描述等
- sqlserver查詢一個庫所有表的欄位名及欄位型別SQLServer型別
- go根據字元動態設定結構體欄位名--hprose rpc應用Go字元結構體ROSRPC
- Oracle根據表名查詢表空間及資料檔案的地址Oracle
- Oracle查詢資料表結構(欄位,型別,大小,備註)Oracle型別
- linux下根據埠號查詢對應程式Linux
- 根據使用者名稱和密碼查詢使用者密碼
- mysql根據查詢結果批量更新多條資料(插入或更新)MySql
- 根據表結構,自動生成匯入指令碼指令碼
- 根據查詢條件批量修改表資料
- sqlserver新增查詢 表、欄位註釋,組合查詢所有的使用者、表名、表註釋SQLServer
- 根據作業系統程式號,查詢sql語句作業系統SQL
- 根據dom物件或其id獲取物件位置的程式碼物件
- 用自訂函式實現功能-------根據指定表名得到表的結構 (轉)函式
- mybatis根據表逆向自動化生成程式碼MyBatis
- Gridview繫結資料庫的欄位,根據條件欄位顏色改變View資料庫
- SAP定價的合計欄位的程式碼照抄
- 如何通過程式來查詢表名
- 查詢oracle表的資訊(表,欄位,約束,索引)Oracle索引
- list集合根據某欄位分組
- mybatis入門程式:mybatis根據使用者名稱稱模糊查詢使用者資訊MyBatis
- 根據PID查詢 sqlSQL
- SQL SERVER 查詢表的欄位名、資料型別和最大長度SQLServer資料型別
- 根據時間欄位匯入資料的問題總結
- 查詢表結構
- golang將切片或陣列根據某個欄位進行分組Golang陣列
- 根據結構基本相同的A表的值更新B表
- SAP RETAIL 根據Merchandise Category Hierarchy Level查詢物料清單AIGo
- jackson根據屬性名動態序列化物件欄位物件