Ich bin auf der Suche einer Lösung die ein folgendes Problem behandelt. Jedoch hilft dabei BKK_COMPARE_TABLES nicht weiter, da dieser FB nur komplette Zeilen mit einander vergleicht, und nur bei Tabellen, die gleich lang sind, falls ich das richtig sehe.
Ich bastel an einer Methode, zwei Tabellen der gleichen Struktur mit einander zu synchronisieren. Also folgendes Beispiel:
Code: Alles auswählen.
it_alt it_neu
F1 | F2 | F3 F1 | F2 | F3
----+----+---- ----+----+----
Key| Key| - Key|Key | -
----+----+---- ----+----+----
001| 01 | v1 001| 01 | v5
002| 02 | v2 003| 01 | v3
003| 01 | v3 004| ...| ...
004| ...| ...
Es können also Einträge gelöscht, hinzugefügt oder einfach geändert worden sein.
Wie würde man den einen solchen Vergleichstest machen
Code: Alles auswählen.
LOOP AT it_neu INTO wa_neu
READ TABLE it_alt INTO wa_alt WHERE "alle_keyfelder_alt EQ alle_keyfelder_neu".
IF sy-subrc EQ 4.
WRITE: 'Eintrag ist neu!'.
ELSEIF sy-subrc EQ 2.
IF "restliche_nichtkeyfelder_alt EQ alle_nichtkeyfelder_neu"
WRITE: 'Eintrag ist verändert!'.
ENDIF.
ELSE.
WRITE: 'Eintrag ist unverändert'.
ENDIF.
ENDLOOP.
Und das gleich dann nochmal in umgekehrter Reihenfolge, um herauszufinden, welche Einträge gelöscht wurden?
Herauskommen sollte also:
001| 01: Eintrag ist verändert!
002| 02: Eintrag gelöscht!
003| 01: Eintrag ist unverändert!
005| ..: Eintrag ist neu! (zum Beispiel)