Splitter-AlV erscheint nicht

Getting started ... Alles für einen gelungenen Start.
2 Beiträge • Seite 1 von 1
2 Beiträge Seite 1 von 1

Splitter-AlV erscheint nicht

Beitrag von melih.seckin (ForumUser / 1 / 0 / 0 ) »
Guten Tag liebe abap entwickler. ich bin auszubildender, der im august ins 2. lehrjahr der anwendungsentwicklung kommt. Mein Problem ist, dass ich ein Kino verwaltungsprogramm entwickeln soll, wo der nutzer entweder reservierungen (auf den eingegeben namen gefiltert) sehen kann oder alle laufenden filme für den tag sehen kann oder aber sich beides mit einer splitter alv anzeigen lässt. mein programm lässt sich aktivieren, wenn ich jedoch auf den radiobutton "beides anzeigen" klicke erscheint nichts. wie löse ich dieses problem?
schonmal danke im voraus :)

Code: Alles auswählen.

*& Report ZMS_KINO_VERWALTUNG
*&---------------------------------------------------------------------*
REPORT zms_kino_verwaltung.

*----------------------------------------------------------------------*
* SELECTION-SCREEN
*----------------------------------------------------------------------*
PARAMETERS: name TYPE zms_de_buchungsname OBLIGATORY DEFAULT sy-uname.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: rb_res   RADIOBUTTON GROUP rb1 DEFAULT 'X',  " Reservierungen
            rb_filme RADIOBUTTON GROUP rb1,               " Aktuelle Filme
            rb_beide RADIOBUTTON GROUP rb1.               " Beides
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN SKIP 1.

" Stammdaten-Pflege Buttons
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
SELECTION-SCREEN PUSHBUTTON /1(30) pb_saal USER-COMMAND saal.
SELECTION-SCREEN PUSHBUTTON /1(30) pb_filme USER-COMMAND filme.
SELECTION-SCREEN PUSHBUTTON /1(30) pb_beleg USER-COMMAND beleg.
SELECTION-SCREEN END OF BLOCK b2.

*----------------------------------------------------------------------*
* GLOBALE DATEN
*----------------------------------------------------------------------*
DATA: go_kino TYPE REF TO zcl_ms_kino,
      gv_aktuelles_datum TYPE sy-datum.

*----------------------------------------------------------------------*
* INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
  " Texte für Radiobuttons
  %_rb_res_%_app_%-text   = 'Reservierungen anzeigen'.
  %_rb_filme_%_app_%-text = 'Aktuelle Filme anzeigen'.
  %_rb_beide_%_app_%-text = 'Beides anzeigen'.

  " Texte für Stammdaten-Buttons
  pb_saal  = 'Kinosäle pflegen'.
  pb_filme = 'Filme pflegen'.
  pb_beleg = 'Belegung pflegen'.

*----------------------------------------------------------------------*
* AT SELECTION-SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
  IF name IS INITIAL.
    MESSAGE 'Bitte geben Sie Ihren Namen ein' TYPE 'E'.
  ENDIF.

" Button-Events für Stammdatenpflege
  CASE sy-ucomm.
    WHEN 'SAAL'.
      SET PARAMETER ID 'VTB' FIELD 'ZMS_T_KINO_SAAL'.
      CALL TRANSACTION 'SM30' AND SKIP FIRST SCREEN.

    WHEN 'FILME'.
      SET PARAMETER ID 'VTB' FIELD 'ZMS_T_KINO_FILME'.
      CALL TRANSACTION 'SM30' AND SKIP FIRST SCREEN.

    WHEN 'BELEG'.
      SET PARAMETER ID 'VTB' FIELD 'ZMS_T_KINO_BELEG'.
      CALL TRANSACTION 'SM30' AND SKIP FIRST SCREEN.
  ENDCASE.

