*---------------------------------------------------------------------*
*                       Z _ B J H _ A L V _ O O                       *
*                                                                     *
*                  Autor: Bernd Haase (BJH Software)                  *
*---------------------------------------------------------------------*
* ALV = ABAP List Viewer. Struktur und Funktionsbausteine für das     *
* einfache Anzeigen von Reporting-Liststrukturen, ohne den Aufbau     *
* über Write-Anweisung und Berechnung der Position durchführen zu     *
* müssen.                                                             *
*---------------------------------------------------------------------*
* Beispielprogramm zur Anzeige von Bestellköpfen und deren Positionen,*
* ergänzt um ein grafisches Element. Hotspot auf die Bestellnummer    *
* Anmerkung: ALV über Funktionsbaustein im Programm z_bjh_alv         *
*---------------------------------------------------------------------*
* (A) Inner Join(2), FS, ALV OO                                       *
*---------------------------------------------------------------------*
* 18.05.2005 BHaa: Programm kopiert aus z_bjh_alv                     *
* 23.05.2005 BHaa: In der Toolbar im ALV eigene Funktion als Test     *
*---------------------------------------------------------------------*
REPORT  z_bjh_alv_oo  .

INCLUDE <icon>.

TABLES:
 ekko,       "Einkaufsbelegkopf
 ekpo.       "Einkaufsbelegposition

DATA:
* interner Parameter
 anzahl(5) TYPE n.

***************
* Dynpro 9000 *
***************
* Dynpro für den Container, in dem der ALV angezeigt wird
DATA:
 erster_lauf(1) TYPE c,
 okcode LIKE sy-ucomm.

*****************
* ALV Variablen *
*****************
* Type Pool, wo alle Tabellen und Strukturen definiert sind, welche für
* die Listanzeige über ALV (ABAP List Viewer) benötigt werden
TYPE-POOLS:
 slis.
* ALV typische Variablen
INCLUDE miolxtop.

* Klasse für Ereignisse vorankündigen (wegen Compiler)
CLASS lcl_ereignisse DEFINITION DEFERRED.

DATA:
* Container-Aufbau für ALV im OO-Modus
 c_grid         TYPE REF TO cl_gui_docking_container,
 o_grid         TYPE REF TO cl_gui_alv_grid,
* Ereignis-Klasse für Aktionen im ALV
 event_receiver TYPE REF TO lcl_ereignisse.

DATA:
* Beschreibung der Attribute zu einem Feld
 gs_fieldcat TYPE lvc_s_fcat,
 gt_fieldcat TYPE lvc_t_fcat,
* Sortierfolge Feld
 gs_sort     TYPE lvc_s_sort,
 gt_sort     TYPE lvc_t_sort,
* Eigenschaften der Liste, Beschreibung des LayOuts
 gs_layout   TYPE lvc_s_layo,
* Variante zur Layoutgestaltung
 gs_variante TYPE disvariant,
* Name des Programmes und Dynpro für den ALV-Container
 prog_name   LIKE sy-repid,
 dynpro_alv  LIKE sy-dynnr VALUE '9000'.

**************
* Bestellung *
**************
* für das Beispiel dient die Bestellpositionstabelle
DATA:
* Werteinhalte für die auszugebende Liste. Achtung: anscheinend können
* geschachtelte Strukturen nicht ordnungsgemäß ausgegeben werden,
* deswegen der Umweg über ausw-Struktur und move-corresponding
 BEGIN OF wa_alv,
   ebeln LIKE ekko-ebeln,
   ebelp LIKE ekpo-ebelp,
   bstyp LIKE ekko-bstyp,
   lifnr LIKE ekko-lifnr,
   matnr LIKE ekpo-matnr,
   meins LIKE ekpo-meins,
   menge LIKE ekpo-menge,
   werks LIKE ekpo-werks,
   netwr LIKE ekpo-netwr,
* Zusatzfelder, die berechnet werden
   selected(1) TYPE c,
   ampel(20) TYPE c,
* Pushbutton mit einem grafischen Symbol
   pb LIKE icons-text,
 END OF wa_alv,
 itab_alv LIKE TABLE OF wa_alv.

FIELD-SYMBOLS:
 <fs_alv> LIKE wa_alv.

