************************************************************************
* Programm    : ZSTRDIR                                                *
* Themengebiet: SAP-SQL, Selektionsbildergänzung, Interaktives Rep.    *
* Beschreibung: Lesen von SAP-Tabellen mittels SAP-SQL.                *
*               Selektionen mit WHERE, Interne Tabellen,               *
*               Zeilenauswahl                                          *
* Art         : Beispielprogramm                                       *
* Autor       : Prof. Thomas Müller                                    *
************************************************************************

PROGRAM ZSTRDIR.

TABLES TRDIR.                         "Tabelle der ABAP-Programme
DATA BEGIN OF PROGTAB OCCURS 50.      "Interne Tabelle für Zeilen-
       INCLUDE STRUCTURE TRDIR.       "auswahlmöglichkeiten
DATA END OF PROGTAB.
DATA EDITIERBAR LIKE TRDIR-EDTX.
DATA ANZAHL TYPE I.
DATA ANTWORT(1).
PARAMETER: SUCH(20) DEFAULT 'Z*'.     "Suche Programmname
PARAMETER: AUTO(20) DEFAULT '*'.      "Suche Autor
*SELECT-OPTIONS RPKL FOR TRDIR-CLAS DEFAULT 'Z*'.
PARAMETER: RPKL(04) DEFAULT '*'.      "Suche Reportklasse
TRANSLATE SUCH USING '*%'.            "Zeichen * ist %
TRANSLATE AUTO USING '*%'.            "Zeichen * ist %
TRANSLATE RPKL USING '*%'.            "Zeichen * ist %

PERFORM HOLE_DATEIEN TABLES PROGTAB.
DESCRIBE TABLE PROGTAB LINES ANZAHL.
SORT PROGTAB BY CLAS NAME CNAM.
LOOP AT PROGTAB.
  WRITE: / PROGTAB-NAME, 12 PROGTAB-CNAM, 25 PROGTAB-UNAM,
           38 PROGTAB-UDAT DD/MM/YYYY, 52 PROGTAB-DBNA,
           58 PROGTAB-CLAS.
  IF PROGTAB-EDTX = 'X'.
    WRITE 65 'Gesperrt'.
    ELSE.
    WRITE 65 'nicht gesperrt'.
  ENDIF.
  WRITE 80 PROGTAB-EDTX AS CHECKBOX.
  HIDE PROGTAB-NAME.                    "Zeilenauswahl ermöglichen
ENDLOOP.

AT LINE-SELECTION.
  CHECK NOT PROGTAB-NAME IS INITIAL.
  IF PROGTAB-EDTX = 'X'.
    EDITIERBAR = 'X'.
    ELSE.
      EDITIERBAR = SPACE.
  ENDIF.
  CALL FUNCTION 'EDITOR_PROGRAM'
       EXPORTING APPID  = 'PG'
                DISPLAY = EDITIERBAR
                PROGRAM = PROGTAB-NAME.
   CLEAR PROGTAB-NAME.    "wieder auf Initialwert setzen

AT PF8.                                "F8 = Löschen der Datei
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
  EXPORTING DEFAULTOPTION = 'J'
            TEXTLINE1     = 'Soll das genannte Programm '
            TEXTLINE2     = 'wirklich gelöscht werden'
            TITEL         = PROGTAB-NAME
  IMPORTING ANSWER = ANTWORT.
CASE ANTWORT.
  WHEN 'J'.
    DELETE REPORT PROGTAB-NAME.      " Löschen des Reports
    DELETE PROGTAB INDEX SY-TABIX.   " Löschen der Tabellenzeile
*   SCROLL LIST TO PAGE 1.

ENDCASE.

TOP-OF-PAGE.
  WRITE: / SUCH, 12 AUTO, 'Anzahl der gefundenen Programme', ANZAHL.
  SKIP 1.

FORM HOLE_DATEIEN TABLES PT.
REFRESH PT.
  SELECT *                                   " Alle Attribute
  FROM   TRDIR                               " aus Tabelle TRDIR
  INTO   TABLE PT                            " in ITab pt
  WHERE  NAME LIKE SUCH AND CNAM LIKE AUTO   " Selektionskriterien
         AND CLAS LIKE RPKL.
ENDFORM.