*----------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
  CREATE OBJECT go_kino EXPORTING iv_name = name.
  gv_aktuelles_datum = sy-datum.

  " Navigation
  CASE 'X'.
    WHEN rb_res.   PERFORM zeige_reservierungen USING go_kino.
    WHEN rb_filme. PERFORM zeige_filme USING go_kino.
    WHEN rb_beide. PERFORM zeige_beide USING go_kino.
  ENDCASE.

*&---------------------------------------------------------------------*
*& Event Handler Klasse für CL_SALV_TABLE (MUSS VOR den FORMs stehen!)
*&---------------------------------------------------------------------*
CLASS lcl_event_handler DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS: handle_double_click
      FOR EVENT double_click OF cl_salv_events_table
      IMPORTING row column.
ENDCLASS.

CLASS lcl_event_handler IMPLEMENTATION.
  METHOD handle_double_click.
    DATA: lt_filme TYPE zcl_ms_kino=>tt_filme,
          ls_film TYPE zcl_ms_kino=>ty_filme.

    " Film aus der Zeile holen
    go_kino->lade_filme( gv_aktuelles_datum ).
    lt_filme = go_kino->get_filme( ).

    READ TABLE lt_filme INTO ls_film INDEX row.
    IF sy-subrc = 0.
      " Reservierung durchführen
      PERFORM reservierung_durchfuehren_salv USING ls_film.
    ENDIF.
  ENDMETHOD.
ENDCLASS.

*&---------------------------------------------------------------------*
*& Splitter ALV Klasse
*&---------------------------------------------------------------------*
CLASS lcl_splitter_alv DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS:
      show_both.

  PRIVATE SECTION.
    CLASS-DATA:
      co_splitter TYPE REF TO cl_gui_splitter_container,
      co_reserv_alv TYPE REF TO cl_salv_table,
      co_filme_alv TYPE REF TO cl_salv_table,
      ct_reservierungen TYPE zcl_ms_kino=>tt_reservierung,
      ct_filme TYPE zcl_ms_kino=>tt_filme,
      co_kino TYPE REF TO zcl_ms_kino.

    CLASS-METHODS:
      init_data,
      init_alvs.
ENDCLASS.

CLASS lcl_splitter_alv IMPLEMENTATION.
  METHOD show_both.
    " Kino-Objekt über globale Variable setzen
    co_kino = go_kino.
    init_data( ).
    init_alvs( ).
  ENDMETHOD.

  METHOD init_data.
    " Daten laden
    co_kino->lade_reservierungen( ).
    ct_reservierungen = co_kino->get_reservierungen( ).

    co_kino->lade_filme( gv_aktuelles_datum ).
    ct_filme = co_kino->get_filme( ).

    " Sortierung
    SORT ct_reservierungen BY datum DESCENDING.
  ENDMETHOD.

  METHOD init_alvs.
    " Prüfen ob Daten vorhanden
    IF lines( ct_reservierungen ) = 0 AND lines( ct_filme ) = 0.
      MESSAGE 'Keine Daten für Anzeige vorhanden' TYPE 'I'.
      RETURN.
    ENDIF.

    TRY.
      " Splitter Container erstellen (SCREEN0 ist der Schlüssel!)
      CREATE OBJECT co_splitter
        EXPORTING
          parent  = cl_gui_container=>screen0
          rows    = 1
          columns = 2.

      " Linke Seite: Reservierungen
      IF lines( ct_reservierungen ) > 0.
        cl_salv_table=>factory(
          EXPORTING r_container  = co_splitter->get_container( row = 1 column = 1 )
          IMPORTING r_salv_table = co_reserv_alv
          CHANGING  t_table      = ct_reservierungen ).

        co_reserv_alv->get_display_settings( )->set_list_header( 'Meine Reservierungen' ).
        co_reserv_alv->get_columns( )->set_optimize( abap_true ).
        co_reserv_alv->get_display_settings( )->set_striped_pattern( abap_true ).
        co_reserv_alv->get_functions( )->set_all( abap_true ).

        co_reserv_alv->display( ).
      ENDIF.

      " Rechte Seite: Filme
      IF lines( ct_filme ) > 0.
        cl_salv_table=>factory(
          EXPORTING r_container  = co_splitter->get_container( row = 1 column = 2 )
          IMPORTING r_salv_table = co_filme_alv
          CHANGING  t_table      = ct_filme ).

        co_filme_alv->get_display_settings( )->set_list_header( 'Filme - Doppelklick für Reservierung' ).
        co_filme_alv->get_columns( )->set_optimize( abap_true ).
        co_filme_alv->get_display_settings( )->set_striped_pattern( abap_true ).
        co_filme_alv->get_functions( )->set_all( abap_true ).

        " Event Handler
        SET HANDLER lcl_event_handler=>handle_double_click FOR co_filme_alv->get_event( ).

        co_filme_alv->display( ).
      ENDIF.

    CATCH cx_root.
      MESSAGE 'Fehler beim Erstellen der Splitter-Ansicht' TYPE 'E'.
    ENDTRY.
  ENDMETHOD.
