SAP有个标准读任意表任何字段的BADI,不过好像只能最多读64个字段。
FUNCTION zf_read_element1.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(S_TAB) TYPE CHAR10
*" VALUE(S_FIELD1) TYPE CHAR10
*" VALUE(S_FIELD2) TYPE CHAR10
*" VALUE(S_FIELD3) TYPE CHAR10 OPTIONAL
*" TABLES
*" ITAB STRUCTURE ZFIELD1
*"----------------------------------------------------------------------
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(S_TAB) TYPE CHAR10
*" VALUE(S_FIELD1) TYPE CHAR10
*" VALUE(S_FIELD2) TYPE CHAR10
*" VALUE(S_FIELD3) TYPE CHAR10 OPTIONAL
*" TABLES
*" ITAB STRUCTURE ZFIELD1
*"----------------------------------------------------------------------
*&DESCRIPTION READ ELEMENT FROM TABLE
*&CREATE BY GOUCAIYUN
*&CREATE ON 2005.08.23
* TABLES:t002.
DATA: tableall(200) TYPE c.
DATA:field(70) TYPE c.
CONCATENATE s_field1 s_field2 s_field3 INTO field SEPARATED BY space.
CONCATENATE 'M_PRCTN' 'T024D' 'T024F' 'T001L' 'T001W' 'T001'
INTO tableall SEPARATED BY space.
*&CREATE BY GOUCAIYUN
*&CREATE ON 2005.08.23
* TABLES:t002.
DATA: tableall(200) TYPE c.
DATA:field(70) TYPE c.
CONCATENATE s_field1 s_field2 s_field3 INTO field SEPARATED BY space.
CONCATENATE 'M_PRCTN' 'T024D' 'T024F' 'T001L' 'T001W' 'T001'
INTO tableall SEPARATED BY space.
IF s_tab = 'TSKDT'.
SELECT DISTINCT (field)
INTO (itab-field1,itab-field2)
FROM (s_tab)
WHERE spras = '1' AND
tatyp = 'MWST'.
APPEND itab.
CLEAR itab.
ENDSELECT.
SELECT DISTINCT (field)
INTO (itab-field1,itab-field2)
FROM (s_tab)
WHERE spras = '1' AND
tatyp = 'MWST'.
APPEND itab.
CLEAR itab.
ENDSELECT.
ELSEIF s_tab = 'T002T'.
SELECT laiso sptxt
INTO (itab-field1,itab-field2)
FROM t002t
JOIN t002
ON t002t~sprsl = t002~spras
WHERE t002t~spras = '1'.
APPEND itab.
CLEAR itab.
ENDSELECT.
SELECT laiso sptxt
INTO (itab-field1,itab-field2)
FROM t002t
JOIN t002
ON t002t~sprsl = t002~spras
WHERE t002t~spras = '1'.
APPEND itab.
CLEAR itab.
ENDSELECT.
ELSEIF s_tab = 'T024'.
SELECT DISTINCT (field)
INTO (itab-field1,itab-field2)
FROM t024 WHERE ektel <> 'D' .
* WHERE werks = '1000'.
APPEND itab.
CLEAR itab.
ENDSELECT.
SELECT DISTINCT (field)
INTO (itab-field1,itab-field2)
FROM t024 WHERE ektel <> 'D' .
* WHERE werks = '1000'.
APPEND itab.
CLEAR itab.
ENDSELECT.
ELSEIF s_tab = 'KNA1'.
SELECT DISTINCT (field)
INTO (itab-field1,itab-field2)
FROM kna1 WHERE ktokd = 'TZ04'.
APPEND itab.
CLEAR itab.
ENDSELECT.
SELECT DISTINCT (field)
INTO (itab-field1,itab-field2)
FROM kna1 WHERE ktokd = 'TZ04'.
APPEND itab.
CLEAR itab.
ENDSELECT.
ELSEIF s_tab = 'TCURT'.
SELECT DISTINCT (field)
INTO (itab-field1,itab-field2)
FROM tcurt
WHERE waers NE 'CNY' AND spras = '1'.
APPEND itab.
CLEAR itab.
ENDSELECT.
SELECT DISTINCT (field)
INTO (itab-field1,itab-field2)
FROM tcurt
WHERE waers NE 'CNY' AND spras = '1'.
APPEND itab.
CLEAR itab.
ENDSELECT.
ELSEIF s_tab = 'TZONT'.
SELECT DISTINCT (field)
INTO (itab-field1,itab-field2,itab-field3)
FROM tzont
WHERE spras = '1'.
APPEND itab.
CLEAR itab.
ENDSELECT.
SELECT DISTINCT (field)
INTO (itab-field1,itab-field2,itab-field3)
FROM tzont
WHERE spras = '1'.
APPEND itab.
CLEAR itab.
ENDSELECT.
ELSEIF tableall CS s_tab.
SELECT DISTINCT (field)
INTO (itab-field1,itab-field2)
FROM (s_tab).
APPEND itab.
CLEAR itab.
ENDSELECT.
SELECT DISTINCT (field)
INTO (itab-field1,itab-field2)
FROM (s_tab).
APPEND itab.
CLEAR itab.
ENDSELECT.
ELSE.
SELECT DISTINCT (field)
INTO (itab-field1,itab-field2)
FROM (s_tab)
WHERE spras = '1'.
APPEND itab.
CLEAR itab.
ENDSELECT.
SELECT DISTINCT (field)
INTO (itab-field1,itab-field2)
FROM (s_tab)
WHERE spras = '1'.
APPEND itab.
CLEAR itab.
ENDSELECT.
ENDIF.
ENDFUNCTION.