ALV-GRID Standard Filter funktioniert nicht nach Kundenaktion

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
14 Beiträge • Seite 1 von 1
14 Beiträge Seite 1 von 1

ALV-GRID Standard Filter funktioniert nicht nach Kundenaktion

Beitrag von Prego (Specialist / 106 / 22 / 1 ) »
Hallo zusammen,

der ALV Standardfilter im ALV Grid funktioniert bei uns nicht mehr nach Ausführen einer Kundenfunktion die einen Dialogscreen mit einem weiteren ALV (OO) aufruft. Danach zeigt der Filterdynpro das zuvor aufgerufene Dialogfenster, incl. Title und Status. Beim Verlassen der Dialogfensters werden alle Instanzen der darin verwendeten Klassen gelöscht. Da kann es also keine Konflikte geben. Habe das Dynpro, Title und Status auch schon umbenannt, ohne Ergebnis.

Nutzt man den Filter ohne vorhergehende Ausführung der Kundenfunktion, funktioniert alles wie gewohnt. Ich zweifele gerade an mir selbst. Seit Tagen finde ich den Fehler nicht. Debuggen hat mich bisher auch nicht weiter gebracht. Die Standardfunktion des Filters wird in beiden Fällen identisch aufgerufen.

Beste Grüße
Jens

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


Re: ALV-GRID Standard Filter funktioniert nicht nach Kundenaktion

Beitrag von a-dead-trousers (Top Expert / 4349 / 218 / 1166 ) »
Könntest du vielleicht bitte ein paar Screenshots hochladen, damit man sich das besser vorstellen kann? Momentan fallen mir mehrere Gründe ein aber die Ausführungen wären zu umfangreich um sie alle niederzuschreiben.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV-GRID Standard Filter funktioniert nicht nach Kundenaktion

Beitrag von Prego (Specialist / 106 / 22 / 1 ) »
Aber klar doch,

beim direkten Einstieg in den Report funktioniert der Filter noch wie gehabt.
Bild

Hier ist die Kundenfunktion. Letztendlich werden da nur Termine gegen den Netzplan verglichen und die Abweichung dargestellt. Der anschließende Fehler tritt auch auf wenn hier keine weiteren Aktionen durchgeführt werden. Der Filter innerhalb dieses Dialogs funktioniert auch, wenn der vom aufrufenden Dynpro nicht mehr tut.
Bild

Nach Ausführen o.g. Funktion stellt sich der Filter wie folgt dar. Ich kann es mir nicht erklären. Wie schon geschrieben sind alle Instanzen und interne Tabellen gelöscht.
Bild

Beste Grüße
Jens

Re: ALV-GRID Standard Filter funktioniert nicht nach Kundenaktion

Beitrag von a-dead-trousers (Top Expert / 4349 / 218 / 1166 ) »
Wie verlässt du deinen Kundenscreen? (LEAVE ...)
Hat dein Dynpro ein "Folge Dynpro" hinterlegt?
Welches "Ereignis" vom ALV nutzt du für den Aufruf deines Kundenscreens?
Verwendest du ein eigenes OK-Code Feld oder direkt sy-ucomm?
Löschst du aktiv irgendwo den sy-ucomm?
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV-GRID Standard Filter funktioniert nicht nach Kundenaktion

Beitrag von a-dead-trousers (Top Expert / 4349 / 218 / 1166 ) »
Instanzierst du das Grid im deinem Dialog in einem CustomContainer Bereich oder in einer der CL_GUI_CONTAINER=>SCREEN* Instanzen?
Hat der CustomContainer Bereich im Dynpro vom Report den gleichen Namen wie im Kunden Dynpro?
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV-GRID Standard Filter funktioniert nicht nach Kundenaktion

Beitrag von a-dead-trousers (Top Expert / 4349 / 218 / 1166 ) »
Verwendest du die FREE Methode der ALV-Grid Instanz um es zu "zerstören" oder nur CLEAR?
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV-GRID Standard Filter funktioniert nicht nach Kundenaktion

Beitrag von a-dead-trousers (Top Expert / 4349 / 218 / 1166 ) »
Kurz zusammengefasst, ausgehend von deinen Screenshots würde ich folgendes vermuten:
1) Deine Grid Instanz läuft in CL_GUI_CONTAINER=>SCREEN*
2) Du zerstörst die Grid Instanz nicht korrekt über die FREE Methode sondern löschst nur die Variable mit dem Befehl CLEAR.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV-GRID Standard Filter funktioniert nicht nach Kundenaktion