ENDCLASS.

*&---------------------------------------------------------------------*
*& Form zeige_reservierungen - CL_SALV_TABLE (Kompakt)
*&---------------------------------------------------------------------*
FORM zeige_reservierungen USING po_kino TYPE REF TO zcl_ms_kino.
  DATA: lo_alv TYPE REF TO cl_salv_table,
        lt_reservierungen TYPE zcl_ms_kino=>tt_reservierung,
        lx_msg TYPE REF TO cx_salv_msg.

  po_kino->lade_reservierungen( ).
  lt_reservierungen = po_kino->get_reservierungen( ).

  IF lines( lt_reservierungen ) = 0.
    MESSAGE 'Keine Reservierungen vorhanden' TYPE 'I'.
    RETURN.
  ENDIF.

  SORT lt_reservierungen BY datum DESCENDING.

  TRY.
    " ALV automatisch erstellen - KEIN Feldkatalog nötig!
    cl_salv_table=>factory(
      IMPORTING r_salv_table = lo_alv
      CHANGING t_table = lt_reservierungen ).

    " Titel setzen
    lo_alv->get_display_settings( )->set_list_header( 'Meine Reservierungen' ).

    " Spaltenoptimierung automatisch
    lo_alv->get_columns( )->set_optimize( abap_true ).

    " Toolbar aktivieren (Export, Filter, etc.)
    lo_alv->get_functions( )->set_all( abap_true ).

    " Zebrastreifen
    lo_alv->get_display_settings( )->set_striped_pattern( abap_true ).

    " Anzeigen
    lo_alv->display( ).

  CATCH cx_salv_msg INTO lx_msg.
    MESSAGE lx_msg->get_text( ) TYPE 'E'.
  ENDTRY.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form zeige_filme - CL_SALV_TABLE mit Event-Handler
