Datensätze in zwei verschieden Tabellen löschen

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

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

Datensätze in zwei verschieden Tabellen löschen

Beitrag von abap_frischling (ForumUser / 31 / 12 / 0 ) »
Hallo, ich bin relativ frisch und ganz neu in dem Thema ABAP Entwicklung.
Ich arbeite in einem relativ kleinen Team, daher muss ich mich oft an das Internet wenden.
Meine Aufgabe: ich muss aus zwei verschiedenen Tabellen alte Datensätze löschen (> ein Jahr) und dafür soll ich ein Programm schreiben. Die beiden Tabellen besitzen ein gleiches Feld, anhand diesen Feldes soll das Programm in beiden Tabellen die Datensätze löschen. Ich habe es mit einer Internen Tabelle versucht, worin ich alle Datensätze zusammenfügen würde, bis jetzt leider ohne Erfolg. Es wäre mega nett, wenn mir hier jemand weiterhelfen könnte. Vielen Dank.


REPORT zmm_dispolist_del.

TYPES: BEGIN OF ts_itab,
mandt TYPE zzt_mdkp1-mandt,
dtart TYPE zzt_mdkp1-dtart,
matnr TYPE zzt_mdkp1-matnr,
plwrk TYPE zzt_mdkp1-plwrk,
plscn TYPE zzt_mdkp1-plscn,
dsdat TYPE zzt_mdkp1-dsdat,
dtnum TYPE zzt_mdtb-dtnum,
dtpos TYPE zzt_mdtb-dtpos,
END OF ts_itab.

DATA:
ls_itab TYPE ts_itab,
lt_itab TYPE TABLE OF ts_itab,
ls_mdkp1 TYPE zzt_mdkp1,
lt_mdkp1 TYPE TABLE OF zzt_mdkp1,
ls_mdtb TYPE zzt_mdtb,
lt_mdtb TYPE TABLE OF zzt_mdtb,
* lv_dtnum TYPE zzt_mdkp1-dtnum,
lv_datum TYPE sy-datum.


PARAMETERS: lv_dsdat TYPE mdkp-dsdat DEFAULT sy-datum,
lv_werks TYPE mdkp-plwrk DEFAULT '2200'.


INITIALIZATION.
*Datum berechnen für die Spanne welche ab sy-datum gelöscht werden soll -> sy-datum - 365 = alle Daten die älter als ein Jahr sind
lv_datum = sy-datum - 840.

START-OF-SELECTION.
*Datenbeschaffung aus der ersten Tabelle in eine interne Tabelle
LOOP AT lt_mdkp1 INTO ls_mdkp1.
SELECT * FROM zzt_mdkp1 INTO ls_mdkp1
WHERE dsdat < lv_datum.
INSERT ls_mdkp1 INTO TABLE lt_mdkp1.
* DELETE zzt_mdkp1 FROM ls_mdkp1.
ENDSELECT.
ENDLOOP.
*Datenbeschaffung aus der zweiten Tabelle mit dem Feld dtnum, welches gleich sein muss wie in der ersten internen Tabelle
LOOP AT lt_mdtb INTO ls_mdtb.
SELECT * FROM zzt_mdtb INTO ls_mdtb
WHERE dtnum = ls_mdkp1-dtnum.
INSERT ls_mdtb INTO TABLE lt_mdtb.
* DELETE zzt_mdtb FROM ls_mdtb.
ENDSELECT.
ENDLOOP.

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


Re: Datensätze in zwei verschieden Tabellen löschen

Beitrag von PeterPaletti (Specialist / 350 / 32 / 97 ) »
Wer ein SELECT innerhalb eines LOOPS macht, bekommt was auf die Finger, hat mein ABAP-Lehrer immer gesagt. Glücklicherweise funktioniert das in deinem Programm eh nicht, da die internen Tabellen zu Beginn leer sind, und der LOOP nicht durchlaufen wird.
Rätselhaft ist mir auch, warum du 2 PARAMETRRS, lv_dsdat und lv_werks deklarierst, diese aber gar nicht weiter benutzt. Ebenfalls bleibt wohl dein Geheimnis, wieso du im Kommentar ein Datum sy-datum - 365 berechnest, im Quellcode aber auf sy-datum -840 kommst. Verstehe ich nicht so ganz.

Wie dem auch sei: in der ersten Runde lässt du das LOOP einfach weg und nimmst ein

Code: Alles auswählen.

SELECT * FROM zzt_mdkp1 INTO TABLE lt_mdkp1
WHERE dsdat < lv_datum.
Wenn du es quick and dirty haben willst., reicht ein LOOP über diese eine Tabelle, in dem du ein LOOP machst und alles aus zzt_mdtb löschst, was an dtnum entspricht.