*---------------------------------------------------------------------*
*                       CLASS  DEFINITION                             *
*                                                                     *
*                  L C L _ E R E I G N I S S E                        *
*---------------------------------------------------------------------*
* Definition, welche Ereignisse im ALV vorkommen können.              *
*---------------------------------------------------------------------*
CLASS lcl_ereignisse DEFINITION.
 PUBLIC SECTION.

   METHODS:

   alv_init_toolbar
       FOR EVENT toolbar OF cl_gui_alv_grid
       IMPORTING
            e_object
            e_interactive,

   alv_hotspot
       FOR EVENT hotspot_click OF cl_gui_alv_grid
       IMPORTING
           e_row_id
           e_column_id
           es_row_no,

   button_toolbar
       FOR EVENT user_command OF cl_gui_alv_grid
       IMPORTING
            e_ucomm,

   button_click
       FOR EVENT button_click  OF cl_gui_alv_grid
       IMPORTING
            es_col_id
            es_row_no.

ENDCLASS.

*---------------------------------------------------------------------*
*                       CLASS  IMPLEMENTATION                         *
*                                                                     *
*                    L C L _ E R E I G N I S S E                      *
*---------------------------------------------------------------------*
CLASS lcl_ereignisse IMPLEMENTATION.

*---------------------------------------------------------------------*
*                       CLASS  IMPLEMENTATION                         *
*                                                                     *
*                    L C L _ E R E I G N I S S E                      *
*                                                                     *
*                  A L V _ I N I T _ T O O L B A R                    *
*---------------------------------------------------------------------*
* Zusatzfunktionen in der ALV-Toolbar definieren.                     *
*---------------------------------------------------------------------*
 METHOD alv_init_toolbar.

   DATA: gs_toolbar TYPE stb_button.

   CLEAR gs_toolbar.
* Separator / Trennlinie (s. Wertebereich in der Domäne)
   MOVE 3 TO gs_toolbar-butn_type.
   APPEND gs_toolbar TO e_object->mt_toolbar.

* Funktion einbauen. Es soll in der ALV-Toolbar ein neuer Button
* generiert werden, der anwendungsspeziell ist
   CLEAR gs_toolbar.
   MOVE 'ALV_FKT_1'      TO gs_toolbar-function.
   MOVE icon_generate    TO gs_toolbar-icon.
   MOVE 'Testfunktion 1' TO gs_toolbar-quickinfo.
   MOVE ' Test'          TO gs_toolbar-text.
   MOVE ' '              TO gs_toolbar-disabled.
   APPEND gs_toolbar TO e_object->mt_toolbar.

 ENDMETHOD.

*---------------------------------------------------------------------*
*                       CLASS  IMPLEMENTATION                         *
*                                                                     *
*                    L C L _ E R E I G N I S S E                      *
*                                                                     *
*                      B U T T O N _ C L I C K                        *
*---------------------------------------------------------------------*
* in der ALV-Matrix wurde der Pushbutton gedrückt. Die Grafik des     *
* Druckknopfes soll die Unterschriftenregelung bei Bestellungen symbo-*
* lisieren. Wenn dort gedrückt wird, soll in die Bestellung, die zu   *
* dieser Position gehört, gesprungen werden.                          *
*---------------------------------------------------------------------*
 METHOD button_click.

* welche Zeile wurde gedrückt.
   READ TABLE itab_alv INTO wa_alv INDEX es_row_no-row_id.
   IF sy-subrc = 0.
     CASE es_col_id-fieldname.
       WHEN 'PB'.
* Pushbutton mit der Unterschriftenregelung angeklickt. Hier im Bei-
* spiel wird nun in die Bestellung verzweigt
         IF NOT wa_alv-ebeln IS INITIAL.
           CALL FUNCTION 'ME_DISPLAY_PURCHASE_DOCUMENT'
                EXPORTING
                     i_ebeln = wa_alv-ebeln
                     i_enjoy = 'X'
                     i_bstyp = wa_alv-bstyp
                EXCEPTIONS
                     OTHERS  = 1.
           IF sy-subrc <> 0.
             MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
                     WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
           ENDIF.
         ENDIF.
     ENDCASE.
   ENDIF.

 ENDMETHOD.

*---------------------------------------------------------------------*
*                       CLASS  IMPLEMENTATION                         *
*                                                                     *
*                    L C L _ E R E I G N I S S E                      *
*                                                                     *
*                    B U T T O N _ T O O L B A R                      *
*---------------------------------------------------------------------*
* Zusatzfunktionen in der Toolbar des ALV. Diese werden hier abgefragt*
* und entsprechend reagiert.                                          *
*---------------------------------------------------------------------*
 METHOD button_toolbar.

   CASE e_ucomm.
     WHEN 'ALV_FKT_1'.