*&---------------------------------------------------------------------*
FORM zeige_filme USING po_kino TYPE REF TO zcl_ms_kino.
  DATA: lo_alv TYPE REF TO cl_salv_table,
        lt_filme TYPE zcl_ms_kino=>tt_filme,
        lo_events TYPE REF TO cl_salv_events_table,
        lv_title TYPE c LENGTH 70,
        lx_msg TYPE REF TO cx_salv_msg.

  po_kino->lade_filme( gv_aktuelles_datum ).
  lt_filme = po_kino->get_filme( ).

  IF lines( lt_filme ) = 0.
    MESSAGE 'Keine Filme für das gewählte Datum vorhanden' TYPE 'I'.
    RETURN.
  ENDIF.

  TRY.
    " ALV automatisch erstellen
    cl_salv_table=>factory(
      IMPORTING r_salv_table = lo_alv
      CHANGING t_table = lt_filme ).

    " Titel mit Datum (ohne String-Template für Kompatibilität)
    CONCATENATE 'Filme am' gv_aktuelles_datum '- Doppelklick für Reservierung'
                INTO lv_title SEPARATED BY space.
    lo_alv->get_display_settings( )->set_list_header( lv_title ).

    " Spalten optimieren
    lo_alv->get_columns( )->set_optimize( abap_true ).
    lo_alv->get_display_settings( )->set_striped_pattern( abap_true ).

    " Toolbar aktivieren
    lo_alv->get_functions( )->set_all( abap_true ).

    " Doppelklick-Event aktivieren
    lo_events = lo_alv->get_event( ).
    SET HANDLER lcl_event_handler=>handle_double_click FOR lo_events.

    " Anzeigen
    lo_alv->display( ).

  CATCH cx_salv_msg INTO lx_msg.
    MESSAGE lx_msg->get_text( ) TYPE 'E'.
  ENDTRY.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form zeige_beide
*&---------------------------------------------------------------------*
FORM zeige_beide USING po_kino TYPE REF TO zcl_ms_kino.
  DATA: lx_msg TYPE REF TO cx_salv_msg.

  TRY.
    lcl_splitter_alv=>show_both( ).
  CATCH cx_salv_msg INTO lx_msg.
    MESSAGE lx_msg->get_text( ) TYPE 'E'.
  ENDTRY.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form reservierung_durchfuehren_salv - Für CL_SALV_TABLE Events
*&---------------------------------------------------------------------*
FORM reservierung_durchfuehren_salv USING is_film TYPE zcl_ms_kino=>ty_filme.
  DATA: lv_anzahl TYPE i,
        lv_message TYPE string,
        lv_anzahl_char TYPE c LENGTH 10.

  " Popup für Ticket-Anzahl
  PERFORM popup_ticket_anzahl USING is_film CHANGING lv_anzahl.
  IF lv_anzahl <= 0.
    RETURN.
  ENDIF.

  " Reservierung anlegen
  IF go_kino->reservierung_anlegen( iv_saal_nr = is_film-saal_nr
                                    iv_anzahl = lv_anzahl ) = abap_true.
    " Erfolgsmeldung (Anzahl in Char konvertieren)
    lv_anzahl_char = lv_anzahl.
    CONCATENATE 'Erfolgreich!' lv_anzahl_char 'Tickets für' is_film-film_name 'reserviert'
                INTO lv_message SEPARATED BY space.
    MESSAGE lv_message TYPE 'S'.

    " ALV automatisch neu laden
    PERFORM zeige_filme USING go_kino.
  ELSE.
    MESSAGE 'Reservierung fehlgeschlagen' TYPE 'E'.
  ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form popup_ticket_anzahl - Popup für Ticket-Eingabe