Beitrag von Prego (Specialist / 106 / 22 / 1 ) »
Oh, das sind jetzt viele Fragen.

- Dynpro mit LEAVE TO SCREEN ... verlassen
- es ist kein Folgedynpro hinterlegt. Habe ich aber auch schon mit Folgedynpro getestet
- der Aufruf des Screens passiert in der UserCommand-Routine die beim ALV-GRID
hinterlegt wird (CALL SCREEN .... STARTING AT)
- es wird ein eigenes OK-Code Feld verwendet
- sy-ucomm wird im Programm nicht angefasst
- Die Instanzen werden mit FREE gelöscht.
- Bezüglich der Container weiß ich nicht ob ich Dich richtig verstehe. Ich versuche es
mal zu erläutern.

Der BasisReport hat kein richtiges Dynpro sondern verwendet nur den REUSE_ALV_GRID_DISPLAY, ist aber auch ein Z-Programm. Das Dialogfenster welches dann aufgerufen wird enthält ein normales CustomControl und wird auf mit
CL_GUI_CONTAINER instanziert. Ich hänge den code vom PBO mal unten an. Es gibt keine Namensdopplungen.

Code: Alles auswählen.

  DATA: lv_layout   TYPE lvc_s_layo,
        gv_grid     TYPE REF TO cl_gui_alv_grid,
        gf_termcont TYPE REF TO cl_gui_container,
        lt_fieldcat TYPE  lvc_t_fcat.

  SET PF-STATUS 'STATUS_9000'.
  SET TITLEBAR 'TITLE_9000'.
  CREATE OBJECT gv_grid
    EXPORTING
      i_parent = gf_termcont.

  CREATE OBJECT gr_event_handler .
  SET HANDLER gr_event_handler->handle_user_command FOR gv_grid.
  SET HANDLER: gr_event_handler->handle_button_click FOR gv_grid.

  PERFORM build_fieldcat_0900 TABLES lt_fieldcat.
  PERFORM prepare_layout.
  CALL METHOD gv_grid->set_table_for_first_display
    EXPORTING
      is_layout       = gs_layout
    CHANGING
      it_outtab       = gt_pruef
      it_fieldcatalog = lt_fieldcat.

  CALL METHOD gv_grid->set_ready_for_input
    EXPORTING
      i_ready_for_input = 1.
Danke

Re: ALV-GRID Standard Filter funktioniert nicht nach Kundenaktion

Beitrag von a-dead-trousers (Top Expert / 4349 / 218 / 1166 ) »
Du instanzierst den Container nicht (gf_termcont ist null). Damit wandert das Grid in den CL_GUI_CONTAINER=>DEFAULT SCREEN und wird durchgängig auf allen Dynpros angezeigt. Im Report selbst wird es nur deshalb nicht angezeigt, weil der REUSE_ALV_GRID_DISPLAY darüber liegt.
Wenn du einen CustomContainer verwenden willst, musst du zuerst eine Instanz von Typ CL_GUI_CUSTOM_CONTAINER erzeugen.

Und ich bin mir ziemlich sicher, dass die Methode FREE nicht aufgerufen wird, weil sonst das Grid im anderen Dynpro nicht angezeigt werden würde.
Das könnte eventuell auch daran liegen, dass du das Grid MEHRMALS instanzierst. Mir fehlt nämlich die Abfrage "IF gv_grid IS BOUND" um zu verhindern, dass der Constructor mehrfach aufgerufen wird.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Prego

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV-GRID Standard Filter funktioniert nicht nach Kundenaktion

Beitrag von Prego (Specialist / 106 / 22 / 1 ) »
Danke schonmal für das Feedback.
Bei Punkt 1 hast Du Recht. gf_termcont wird nicht instanziert. Ist Initial.
Das beheb ich gleich. Aber die Instanzen werden sauber gekillt.

Code: Alles auswählen.

MODULE user_command_0900 INPUT.
  CASE ok_code.
    WHEN 'ZOK' OR 'ZCANC'.
      refresh gt_pruef[].
      Free gv_grid.
      Free gr_event_handler.
      Free gf_termcont.
      LEAVE TO SCREEN 0.
  ENDCASE.
  CLEAR ok_code.

Re: ALV-GRID Standard Filter funktioniert nicht nach Kundenaktion