* Aktionen zu dieser Funktion. Keine hinterlegt, es soll nur gezeigt
* werden, wie das Durchsteuern von gedrückter Taste bis zur Ausführung
* programmtechnisch umzusetzen ist
       MOVE e_ucomm TO e_ucomm.
   ENDCASE.

 ENDMETHOD.

*---------------------------------------------------------------------*
*                       CLASS  IMPLEMENTATION                         *
*                                                                     *
*                    L C L _ E R E I G N I S S E                      *
*                                                                     *
*                       A L V _ H O T S P O T                         *
*---------------------------------------------------------------------*
* ein im ALV unterlegtes Feld mit Hotspot-Variante ist gedrückt       *
* worden. Auswertung, welches Feld in welcher Zeile und entsprechend  *
* des Feldes weitere Verzweigungen oder Absprünge durchführen         *
*---------------------------------------------------------------------*
 METHOD alv_hotspot.

   READ TABLE itab_alv INTO wa_alv INDEX es_row_no-row_id.
   IF sy-subrc = 0.
     CASE e_column_id-fieldname.
* Doppelklick auf das Material. Springen in den Materialstamm. Als
* Sichten sind Grunddaten und Einkauf eingestellt
       WHEN 'MATNR'.
         IF NOT wa_alv-matnr IS INITIAL.
           SET PARAMETER ID 'MAT' FIELD wa_alv-matnr.
           SET PARAMETER ID 'WRK' FIELD wa_alv-werks.
           SET PARAMETER ID 'LAG' FIELD '    '.
* B=Buchhaltung1, D=Disposition1, E=Einkauf, K=Grunddaten,
* L=Werksdaten / Lagerung 1, X=Werksbestand, Z=
           SET PARAMETER ID 'MXX' FIELD 'KE'.
           CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
         ENDIF.
     ENDCASE.
   ENDIF.

 ENDMETHOD.

ENDCLASS.

*---------------------------------------------------------------------*
*                                                                     *
*                 A u s w a h l b i l d s c h i r m                   *
*                                                                     *
*---------------------------------------------------------------------*
* Auswahlbildschirm zur Eingrenzung der Bestellungen
SELECTION-SCREEN: BEGIN OF BLOCK a1 WITH FRAME TITLE text-901.
SELECT-OPTIONS:
* Lieferantennummer
 solifnr FOR ekko-lifnr,
* Bestellnummern
 soebeln FOR ekko-ebeln,
* Materialnummern
 somatnr FOR ekpo-matnr.
SELECTION-SCREEN: END OF BLOCK a1.

INITIALIZATION.
 MOVE '1' TO erster_lauf.
 MOVE sy-repid TO prog_name.

***********************************************************************
*                                                                     *
*                     P R O G R A M M S T A R T                       *
*                                                                     *
***********************************************************************
* Dynpro basierte Methodik, deswegen kein start-of-selection
AT SELECTION-SCREEN.

* Selektion der Datensätze auf Basis der Vorabauswahl
 SELECT
   ij_ekko~ebeln
   ij_ekpo~ebelp
   ij_ekko~bstyp
   ij_ekko~lifnr
   ij_ekpo~matnr
   ij_ekpo~meins
   ij_ekpo~menge
   ij_ekpo~werks
   ij_ekpo~netwr
 FROM       ekko AS ij_ekko
 INNER JOIN ekpo AS ij_ekpo
 ON    ij_ekko~ebeln = ij_ekpo~ebeln
 INTO TABLE itab_alv
 WHERE ij_ekko~ebeln IN soebeln
 AND   ij_ekko~lifnr IN solifnr
 AND   ij_ekko~loekz =  ' '
 AND   ij_ekpo~matnr IN somatnr
 AND   ij_ekpo~loekz =  ' '.

 LOOP AT itab_alv ASSIGNING <fs_alv>.
* zu Beispielzwecken Ampel einblenden, die an den Preis gekoppelt ist
* Pushbutton soll die Unterschrifthierarchie symbolisieren, wer alles
* unterschreiben muß
   IF <fs_alv>-netwr > 10000.
     MOVE icon_red_light TO <fs_alv>-ampel.
* Symbolisiert: Unterschrift durch Vorgesetzen und Abteilungsleiter
     MOVE icon_shared_position TO <fs_alv>-pb.
   ELSE.
     IF <fs_alv>-netwr > 300.
       MOVE icon_yellow_light TO <fs_alv>-ampel.
