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.
Code: Alles auswählen.
sort lt_roid by index descending
Code: Alles auswählen.
* get selected rows
CALL METHOD grid->get_selected_rows
IMPORTING
et_index_rows = l_it_sel_data.
Code: Alles auswählen.
CALL METHOD g_cl_alv->get_selected_rows
IMPORTING
* ET_INDEX_ROWS =
et_row_no = lt_roid.
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.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.
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.
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.
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