Checken ob eine Spalte einen Wert hat

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

Checken ob eine Spalte einen Wert hat

Beitrag von Gekomo (ForumUser / 10 / 4 / 0 ) »
Hallo,

ich habe folgendes Problem: Ich habe eine interne Tabelle, bei der eine Spalte editierbar ist. Wenn ich etwas hineinschreibe, soll ich die Tabelle speichern können und beim nächsten Mal aufrufen, soll die Änderung noch vorhanden sein. Mit der Methode check_changed_data habe ich es jetzt zumindest mal hinbekommen, dass die Änderungen in der Spalte, auch in meine interne Tabelle übernommen werden. Beim nächsten Mal aufrufen, sind diese Änderungen aber bisher trotzdem wieder weg. Also möchte ich zuerst mal die Änderungen der Spalte nehmen und in eine zweite interne Tabelle zwischenlagern, aber nur, wenn sich ein Wert innerhalb dieser Spalte auch wirklich verändert hat. Und hier liegt das Problem. Ich weiß nicht, wie ich das formulieren soll. Ich habe an etwas in dieser Art gedacht:

LOOP AT lt_materialundtext ASSIGNING FIELD-SYMBOL(<fs_data>).
IF <fs_data>-text is not initial.
Mache xy
Endif.
endloop.
Aber weder weiß ich ob das so funktionieren könnte, noch wie ich die Änderungen von meiner einen internen Tabelle in die andere bekomme.

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


Re: Checken ob eine Spalte einen Wert hat

Beitrag von Gekomo (ForumUser / 10 / 4 / 0 ) »
Ich sollte noch anmerken, dass ich die interne Tabelle mit hilfe der cl_gui_alv_grid ausgebe

Re: Checken ob eine Spalte einen Wert hat

Beitrag von a-dead-trousers (Top Expert / 4372 / 222 / 1175 ) »
Ich nehme mal an du verwendest für das Editieren ein ALV Grid oder?
Um nun einen "Unterschied" zwischen der ursprünglichen Tabelle und der aktuellen Tabelle zu erkennen gibt es im Grunde zwei Möglichkeiten:
1. Der "klassische" Ansatz indem man vor der Anzeige im ALV Grid eine Kopie der Tabelle macht und beim Verlassen die Kopie mit dem aktuellen Inhalt vergleicht und so die Änderungen erkennt.
2. Der "objektorientierte" Ansatz indem man mit den Event DATA_CHANGED (vor der Änderung in der internen Tabelle) oder DATA_CHANGED_FINISHED (nach der Änderungen in der internen Tabelle) die genaue Position (Zeile und Spalte) der Änderung erhällt.

Ich persönlich bevorzugen den ersten Ansatz weil beim zweiten Ansatz sehr viele "synchrone" Aufrufe zwischen SAPgui und Applikationsserver erfolgen und es dadurch je nach Umfang der durchgeführten Zusatzverarbeitung zu merkbaren Verzögerungen auf Seiten der Benutzer kommt.
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: Checken ob eine Spalte einen Wert hat

Beitrag von Gekomo (ForumUser / 10 / 4 / 0 ) »
a-dead-trousers hat geschrieben:
20.10.2022 15:03
Ich nehme mal an du verwendest für das Editieren ein ALV Grid oder?
Um nun einen "Unterschied" zwischen der ursprünglichen Tabelle und der aktuellen Tabelle zu erkennen gibt es im Grunde zwei Möglichkeiten:
1. Der "klassische" Ansatz indem man vor der Anzeige im ALV Grid eine Kopie der Tabelle macht und beim Verlassen die Kopie mit dem aktuellen Inhalt vergleicht und so die Änderungen erkennt.
2. Der "objektorientierte" Ansatz indem man mit den Event DATA_CHANGED (vor der Änderung in der internen Tabelle) oder DATA_CHANGED_FINISHED (nach der Änderungen in der internen Tabelle) die genaue Position (Zeile und Spalte) der Änderung erhällt.

Ich persönlich bevorzugen den ersten Ansatz weil beim zweiten Ansatz sehr viele "synchrone" Aufrufe zwischen SAPgui und Applikationsserver erfolgen und es dadurch je nach Umfang der durchgeführten Zusatzverarbeitung zu merkbaren Verzögerungen auf Seiten der Benutzer kommt.
Und wie vergleicht man diese Kopie dann mit dem aktuellen Inhalt? Wenn ich die erste Option nehmen würde

Re: Checken ob eine Spalte einen Wert hat

Beitrag von a-dead-trousers (Top Expert / 4372 / 222 / 1175 ) »
Entweder per Index

Code: Alles auswählen.

LOOP AT itab1 ASSIGNING FIELD-SYMBOL(<line1>).
  READ TABLE itab2 ASSIGNING FIELD-SYMBOL(<line2>) INDEX sy-tabix.
  IF sy-subrc eq 0.
    IF <line1> NE <line2>.
* Daten haben sich verändert
    ELSE.
* Daten sind gleich
    ENDIF.
  ELSE.
* Daten wurden hinzugefügt
  ENDIF.
ENDLOOP.
LOOP AT itab2 ASSIGNING FIELD-SYMBOL(<line3>).
  READ TABLE itab1 TRANSPORTING NO FIELDS INDEX sy-tabix.
  IF sy-subrc NE 0.
* Daten wurden gelöscht
  ENDIF.
ENDLOOP.
Oder per Schlüssel (Tabellentyp mit Schlüssel)

Code: Alles auswählen.

LOOP AT itab1 ASSIGNING FIELD-SYMBOL(<line1>).
  READ TABLE itab2 ASSIGNING FIELD-SYMBOL(<line2>) FROM <line1>.
  IF sy-subrc eq 0.
    IF <line1> NE <line2>.
* Daten haben sich verändert
    ELSE.
* Daten sind gleich
    ENDIF.
  ELSE.
* Daten wurden hinzugefügt
  ENDIF.
ENDLOOP.
LOOP AT itab2 ASSIGNING FIELD-SYMBOL(<line3>).
  READ TABLE itab1 TRANSPORTING NO FIELDS FROM <line3>.
  IF sy-subrc NE 0.
* Daten wurden gelöscht
  ENDIF.
ENDLOOP.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Gekomo

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

1
Antw.
826
Views
Höchsten Wert einer Spalte erkennen
von abap_frischling » 09.02.2022 14:44 • Verfasst in ABAP® für Anfänger
1
Antw.
319
Views
Wert einer Spalte mit Loop Anweisung ändern
von Gekomo » 30.09.2022 15:14 • Verfasst in ABAP® für Anfänger
1
Antw.
2274
Views
lust meine coding zu checken ?!?!
von Gast » 11.07.2005 09:45 • Verfasst in ABAP Objects®
4
Antw.
3087
Views
Lust, meinen Code zu checken? Fehler bei interner Tabelle
von Hilfe77 » 02.12.2004 11:02 • Verfasst in ABAP Objects®
1
Antw.
2822
Views
Spalte im ALV bestimmen
von Thorsten » 04.04.2005 09:42 • Verfasst in Tips + Tricks & FAQs

Über diesen Beitrag


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.