* Symbolisiert: Unterschrift durch Vorgesetzen
       MOVE icon_position_hr TO <fs_alv>-pb.
     ELSE.
       MOVE icon_green_light  TO <fs_alv>-ampel.
* Keine weitere Unterschrift von nöten.
* Natürlich könnten statt der Grafik auch Texte angezeigt werden
       MOVE icon_space TO <fs_alv>-pb.
*       MOVE 'keine'    TO -pb.
     ENDIF.
   ENDIF.
 ENDLOOP.

 DESCRIBE TABLE itab_alv LINES anzahl.
* es wurden Datensätze selektiert
 IF anzahl > 0.
* Ausgabeformat bestimmen
   PERFORM upro-alv_init_layout.
* die Ausgabetabelle aufbauen
   PERFORM upro-alv_init_fieldcat.
* Sortierfolge festlegen
   PERFORM upro-alv_init_sort.

* Liste nach Bestellnummer sortieren
   SORT itab_alv BY ebeln ebelp ASCENDING.

* Bildschirm wecheln, in dem der ALV-Container liegt
   LEAVE TO SCREEN dynpro_alv.

 ENDIF.

END-OF-SELECTION.
 EXIT.

*---------------------------------------------------------------------*
* Module               S T A T U S _ 9 0 0 0                   OUTPUT *
*---------------------------------------------------------------------*
* Dynpro, welches den ALV sichtbar macht, wechseln                    *
* OO-Methodik für den ALV aktivieren                                  *
*---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.

* Aktionszeile, hinterlegt sind nur zurück, Programmende und Abbruch
 SET PF-STATUS '9000'.

* SET TITLEBAR 'xxx'.

 PERFORM upro-alv_oo_vorbereitung.

ENDMODULE.

*---------------------------------------------------------------------*
* Module          D Y N P R O _ C O M M A N D _ 9 0 0 0         INPUT *
*---------------------------------------------------------------------*
* Aktionen, die im Container-Dynpro ausgelöst wurden. Hinterlegt sind *
* nur die Zurückgehe- und Abbruchaktionen                             *
*---------------------------------------------------------------------*
MODULE upro-dynpro_command_9000 INPUT.

 CASE okcode.
   WHEN 'ZURU'
   OR   '&F12'.
     LEAVE TO SCREEN '1000'.
   WHEN 'ENDE'
   OR   '&F15'.
     LEAVE PROGRAM.
 ENDCASE.

ENDMODULE.

*---------------------------------------------------------------------*
*                    A L V _ I N I T _ L A Y O U T                    *
*---------------------------------------------------------------------*
* allgemeines Layout für die Aufbereitung im ALV bestimmen und para-  *
* metrisieren.                                                        *
*---------------------------------------------------------------------*
FORM upro-alv_init_layout.

 CLEAR: gs_layout.

* Format der Ausgabe definieren. Es sind nur die Attribute besetzt, die
* nicht dem Initialisierungszustand entsprechen
 gs_layout-zebra                = ' '.  "Zeilen straffiert darstellen

* Merge von Zellen ausschalten. Ohne Zusammenfassen von Einträgen bei
* Sortierung. Achtung: FB=REUSE_ALV_TRANSFER_DATA Wert=N setzen. Prüfen
* ob dieses auch in CL-Methodik so ist !
 gs_layout-no_merging           = 'N'.

* Aktionscode beim Doppelklick, bei Attributen, wo Hotspot gesetzt ist
* F2 sollte im Gui-Status auch mit ANZ belegt sein (Variante LIST)
*  gs_layout-f2code = 'ANZ'.

* Varianten sichern zulassen
 CLEAR: gs_variante.
 MOVE sy-repid  TO prog_name.
 MOVE prog_name TO gs_variante-report.
* MOVE sy-uname  TO gs_variante-username.
 MOVE '/BJH'    TO gs_variante-variant.

ENDFORM.

*---------------------------------------------------------------------*
*                  A L V _ I N I T _ F I E L D C A T                  *
*---------------------------------------------------------------------*
* Ausgabereihenfolge der anzuzeigenden Liste definieren. Falls Aufbau *
* nicht dem Standard entsprechen sollte oder mehrzeilig dargestellt   *
* wird, dann sind die Parameter row_pos und col_pos auch zu setzen    *
* im Beispiel: 1-stufig, 1-zeilig, Bildchen (Icon) + 7 Elemente       *
*---------------------------------------------------------------------*
FORM upro-alv_init_fieldcat.

 CLEAR:   gt_fieldcat, gs_fieldcat.
 REFRESH: gt_fieldcat.

 gs_fieldcat-fieldname   = 'AMPEL'.
