ich habe mir ein Programm geschrieben, das prüfen soll, ob bestimmte Tabellen Z-Felder enthalten, die eigentlich gar nicht verwendet werden.
Klar ist, das Programm prüft nicht, ob die Felder in verschiedenen Programmen verwendet werden.
Es soll einfach nur prüfen, ob es eine Überlegung Wert ist bestimmte Felder aus den Programmen und Tabellen zu entfernen.
Ich habe das Problem, daß es beim SELECT kein WHERE Feld is initial gibt.
Zumindest nicht in open SQL - so wie ich das verstehe.
Was kann ich tun?
Vielleicht hat auch schon jemand ein solches Programm, das er mir zur Verfügung stellen könnte.
REPORT ZREPORT .
DATA: BEGIN OF gt_itabverz OCCURS 0,
tabname TYPE tabname,
END OF gt_itabverz.
TYPE-POOLS: slis.
DATA: gv_fieldname TYPE slis_fieldcat_alv-fieldname.
SELECT-OPTIONS: s_tabn FOR gt_itabverz-tabname DEFAULT 'Z*' OPTION cp.
SELECT-OPTIONS: s_fldnam FOR gv_fieldname DEFAULT 'Z*' OPTION cp.
START-OF-SELECTION.
PERFORM get_tabnames.
LOOP AT gt_itabverz.
PERFORM chk_tab USING gt_itabverz-tabname.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form get_tabnames
*&---------------------------------------------------------------------*
FORM get_tabnames .
SELECT tabname FROM dd02l INTO TABLE gt_itabverz WHERE tabname IN s_tabn
AND tabclass = 'TRANSP'.
ENDFORM. " get_tabnames
*&---------------------------------------------------------------------*
*& Form chk_tab
*&---------------------------------------------------------------------*
FORM chk_tab USING p_tabname LIKE gt_itabverz-tabname.
DATA: ct_fieldcat TYPE slis_t_fieldcat_alv.
FIELD-SYMBOLS: <cs_fieldcat> TYPE slis_fieldcat_alv.
DATA: lv_count TYPE i.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = p_tabname
CHANGING
ct_fieldcat = ct_fieldcat[].
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
LOOP AT ct_fieldcat ASSIGNING <cs_fieldcat> WHERE NOT fieldname IN s_fldnam.
DATA lv_where(100) TYPE c.
CONCATENATE 'NOT'
<cs_fieldcat>-fieldname
'= space'
INTO lv_where SEPARATED BY space.
SELECT SINGLE COUNT( * ) FROM (p_tabname) CLIENT SPECIFIED
WHERE (lv_where).
ENDLOOP.