Markierte Zeile in ALV Grid mittels Button in DB löschen

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Markierte Zeile in ALV Grid mittels Button in DB löschen

Beitrag von Miss (ForumUser / 18 / 0 / 0 ) »
Guten Abend sowie hier als auch in der ABAP Welt bin ich neu.

Und bräuchte Hilfe bzgl. folgenden Problems':
a) Wie bekomme ich eine simple Markierung auf eine Zeile in einem AlV-Grid mit Feldkatalog.
b) Wie kann ich diese Zeile dann durch das klicken des Delete Buttons sowie aus der Liste auch als aus der DB löschen.

Nach dieser Programmierung erkennt er keine Markierung weder die Aktion Danke im voraus für die Hilfe.

Mein Code lt. folgendermassen:
Im Top-Include:
DATA: gt_zeile TYPE lvc_t_row,
gs_zeile TYPE lvc_s_row,
gs_kommliste_zeile TYPE zrul_buch_komm,
gs_kommliste_zeile_app TYPE zrul_buch_komm,
gv_popup_anw TYPE c,
gt_kommliste_zeile_delet type TABLE OF zrul_buch_komm.

Im PAI:
WHEN 'DEL'.
CLEAR ok_code.
PERFORM buch_delet.
ENDCASE.

Dann in der Routine:
FORM BUCH_DELET .

REFRESH gt_zeile.
CALL METHOD Gr_ALV_KOMML->GET_SELECTED_ROWS
IMPORTING
ET_INDEX_ROWS = gt_zeile.

IF gt_zeile[] IS INITIAL.
Message 'Bitte Zeile markieren.' TYPE 'E' DISPLAY LIKE 'W'.
ELSE.
* Popup für Legitimation
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TEXT_QUESTION = text-002
TEXT_BUTTON_1 = 'Ja'(001)
TEXT_BUTTON_2 = 'Nein'(002)
DISPLAY_CANCEL_BUTTON = 'X'
IMPORTING
ANSWER = gv_popup_anw.

IF gv_popup_anw = 1. "ja
LOOP AT gt_zeile into gs_zeile.
READ TABLE gt_kommliste INTO gs_kommliste_zeile_app INDEX
gs_zeile-index.
gs_kommliste_zeile = gs_kommliste_zeile_app.
* gs_kommliste_zeile-zrul_kommentar_id = gs_kommliste
gs_kommliste_zeile-zrul_aenam = sy-uname.

CALL FUNCTION 'STU3_ALERTS_CONV_LOCAL_2_UTC'
CHANGING
TIME_T = gs_kommliste_zeile-zrul_aezeit
DATE_D = gs_kommliste_zeile-zrul_aedat.

MODIFY zrul_buch_komm FROM gs_kommliste_zeile.
MODIFY gt_kommliste FROM gs_kommliste_zeile INDEX gs_zeile-index.
ENDLOOP.
.
IF SY-SUBRC = 0.
MESSAGE ' Eintrag erfolgreich gelöscht' type 'E'.
ELSE.
MESSAGE 'Fehler beim löschen' type 'E'.
ENDIF.

ELSEIF gv_popup_anw = 2. "nein
leave to screen sy-dynnr.
ENDIF.
ENDIF.
ENDFORM.

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


Re: Markierte Zeile in ALV Grid mittels Button in DB löschen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Hi!

Im PAI auf das Drücken des Löschbuttons abzufragen ist der flasche Weg. Du musst den EVENTS des ALV Grid arbeiten. Ließ dir daher die Hilfe zum Thema SET HANDLER durch bzw. such dir Beispiele im Internet mit sog. lokalen Event-Handlern.

Beim Nächsten bin ich mir jetzt nicht so sicher.
Entweder musst du, für das was du vorhast, den Event-Handler zu USER_COMMAND implementieren oder du musst mit DATA_CHANGED bzw. DATA_CHANGED_FINISHED arbeiten. Bei USER_COMMAND bin ich mir nicht sicher ob dieser auch tatsächlich für die Standard Lösch-Funktion im ALV Grid durchlaufen wird. Im Gegensatz dazu ist DATA_CHANGED etwas schwieriger zu implementieren, da man hier mit den tastsächlichen Änderungen (ER_DATA_CHANGED) konfrontiert wird, die aber auf Zellenebene (Zeile/Spalte) angegeben sind.

Meine Empfehlung:
In der SAP-Welt hat sich irgendwie die Vorgehensweise eingebürgert, dass der Benutzer zuerst alle Änderungen (Löschungen, Einfügungen, usw.) angibt und diese erst mit einem Klick auf den Speichern-Knopf auf die Datenbank übertragen werden.
Du würdest dazu zwei Tabellen in deinem Programm benötigen. Eine repräsentiert den Zustand aktuell auf der Datenbank und in der zweiten (die auch im ALV-Grid angezeigt wird) führst du deine Änderungen durch.
Wenn der Benutzer dann auf Speichern klickt, vergleichst du die beiden Tabellen und wenn sie unterschiedlich sind kommt die Abfrage ob die Änderungen auch tatsächlich gespeichert werden sollen. Bestätigt der Benutzer dies, dann ermittlest du zeilenweise duch den Vergleich der beiden Tabellen, welche Zeile hinzugekommen, welche geändert und welche gelöscht wurde (über den Primärschlüssel, nicht den Index).
Mit diesen Daten führst du dann das INSERT, UPDATE bzw. DELETE auf der Datenbank aus.