Beitrag von a-dead-trousers (Top Expert / 4349 / 218 / 1166 ) »
FREE ist ein Befehl (und sollte nicht mehr verwendet werden, weil deprecated).
Du brauchst die Methode FREE und danach ein CLEAR.

Code: Alles auswählen.

gv_grid->FREE( ).
CLEAR gv_grid.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Prego

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV-GRID Standard Filter funktioniert nicht nach Kundenaktion

Beitrag von a-dead-trousers (Top Expert / 4349 / 218 / 1166 ) »
Zusätzlich musst du sicherstellen, dass der ganze Code nur EINMAL ausgeführt wird:

Code: Alles auswählen.

IF gv_grid IS NOT BOUND.
  CREATE OBJECT gv_grid
    EXPORTING
      i_parent = gf_termcont.

  CREATE OBJECT gr_event_handler .
  SET HANDLER gr_event_handler->handle_user_command FOR gv_grid.
  SET HANDLER: gr_event_handler->handle_button_click FOR gv_grid.

  PERFORM build_fieldcat_0900 TABLES lt_fieldcat.
  PERFORM prepare_layout.
  CALL METHOD gv_grid->set_table_for_first_display
    EXPORTING
      is_layout       = gs_layout
    CHANGING
      it_outtab       = gt_pruef
      it_fieldcatalog = lt_fieldcat.

  CALL METHOD gv_grid->set_ready_for_input
    EXPORTING
      i_ready_for_input = 1.
ENDIF.
Diese Abfrage ist auch beim Exit-Code sinnvoll:

Code: Alles auswählen.

IF gv_grid IS BOUND.
  gv_grid->free( ).
ENDIF.
CLEAR gv_grid.
IF gf_termcont IS BOUND.
  gf_termcont->free( ).
ENDIF.
CLEAR gf_termcont.
CLEAR gr_event_handler.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV-GRID Standard Filter funktioniert nicht nach Kundenaktion

Beitrag von Prego (Specialist / 106 / 22 / 1 ) »
Danke für die Hilfe. Die fehlende Instanz vom CustomContainer war es. Weißt Du wie alt das schon ist. Ist bisher noch niemandem aufgefallen.
Mit dem nur einmal ausführen hast Du ja absolut recht. Aber durch das Free (Wieder was gelernt) sind die Instanzen ja eh weg und werde anschließend neu aufgebaut.
Bau ich aber trotzdem gleich ein.

Das kommt davon wenn man immer Quick&Dirty entwickelt und 5 Sachen parellel macht.
Danke nochmals für die Hilfe. Da wär ich im Leben nicht drauf gekommen.

Re: ALV-GRID Standard Filter funktioniert nicht nach Kundenaktion

Beitrag von a-dead-trousers (Top Expert / 4349 / 218 / 1166 ) »
Prego hat geschrieben:
16.07.2024 12:13
Mit dem nur einmal ausführen hast Du ja absolut recht. Aber durch das Free (Wieder was gelernt) sind die Instanzen ja eh weg und werde anschließend neu aufgebaut.
Nur, wenn der PBO-Teil wirklich nur einmal ausgeführt wird. Wenn dieser aber durch einen Funktionscode (PAI/PBO) mehrmals durchlaufen wird, werden mehrere Instanzen mit dem gleichen Variablenamen angelegt und du "verlierst" damit den Zugriff auf den Vorgänger. Da hilft dann das ganze FREE am Ende nicht mehr.

Deshalb als Faustregel bei Verwendung von GUI-Controls IMMER prüfen ob es die Instanz nicht schon gibt und beim Verlassen IMMER die FREE-Methode aufrufen.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Prego

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Seite 1 von 1

Vergleichbare Themen

2
Antw.
2074
Views
ALV-Filter-Kriterium mit Leerzeichen funktioniert nicht
von Otscho » 09.05.2008 10:56 • Verfasst in ABAP® Core
2
Antw.
2525
Views
Filter-Handler in ALV-Grid?
von abapnewbie » 30.07.2020 11:34 • Verfasst in ABAP Objects®
1
Antw.
2630
Views
Problem mit Filter auf Gleichheit im ALV Grid
von denno » 22.02.2005 11:11 • Verfasst in Dialogprogrammierung
1
Antw.
1699
Views
TableView Filter
von axcoma » 13.10.2005 11:18 • Verfasst in Web-Dynpro, BSP + BHTML
8
Antw.
4607
Views
ALV Filter erweitern
von Wei-Ming » 11.01.2019 15:22 • Verfasst in ABAP® Core

Über diesen Beitrag



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

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.