*&---------------------------------------------------------------------*
FORM popup_ticket_anzahl USING is_film TYPE zcl_ms_kino=>ty_filme
                         CHANGING cv_anzahl TYPE i.

  DATA: lt_fields TYPE TABLE OF sval,
        ls_field TYPE sval,
        lv_returncode TYPE c,
        lv_message TYPE string,
        ls_film_aktuell TYPE zcl_ms_kino=>ty_filme,
        lv_plaetze_char TYPE c LENGTH 10.

  cv_anzahl = 0.

  " Popup-Schleife für Validierung
  DO.
    " Aktuelle Daten laden (lokale Kopie verwenden!)
    go_kino->lade_filme( gv_aktuelles_datum ).
    READ TABLE go_kino->get_filme( ) INTO ls_film_aktuell
         WITH KEY saal_nr = is_film-saal_nr film_name = is_film-film_name.

    " Popup-Feld vorbereiten
    CLEAR: lt_fields.
    ls_field-tabname = 'RSPARAMS'.
    ls_field-fieldname = 'LOW'.
    ls_field-fieldtext = 'Anzahl Tickets'.
    ls_field-field_obl = 'X'.
    ls_field-value = '1'.
    APPEND ls_field TO lt_fields.

    " Popup anzeigen (freie_plaetze in Char konvertieren)
    lv_plaetze_char = ls_film_aktuell-freie_plaetze.
    CONCATENATE ls_film_aktuell-film_name '(' lv_plaetze_char 'Plätze frei)'
                INTO lv_message SEPARATED BY space.

    CALL FUNCTION 'POPUP_GET_VALUES'
      EXPORTING
        popup_title = lv_message
      IMPORTING
        returncode = lv_returncode
      TABLES
        fields = lt_fields.

    " Abbruch durch Benutzer
    IF lv_returncode = 'A'.
      RETURN.
    ENDIF.

    " Eingabe validieren
    READ TABLE lt_fields INTO ls_field INDEX 1.
    TRY.
      cv_anzahl = ls_field-value.

      IF cv_anzahl <= 0.
        MESSAGE 'Die Anzahl muss größer als 0 sein' TYPE 'I'.
        CONTINUE.
      ELSEIF cv_anzahl > ls_film_aktuell-freie_plaetze.
        lv_plaetze_char = ls_film_aktuell-freie_plaetze.
        CONCATENATE 'Nur' lv_plaetze_char 'Plätze verfügbar!'
                    INTO lv_message SEPARATED BY space.
        MESSAGE lv_message TYPE 'I'.
        CONTINUE.
      ENDIF.

      EXIT.  " Gültige Eingabe - Schleife verlassen
    CATCH cx_sy_conversion_no_number.
      MESSAGE 'Bitte geben Sie eine gültige Zahl ein' TYPE 'I'.
      CONTINUE.
    ENDTRY.
  ENDDO.
ENDFORM.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Splitter-AlV erscheint nicht

Beitrag von qyurryus (Specialist / 114 / 88 / 46 ) »
Moin.
Danke erstmal für ein komplettes Beispiel mit Code - löblich.
Ergänz mal

Code: Alles auswählen.

WRITE space.
hinter dem

Code: Alles auswählen.

 co_reserv_alv->display( ).

Seite 1 von 1

Vergleichbare Themen

11
Antw.
8998
Views
ALV erscheint nicht.
von Spookykid » 22.08.2011 11:51 • Verfasst in Dialogprogrammierung
2
Antw.
4765
Views
Programm erscheint nicht im Paket
von Murdock » 25.07.2012 10:53 • Verfasst in SAP - Allgemeines
7
Antw.
5362
Views
Icon im Dynpro erscheint nicht
von Legxis » 10.09.2018 17:24 • Verfasst in ABAP® Core
0
Antw.
3433
Views
Perönliche Werteliste bei F4-Hilfe erscheint nicht autom.
von df62 » 28.04.2006 17:50 • Verfasst in Dialogprogrammierung
0
Antw.
1913
Views
Alv Grid Layout Save Button erscheint nicht
von BMWi801 » 26.02.2019 07:48 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag



Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

FS-CD schnellstmöglich lernen
vor 20 Stunden von wreichelt 2 / 1101
Banf anlegen
vor einer Woche von wreichelt 2 / 8489
Banf anlegen
vor einer Woche von Manfred K. 1 / 8106
IBAN und BUT0BK
vor einer Woche von waltersen gelöst 10 / 23741
GUIXT Tabellen in Container ansprechen
vor einer Woche von Denaris 1 / 13344

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

FS-CD schnellstmöglich lernen
vor 20 Stunden von wreichelt 2 / 1101
Banf anlegen
vor einer Woche von wreichelt 2 / 8489
Banf anlegen
vor einer Woche von Manfred K. 1 / 8106
IBAN und BUT0BK
vor einer Woche von waltersen gelöst 10 / 23741
GUIXT Tabellen in Container ansprechen
vor einer Woche von Denaris 1 / 13344