* Überschrift zu diesen Feld, da keinem Data Dictionary zugeordnet ist
 gs_fieldcat-reptext     = 'Ampel'.
* Ampel als Bildchen ausgeben
 gs_fieldcat-icon        = 'X'.
* Länge des Anzeigefeldes am Bildschirm
 gs_fieldcat-outputlen   = 5.
 APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat.

* Pushbutton aktivieren, bei dem durch Drücken eine Aktion durchgeführt
* werden soll
 gs_fieldcat-fieldname   = 'PB'.
 gs_fieldcat-reptext     = 'Unterschrift'.
 gs_fieldcat-icon        = 'X'.
 gs_fieldcat-outputlen   = 3.
 gs_fieldcat-style       = cl_gui_alv_grid=>mc_style_button.
* Styl 'Pushbutton' setzen. Siehe Attributliste der Klasse
 APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat.

 gs_fieldcat-fieldname   = 'LIFNR'.
 gs_fieldcat-tabname     = 'EKKO'.
 gs_fieldcat-ref_field   = 'LIFNR'.
 gs_fieldcat-ref_table   = 'EKKO'.
 APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat.

 gs_fieldcat-fieldname   = 'EBELN'.
 gs_fieldcat-tabname     = 'EKKO'.
 gs_fieldcat-ref_field   = 'EBELN'.
 gs_fieldcat-ref_table   = 'EKKO'.
* gs_fieldcat-row_pos     = 1. "Positionierung : in welcher Reihe Feld
* gs_fieldcat-col_pos     = 1. "Pos.der Spalte : ausgeben wird
 APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat.

 gs_fieldcat-fieldname   = 'EBELP'.
 gs_fieldcat-tabname     = 'EKPO'.
 gs_fieldcat-ref_field   = 'EBELP'.
 gs_fieldcat-ref_table   = 'EKPO'.
* gs_fieldcat-row_pos     = 1.
* gs_fieldcat-col_pos     = 2.
 APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat.

 gs_fieldcat-fieldname   = 'MATNR'.
 gs_fieldcat-tabname     = 'EKPO'.
 gs_fieldcat-ref_field   = 'MATNR'.
 gs_fieldcat-ref_table   = 'EKPO'.
* gs_fieldcat-row_pos     = 2.
* gs_fieldcat-col_pos     = 1.
* Materialnummer, Doppelklick für Extra-Aktionen zulassen
 gs_fieldcat-hotspot     = 'X'.
 APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat.

 gs_fieldcat-fieldname   = 'WERKS'.
 gs_fieldcat-tabname     = 'EKPO'.
 gs_fieldcat-ref_field   = 'WERKS'.
 gs_fieldcat-ref_table   = 'EKPO'.
* gs_fieldcat-row_pos     = 1.
* gs_fieldcat-col_pos     = 3.
 APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat.

 gs_fieldcat-fieldname   = 'MENGE'.
 gs_fieldcat-tabname     = 'EKPO'.
 gs_fieldcat-ref_field   = 'MENGE'.
 gs_fieldcat-ref_table   = 'EKPO'.
* gs_fieldcat-row_pos     = 2.
* gs_fieldcat-col_pos     = 2.
* Wertefeld / Zahl, rechtbündig ausgeben
 gs_fieldcat-just        = 'R'.
 APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat.

 gs_fieldcat-fieldname   = 'MEINS'.
 gs_fieldcat-tabname     = 'EKPO'.
 gs_fieldcat-ref_field   = 'MEINS'.
 gs_fieldcat-ref_table   = 'EKPO'.
* gs_fieldcat-row_pos     = 2.
* gs_fieldcat-col_pos     = 3.
 APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat.

 gs_fieldcat-fieldname   = 'NETWR'.
 gs_fieldcat-tabname     = 'EKPO'.
 gs_fieldcat-ref_field   = 'NETWR'.
 gs_fieldcat-ref_table   = 'EKPO'.
* gs_fieldcat-row_pos     = 2.
* gs_fieldcat-col_pos     = 3.
* Wert der Position. In der Standardanzeige nicht anzeigen, aber im
* LayOut-Vorrat vorhalten
 gs_fieldcat-no_out      = 'X'.
* rechtbündig ausgeben
 gs_fieldcat-just        = 'R'.
 APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat.

