ALV Grid <- Problem mit Löschen mehrerer Zeilen

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

ALV Grid <- Problem mit Löschen mehrerer Zeilen

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hallo zusammen,

ich habe ein Problem mit dem Löschen mehreren Zeilen aus dem ALV Grid (und aus DB).

Mein Code zZ.

Code: Alles auswählen.

    WHEN 'DELETE'.
*     Sicherheitsabfrage bei Löschen
      PERFORM check_delete CHANGING g_taste.

      CASE g_taste.
        WHEN 1.
*         Lokale Hilfsvariablen
          DATA lt_roid TYPE lvc_t_roid.
          DATA l_roid TYPE lvc_s_roid.

*         Hole mir alle Selektierten Zeilen
          CALL METHOD g_cl_alv->get_selected_rows
            IMPORTING
*             ET_INDEX_ROWS =
              et_row_no     = lt_roid.

*         Wurden Zeilen selektiert
          IF NOT lt_roid IS INITIAL.
            LOOP AT lt_roid INTO l_roid.
*          Loope über die Daten
              LOOP AT gt_adresse INTO g_wa_adresse.

*               Lösche den betreffenden Datensatz in Interner Tabelle
                DELETE gt_adresse INDEX l_roid-row_id.

*               Lösche den betreffenden Datensatz in Datenbanktabelle
                DELETE zmbe_adressdaten
                FROM g_wa_adresse.

              ENDLOOP.
            ENDLOOP.
          ENDIF.

        WHEN 2.
*       nichts machen
        WHEN OTHERS.
*     nichts machen
      ENDCASE.
Kann mir jemand sagen was falsch ist? ich komm nicht drauf. Wenn ich 4 Zeilen markier, dann löscht er nur 3 und eine bleibt bestehen.

Grüße
Markus

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


Beitrag von svenk (ForumUser / 35 / 0 / 0 ) »
Hallo,

ich hatte mal ein ähnliches Problem. Versuche mal folgendes.
Nachdem du die markierten Zeilen ausgelesen hast, sortiere lt_roid absteigend.

Code: Alles auswählen.

sort lt_roid by index descending
Bei mir hat er damals immer nur die Hälfte gelöscht, da ihm irgendwann der Index ausgegangen ist.

MfG Sven

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hallo Sven,

leider gibt es das Feld index nicht in der Tabelle lt_roid. Oder welches meintest du?

Markus

Beitrag von svenk (ForumUser / 35 / 0 / 0 ) »
Hallo,

upps, sorry. Ich selektiere die markierten Zeilen etwas anders als du.
Ich benutze:

Code: Alles auswählen.

* get selected rows
  CALL METHOD grid->get_selected_rows
    IMPORTING
      et_index_rows  =   l_it_sel_data.
Anschließend loope ich über die einzelnen markierten Zeilen.

Bei auslesen wie bei dir

Code: Alles auswählen.

          CALL METHOD g_cl_alv->get_selected_rows 
            IMPORTING 
*             ET_INDEX_ROWS = 
              et_row_no     = lt_roid. 
bekommt man ja die obere und die untere Grenze (ROW_FROM bis ROW_TO)des markierten Bereichs. Oder?

Re: ALV Grid <- Problem mit Löschen mehrerer Zeilen

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
Mavrix hat geschrieben:

Code: Alles auswählen.

            LOOP AT lt_roid INTO l_roid.
*          Loope über die Daten
              LOOP AT gt_adresse INTO g_wa_adresse.

*               Lösche den betreffenden Datensatz in Interner Tabelle
                DELETE gt_adresse INDEX l_roid-row_id.

*               Lösche den betreffenden Datensatz in Datenbanktabelle
                DELETE zmbe_adressdaten
                FROM g_wa_adresse.

              ENDLOOP.
            ENDLOOP.
Wieso loopst du über gt_adresse? Dieser Loop hat keinen Bezug zu lt_roid. Du löschst auf der DB die alle Sätze aus gt_adresse. Hier wäre ein READ mit INDEX l_roid-row_id sinnvoller.
Gruß Hendrik

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hi Sven,

hättest du mal den Teil Code für mich in dem du deinen Delete machst?

Das würde mir vll. helfen. Wäre echt super.
Danke
Markus

Beitrag von svenk (ForumUser / 35 / 0 / 0 ) »
Hallo,

Code: Alles auswählen.

 CALL METHOD grid->get_selected_rows
    IMPORTING
      et_index_rows  =   l_it_sel_data.

  sort l_it_sel_data by index descending.

  LOOP AT l_it_sel_data INTO wa_alv.
    READ TABLE selection_data INDEX wa_alv-index INTO wa_alv_data.
* delete from DB 
   DELETE FROM ekrs
    WHERE belnr = wa_alv_data-belnr
      AND budat = wa_alv_data-budat
      AND lifnr = wa_alv_data-lifnr
      AND buzei = wa_alv_data-buzei
      AND gjahr = wa_alv_data-gjahr.
* delete from ALV-Grid
    DELETE selection_data INDEX wa_alv-index.
  ENDLOOP.
So sieht das bei mir aus. Ein wenig umständlich, aber funktioniert.
Von welchem Typ ist bei dir lt_roid?

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hi Sven,

ich hab es nun so ähnlich gebaut wie du, und es funktioniert genau so wie es soll :-)

hoffe das die Profis, das auch so bauen würden.

Code: Alles auswählen.

    WHEN 'DELETE'.
*     Sicherheitsabfrage bei Löschen
      PERFORM check_delete CHANGING g_taste.

      CASE g_taste.
        WHEN 1.
