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 / 4397 / 223 / 1182 ) »
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 / 4397 / 223 / 1182 ) »
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 / 4397 / 223 / 1182 ) »
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 / 4397 / 223 / 1182 ) »
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.
2724
Views
ALV-Grid ausgewählte Zeile per Button übergeben
von cueamen » 19.06.2007 15:16 • Verfasst in Dialogprogrammierung
3
Antw.
2821
Views
ALV-Tabelle: markierte Zeile
von bob_sheknowdas » 11.09.2014 18:06 • Verfasst in Web-Dynpro, BSP + BHTML
10
Antw.
4063
Views
markierte Zeile in N1PATORG auslesen
von sapdepp » 11.10.2018 09:22 • Verfasst in ABAP Objects®
0
Antw.
1529
Views
ALV-Grid: markierte Zeilen und Spalten
von dmyrb5 » 15.02.2006 15:17 • Verfasst in ABAP Objects®
5
Antw.
3735
Views
GET_SELETCED_ROWS erkennt im ALV-Grid nach Änderung markierte Zeilen nicht
von sapdepp » 08.05.2024 10:18 • Verfasst in ABAP Objects®

Ü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

Trennen Strasse und Hausnummer
vor 28 Minuten von DeathAndPain 19 / 11155
Dialog-Container mit Toolbar/Status
vor 20 Stunden von black_adept gelöst 27 / 4298
IT0024 Qualifikationen CP-ID
vor 21 Stunden von ArjenR 1 / 194

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

Trennen Strasse und Hausnummer
vor 28 Minuten von DeathAndPain 19 / 11155
Dialog-Container mit Toolbar/Status
vor 20 Stunden von black_adept gelöst 27 / 4298
IT0024 Qualifikationen CP-ID
vor 21 Stunden von ArjenR 1 / 194

Unbeantwortete Forenbeiträge

IT0024 Qualifikationen CP-ID
vor 21 Stunden von ArjenR 1 / 194
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 3127
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9719