ENDFORM.

*---------------------------------------------------------------------*
*                      A L V _ I N I T _ S O R T                      *
*---------------------------------------------------------------------*
* standardisierte Sortierung der Anzeige definieren. Im Beispiel ist  *
* das Feld Materialnummer als aufsteigend angegeben.                  *
* Einstiegsvariante. Übersteuert Standard-Variante, wenn sie im ALV   *
* hinterlegt ist. Tabelle für die Speicherung der Varianten in den    *
* Programmen ist die LTDX                                             *
*---------------------------------------------------------------------*
FORM upro-alv_init_sort.
 CLEAR:   gt_sort, gs_sort, gs_variante.
 REFRESH: gt_sort.

 CLEAR gs_sort.
 gs_sort-fieldname = 'MATNR'.
 gs_sort-spos      = 1.
 gs_sort-up        = 'X'.
 gs_sort-subtot    = 'X'.
 APPEND gs_sort TO gt_sort.

 MOVE sy-repid  TO prog_name.
 MOVE prog_name TO gs_variante-report.
* MOVE '/BJH'    TO gs_variante-variant.

ENDFORM.

*---------------------------------------------------------------------*
*                 A L V _ O O _ V O R B E R E I T U N G               *
*---------------------------------------------------------------------*
* Nur im ersten Lauf: Objekte generieren. Dazu zählt neben dem ALV    *
* auch, daß das Objekt für die Ereignisse aufgebaut wird. Die benötig-*
* ten Ereignisse werden dazugefügt.                                   *
* Bei jedem Aufruf des Container-Dynpros auf jeden Fall den ALV aktua-*
* lisieren, auch wenn in diesem Beispielprogramm dazwischen nichts    *
* geschieht.                                                          *
*---------------------------------------------------------------------*
FORM upro-alv_oo_vorbereitung.

 IF erster_lauf = '1'.

   CREATE OBJECT c_grid
     EXPORTING
       repid     = prog_name
       dynnr     = dynpro_alv
       side      = cl_gui_docking_container=>dock_at_left
       extension = 1200
     EXCEPTIONS
       cntl_error                  = 1
       cntl_system_error           = 2
       create_error                = 3
       lifetime_error              = 4
       lifetime_dynpro_dynpro_link = 5
       others                      = 6.

   IF sy-subrc <> 0.
* Fehler beim erzeugen eines &1. Abbruch!
     MESSAGE a110(zc) WITH text-005.
   ENDIF.

   CREATE OBJECT o_grid
     EXPORTING
       i_parent          = c_grid
     EXCEPTIONS
       error_cntl_create = 1
       error_cntl_init   = 2
       error_cntl_link   = 3
       error_dp_create   = 4
       others            = 5
       .
   IF sy-subrc <> 0.
     MESSAGE a110(zc) WITH text-006.
   ENDIF.

* Ereignisse für den ALV aktivieren
   CREATE OBJECT event_receiver.

   SET HANDLER event_receiver->alv_init_toolbar FOR o_grid.
   SET HANDLER event_receiver->alv_hotspot      FOR o_grid.
   SET HANDLER event_receiver->button_click     FOR o_grid.
   SET HANDLER event_receiver->button_toolbar   FOR o_grid.
 ENDIF.

* sichern nur im Modus X (Systemspezifisch), A=System und Benutzer
* unterdrückt die Anzeige zum Sichern

 CALL METHOD o_grid->set_table_for_first_display
      EXPORTING
*           I_BYPASSING_BUFFER            =
*           I_BUFFER_ACTIVE               =
*           I_CONSISTENCY_CHECK           =
*           i_structure_name              =
           is_variant                    = gs_variante
           i_save                        = 'X'
           i_default                     = 'X'
           is_layout                     = gs_layout
*           IS_PRINT                      =
*           IT_SPECIAL_GROUPS             =
*           IT_TOOLBAR_EXCLUDING          =
*           IT_HYPERLINK                  =
*           IT_ALV_GRAPHICS               =
      CHANGING
           it_outtab                     = itab_alv
           it_fieldcatalog               = gt_fieldcat
*           IT_SORT                       = gt_sort
*           IT_FILTER                     =
      EXCEPTIONS
           invalid_parameter_combination = 1
           program_error                 = 2
           too_many_lines                = 3
           OTHERS                        = 4.

 MOVE 'N' TO erster_lauf.

ENDFORM.

***** Ende *****
* Copyright BJH Software, Datei überarbeitet am: 23.7.2005