*         Lokale Hilfsvariablen
          DATA lt_seldata TYPE lvc_t_row.
          DATA l_seldata TYPE lvc_s_row.

*         Hole mir alle Selektierten Zeilen
          CALL METHOD g_cl_alv->get_selected_rows
            IMPORTING
             et_index_rows = lt_seldata.

*         Sortiere die selektieren Zeilen
          SORT lt_seldata BY index DESCENDING.
*         Loope über jede selektierte Zeile
          LOOP AT lt_seldata INTO l_seldata.
*         Lese die Daten in eine Workarea anhand der selektierten Zeile
          READ TABLE gt_adresse INTO g_wa_adresse INDEX l_seldata-index.
*           Lösche den relevanten Datensatz von der DB
            DELETE zmbe_adressdaten FROM g_wa_adresse.
*           Lösche den Datensatz auch aus der internen Tabelle des ALVs
            DELETE gt_adresse INDEX l_seldata-index.
*         Loop Ende
          ENDLOOP.

        WHEN 2.
*       nichts machen
        WHEN OTHERS.
*     nichts machen
      ENDCASE.
@Sven wo arbeitest du denn? (Wo musst du ABAP programmieren?)

Beitrag von svenk (ForumUser / 35 / 0 / 0 ) »
Hallo,

hoffe mal das es jetzt keine negativen Auswirkungen für die Firma hat ;-)
Bin bei der CIBER Novasoft angestellt.
Projekteinsatz zur Zeit in Düsseldorf (kannst ja mal schauen ob du rausfindest bei welchem Unternehmen)

Schönen Tag noch,

Sven

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hi Sven,

na da werde ich heute abend doch mal schauen. Ich arbeite bei SALT Solutions GmbH (vll. schon mal gehört).

Vielleicht könntest du mir auch bei meinem Speichern auf die Sprünge helfen.

Im Moment kann man im ALV eine neue Zeile anhängen, und diese wird dann mithilfe dieses Codings gespeichert.

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*&      Form  new_data
*&---------------------------------------------------------------------*
FORM new_data CHANGING cht_adresse TYPE zmbe_adressdaten_t
                       ch_wa_adresse TYPE zmbe_adressdaten
                       ch_cl_msg TYPE REF TO /auk/cl_msg.
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*

* Stelle die Daten aus interner Tabelle bereit
  LOOP AT cht_adresse INTO ch_wa_adresse
    WHERE id IS initial.

*   Erzeuge ID
    PERFORM get_id CHANGING ch_wa_adresse
                            ch_cl_msg.

    IF ch_cl_msg IS INITIAL.

*     Füge das Feld ID in die Interne Tabelle
      MODIFY cht_adresse FROM ch_wa_adresse.

    ENDIF.
  ENDLOOP.

* Füge die ID in Datenbanktabelle
  MODIFY zmbe_adressdaten FROM ch_wa_adresse.
* Interne Tabelle nochmals für Refresh sortieren
  SORT gt_adresse BY id.

ENDFORM.                    " new_data
So das klappt auch so weit (evtl. hast du Verbesserungsvorschläge) :-)

Aber nun kommt dazu, das man auch Zeilen ändern soll... Und da komm ich nicht mehr weiter, wie ich das realisieren soll.
Vll. hast du einen Ansatz. (ich habe es auch schon versucht, wieder mir Zeilen auslesen)....

Viele Grüße
Markus

ps: ich bin in Würzburg (im Unternehmen) und programmier ein wenig der Übung halber, aber auch nebenbei in einem Projekt.
Hab erst letzten September diese Ausbildung angefangen.

Beitrag von svenk (ForumUser / 35 / 0 / 0 ) »
Ich habe auch erst im Dezember mit dem ABAP-Coden begonnen :lol:

Melde mich nachher noch einmal. Gibt gerade etwas dringendes zu tun.

mfg Sven

Beitrag von svenk (ForumUser / 35 / 0 / 0 ) »
Sorry-Doppelposting

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hi Sven,

wollte mal nachfragen, ob du noch eine Idee zu meinen Problem mit dem Speichern/Ändern eines Datensatzes hast?

ich hab nun schon 2 Forms, eine für einen "Neuen Datensatz" und eine für "Datensatz ändern" nur ich weiß nicht wie ich die in abhängigkeit aufrufen muss?

Kannst du mir da helfen?

Liebe Grüße
Markus

Seite 1 von 1

Vergleichbare Themen

2
Antw.
2585
Views
Zeilen aus ALV Löschen
von moee » 12.03.2009 13:18 • Verfasst in ABAP® für Anfänger
2
Antw.
607
Views
Löschen von itab-Zeilen
von Patrick1982 » 08.07.2021 12:30 • Verfasst in ABAP® für Anfänger
6
Antw.
4645
Views
ALV Drucktaste zum Zeilen einfügen/löschen
von Ibiza90 » 27.08.2013 08:24 • Verfasst in ABAP® für Anfänger
4
Antw.
2468
Views
Mehrere Zeilen aus SALV löschen
von ManMan » 21.07.2017 10:53 • Verfasst in ABAP® für Anfänger
4
Antw.
2356
Views
ABAP Word Zeilen löschen
von Pfirsichbäumchen » 21.04.2017 17:32 • Verfasst in ABAP® Core

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 12 Stunden von DeathAndPain gelöst 22 / 3135
Daten an Tabelle binden
vor 17 Stunden von Lukas Sanders 2 / 1024
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 598

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

Dialog-Container mit Toolbar/Status
vor 12 Stunden von DeathAndPain gelöst 22 / 3135
Daten an Tabelle binden
vor 17 Stunden von Lukas Sanders 2 / 1024
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 598

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2598
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9183