Auf diese Weise kommst du auch komplett ohne Event-Handling aus.

lg ADT
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: Markierte Zeile in ALV Grid mittels Button in DB löschen

Beitrag von Miss (ForumUser / 18 / 0 / 0 ) »
Danke dir für die Antwort und für den Tipp.
das Speichern klappt bei mir auch aber mit dem Löschen habe ich Probleme. Ich programmiere das ganze in einem Funktionsbaustein. Ein Event für den Doppelklick habe ich auch, was auch klappt. Aber nur das markieren und Button löschen drücken da habe ich meine Probleme.

Re: Markierte Zeile in ALV Grid mittels Button in DB löschen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Miss hat geschrieben:Aber nur das markieren und Button löschen drücken da habe ich meine Probleme.
In wie fern Probleme?
Wird die Markierspalte nicht angezeigt?
Bekommst du den Klick auf "Löschen" nicht in dein Event-Handling? (Siehe meine vorherige Antwort bzgl. USER_COMMAND)
Passen die markierten Spalten nicht mit denen in der internen Tabelle zusammen?

lg ADT
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: Markierte Zeile in ALV Grid mittels Button in DB löschen

Beitrag von Miss (ForumUser / 18 / 0 / 0 ) »
Also mit einem Doppelklick Event klappt die Ausgabe der Zeile im textedit. was auch ok ist. Ich bekomme auch durch diesen Code den Text im Textcontainer gelöscht über den Button:

Aber ich möchte die Zeile, den Inhalt, d.h. die Daten in der DB parallel gelöscht haben. Jetzt habe ich zu mindest den Button soweit das die Markierung funktioniert...

Re: Markierte Zeile in ALV Grid mittels Button in DB löschen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Ganz steig ich bei deiner Erklärung nicht durch...

Aber der Code zum Löschen wäre meines Erachtens so:

Code: Alles auswählen.

CALL METHOD Gr_ALV_KOMML->GET_SELECTED_ROWS
IMPORTING
ET_INDEX_ROWS = gt_zeile.

sort gt_zeile descending by index. "Ganz wichtig, damit die Tabelle gleich gelöscht werden kann und die Indizes zusammenpassen

loop at gt_zeile assigning <ls_zeile>.
  read table gt_kommliste assigning <gs_kommliste_zeile> index <ls_zeile>-index.
  if sy-subrc ne 0.
    delete zrul_buch_komm from <gs_kommliste_zeile>.
    delete gt_kommliste index <ls_zeile>-index.
  endif.
endloop.
lg ADT
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: Markierte Zeile in ALV Grid mittels Button in DB löschen

Beitrag von Miss (ForumUser / 18 / 0 / 0 ) »
Diese Pfeilklammern verstehe ich jetzt hier nicht was haben die für eine Funktion als ich habe keine Field-Symbols verwendet, eher Referenztyp ...d.h. den Datenbanktyp..wie in der Deklaration beschrieben...

Re: Markierte Zeile in ALV Grid mittels Button in DB löschen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Miss hat geschrieben:Diese Pfeilklammern verstehe ich jetzt hier nicht was haben die für eine Funktion als ich habe keine Field-Symbols verwendet, eher Referenztyp ...d.h. den Datenbanktyp..wie in der Deklaration beschrieben...
Bingo. Das sind Feld-Symbole (oder Field-Symbols) und diese sollte man nach Möglichkeit den Workareas vorziehen, da sie um einiges performanter arbeiten.
Die Datendeklaration für mein voriges Coding ist eigentlich ganz einfach:

Code: Alles auswählen.

field-symbols: 
  <ls_zeile> like line of gt_zeile,
  <gs_kommliste_zeile> like line of gt_kommliste.
lg ADT
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.
2580
Views
ALV-Grid ausgewählte Zeile per Button übergeben
von cueamen » 19.06.2007 15:16 • Verfasst in Dialogprogrammierung
3
Antw.
4682
Views
ALV Grid: Abfangen Event:Click auf Button Zeile einfügen
von Dummy » 18.05.2004 16:12 • Verfasst in ABAP Objects®
3
Antw.
2719
Views
ALV-Tabelle: markierte Zeile
von bob_sheknowdas » 11.09.2014 18:06 • Verfasst in Web-Dynpro, BSP + BHTML
10
Antw.
3813
Views
markierte Zeile in N1PATORG auslesen
von sapdepp » 11.10.2018 09:22 • Verfasst in ABAP Objects®
2
Antw.
2305
Views
Markierte Zeilen aus einem ALV löschen
von meier0815 » 23.04.2004 13:25 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

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

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140