Also

Code: Alles auswählen.

LOOP AT lt_mdkp1 INTO ls_mdkp1. 
lv_tabix = sy-tabix. 
DELETE FROM zzt_mdtb WHERE dtnum = ls_mdkp1-dtnum.
IF sy-subrc NE 0. 
DELETE lt_mdkp1 INDEX lv_tabix.
ENDIF. 
ENDLOOP. 
Und zum Schluss noch die übrigen Einträge aus zzt_mdkp1 löschen:

Code: Alles auswählen.

IF NOT lt_mdkp1 IS INITIAL. 
DELETE zzt_mdkp1 FROM TABLE lt_mdkp1. 
ENDIF. 
Wie schon gesagt: Alles ziemlich old-school und recht quick and dirty.

Von der Architektur her, würde man eigentlich eine Datenbanksperre auf die Einträge erwarten. Außerdem sollte man die Logik in einen Verbucherfunktionsbaustein kapseln und den im Report verwenden.
Old-School ist Verwendung von festen Strukturen als Arbeitsbereichen, da nimmt man heutzutage ein FELD-SYMBOL zur Laufzeit.
Zuletzt geändert von PeterPaletti am 29.01.2022 03:01, insgesamt 1-mal geändert.

Folgende Benutzer bedankten sich beim Autor PeterPaletti für den Beitrag:
abap_frischling


Re: Datensätze in zwei verschieden Tabellen löschen

Beitrag von Alpmann (ForumUser / 63 / 5 / 20 ) »
Hallo abap_frischling,

wenn du damit Dispolisten reorganisieren möchtest, dann geht das auch viel einfacher - und ohne ABAP:

Mit der MD08 können die Dispo-Listen reorganisiert werden. Dort kann man nach Werk und Disponent selektieren - leider ohne Mehrfachauswahl. Um da einmal Grund rein zu bekommen würde ich an einem Wochenende mal das für alle Werk/Disponenten Kombinationen durchlaufen lassen.

Mit freundlichen Grüßen
Matthias Alpmann

Re: Datensätze in zwei verschieden Tabellen löschen

Beitrag von PeterPaletti (Specialist / 350 / 32 / 97 ) »
Alpmann hat geschrieben:
29.01.2022 00:01
Hallo abap_frischling,

wenn du damit Dispolisten reorganisieren möchtest, dann geht das auch viel einfacher - und ohne ABAP:

Mit der MD08 können die Dispo-Listen reorganisiert werden. [...]
Mit freundlichen Grüßen
Matthias Alpmann
Hallo Matthias,

wenn ich es recht verstehe, dann möchte abap_frischling Datensätze aus den Tabellen zzt_mdkp1 und zzt_mdtb löschen.
Dem Namen nach handelt es sich dabei um selbst erstellte Tabellen, möglicher Weise Kopien von MDKP und MDTP.
Ich befürchte, dass mit einer SAP-Standard-Transaktion wie MD08, Kundentabellen nicht reorganisiert werden können. Es sei denn, es liegt eine Modifikation des SAP-Programms vor

Re: Datensätze in zwei verschieden Tabellen löschen

Beitrag von abap_frischling (ForumUser / 31 / 12 / 0 ) »
Hat geklappt, super!!!
Dankeschön, für die Antworten und Hilfestellung. Wie gesagt ich bin sehr sehr neu in dem ganzen Thema und freue mich sehr über jede Hilfe. Sehr nett von euch! Schönen Tag! :)

Seite 1 von 1

Vergleichbare Themen

2
Antw.
4111
Views
Datensätze aus Tabelle Mara löschen!?
von PMK » 27.10.2005 12:15 • Verfasst in ABAP® für Anfänger
1
Antw.
711
Views
Datensätze sortieren und neueste Löschen
von evie » 15.07.2019 11:35 • Verfasst in ABAP® für Anfänger
2
Antw.
3234
Views
Doppelte Datensätze aus einer Tabelle löschen
von managero » 21.04.2008 17:34 • Verfasst in ABAP® Core
3
Antw.
594
Views
Löschen der Datensätze auf Basis einer Datums-Selection
von kaim77 » 10.05.2023 12:45 • Verfasst in ABAP® Core
28
Antw.
16624
Views
Anzahl Datensätze in internen Tabellen
von debianfan » 25.04.2017 13:44 • 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

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.

Unbeantwortete Forenbeiträge

SD_PRINT_TERMS_OF_PAYMENT
vor einer Woche von Manfred K. 1 / 2728
BUSOBJEKT zu CMIS PHIO ermitteln
vor 4 Wochen von snooga87 1 / 4534