Strukturen dynamisch mit Feldsymbolen vergleichen

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
10 Beiträge • Seite 1 von 1
10 Beiträge Seite 1 von 1

Strukturen dynamisch mit Feldsymbolen vergleichen

Beitrag von cmalthaner (ForumUser / 5 / 5 / 0 ) »
Hallo!

Mein Ziel ist, zwei gleiche Strukturen (LIKE LINE OF MARA) miteinander zu vergleichen.
Die Struktren enhalten jedoch Felder, die ich nicht miteinander vergleichen möchte, bspw. Änderungsdatum etc.

Wie bekomme ich hin, dass zur Laufzeit entschieden werden kann, welche Felder nicht in den Vergleich miteinfließen und welche schon?

Es müsste irgendwie mit der Klasse CL_ABAP_STRUCTDESCR und Feldsymbolen hinhauen, denke ich. Nun ist aber das Problem, dass in der Sturktur (LIKE LINE OF MARA) auch INCLUDES und APPENDS enthalten sind, die ich irgendwie "flachklopfen" müsse, um mit der oben genannten Klasse zu arbeiten.

Hat jemand eine Idee?

Vielen Dank schonmal!

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


Re: Strukturen dynamisch mit Feldsymbolen vergleichen

Beitrag von a-dead-trousers (Top Expert / 4396 / 223 / 1182 ) »
Flachklopfen ist nicht notwendig ;)
Nur wenn du wirklich die einzelnen Feldtypen wieder als CL_ABAP_DATADESCR brauchst, musst du über GET_COMPONENTS die Felder "auflösen".
(Feld AS_INCLUDE bzw. SUFFIX sind dabei zu berücksichtigen/aufzulösen)
Schau dir dazu mal meinen Code-Schnippsel an

Ansonsten reicht die Tabelle COMPONENTS der CL_ABAP_STRUCTDESCR. Da stehen normalerweise alle Felder drinnen.

lg ADT
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: Strukturen dynamisch mit Feldsymbolen vergleichen

Beitrag von cmalthaner (ForumUser / 5 / 5 / 0 ) »
Ich hab das schon versucht mit GET_COMPONENTS usw., da listet es mir (beim Debuggen) aber nur die Komponenten der Struktur auf, die nicht inkludiert sind, also ist flachklopfen doch irgendwie notwendig, weil er sonst nicht drauf zugreifen kann..

Re: Strukturen dynamisch mit Feldsymbolen vergleichen

Beitrag von a-dead-trousers (Top Expert / 4396 / 223 / 1182 ) »
Okay, vielleicht hab ich das erst nachdem du es gelesen hast hinzugefügt:
a-dead-trousers hat geschrieben:Schau dir dazu mal meinen Code-Schnippsel an.
Die COMPONENTS der CL_ABAP_STRUCTDESCR hast du auch schon überprüft, oder?
Ich meine NICHT die Methode GET_COMPONENTS sondern das Attribut COMPONENTS. Die beiden haben einen ganz anderen Aufbau sind aber verwirrend ähnlich benannt.

lg ADT

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

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: Strukturen dynamisch mit Feldsymbolen vergleichen

Beitrag von black_adept (Top Expert / 4090 / 127 / 940 ) »
Hallo cmalthaner,

wie genau soll denn dein Vergleich aussehen? Willst du alle Felder anlisten die unterschiedlich sind oder willst du nur sagen "ungleich" oder willst du alle Felder darstellen und pro Feld eine Aussage treffen à la "gleich" oder "ungleich"?
Und die beiden Strukturen - können das tatsächlich beliebige Strukturen sein oder sind das im DDIC angelegte Strukturen?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Strukturen dynamisch mit Feldsymbolen vergleichen

Beitrag von cmalthaner (ForumUser / 5 / 5 / 0 ) »
dead-a-trousers, vielen Dank, ich probier mal ein bisschen rum :)

black_adept, ich möchte grundsätzlich alle Felder der Strukturen vergleichen, außer die, die dann weggelassen werden (entscheidet sich dann zur Laufzeit).
Die Strukturen werden dann mit nem ALV ausgegeben. Und eine Meldung soll kommen ("Daten aus MARA zu Materialnummern sind gleich"), nach dem die Strukturen verglichen wurden. Da es aber keinen Sinn macht, Änderungsdatum und Erstellername oder sowas zu vergleichen, weil mich das ja beim Material nicht interessiert, möcht ich das generisch irgendwie weglassen.. Ich steh echt aufm Schlauch und komm nicht drauf, wie.

Re: Strukturen dynamisch mit Feldsymbolen vergleichen

Beitrag von cmalthaner (ForumUser / 5 / 5 / 0 ) »
Achso, und das sind im DDIC angelegte Tabellen, zu denen/aus denen Strukturen erzeugt werden, bspw. MARA (Grunddaten zu Materialien)

Re: Strukturen dynamisch mit Feldsymbolen vergleichen

Beitrag von black_adept (Top Expert / 4090 / 127 / 940 ) »
Hi cmalthaner,

du hast 2 zu vergleichende Strukturen ( Struc1, Struc2 ) und eine Liste von Feldern, die beim Vergleich ausgenommen werden sollen.

Code: Alles auswählen.

LOOP AT nicht zu vergleichende Felder.

ASSIGN COMPONENT Name des nicht zu vergleichenden Feldes OF STRUCTURE Struc1 to <FS>.
CHECK SY-SUBRC = 0.
CLEAR <FS>.

ASSIGN COMPONENT Name des nicht zu vergleichenden Feldes OF STRUCTURE Struc2 to <FS>.
CHECK SY-SUBRC = 0.
CLEAR <FS>.

ENDLOOP.

* Da die nicht zu vergleichenden Felder in beiden Strukturen nun gleich sind, kannst du mittels eines normalen Vergleichs weitermachen
IF Struc1 = Struc2.
  Gleich in allen zu vergleichenden Feldern
ELSE.
  Ungleich in mindestens einem zu vergleichenden Feld.
ENDIF.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
cmalthaner

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Strukturen dynamisch mit Feldsymbolen vergleichen

Beitrag von a-dead-trousers (Top Expert / 4396 / 223 / 1182 ) »
black_adept hat geschrieben:Da die nicht zu vergleichenden Felder in beiden Strukturen nun gleich sind, kannst du mittels eines normalen Vergleichs weitermachen
Aber nur wenn die beiden Strukturen tatsächlich die gleichen Felder haben.
Außerdem werden bei deiner Lösung möglicherweise Felder gelöscht die nicht gelöscht werden sollen/dürfen.

Besser wäre es so:

Code: Alles auswählen.

ld_equal = abap_true.
LOOP AT lt_components ASSIGNING <ls_components>.
  UNASSIGN <ls_field01>.
  UNASSIGN <ls_field02>.
  ASSIGN COMPONENT <ls_components>-name OF STRUCUTE ls_struct01 TO <ls_field01>.
  ASSIGN COMPONENT <ls_components>-name OF STRUCUTE ls_struct02 TO <ls_field02>.
  IF <ls_field01> IS ASSIGNED AND <ls_field02> IS ASSIGNED AND <ls_field01> NE <ls_field02>.
    ld_equal = abap_false. "Prüfvariable löschen
    exit. "Abbruch, weitere Vergleiche sind sinnlos
  ENDIF.
ENDLOOP.
Alternativ kann man auch das beidseitige Vorhandensein prüfen:

Code: Alles auswählen.

IF <ls_field01> IS NOT ASSIGNED OR <ls_field02> IS NOT ASSIGNED OR <ls_field01> NE <ls_field02>.
lg ADT

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

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: Strukturen dynamisch mit Feldsymbolen vergleichen

Beitrag von a-dead-trousers (Top Expert / 4396 / 223 / 1182 ) »
Was ich hier nicht berücksichtigt habe ist, wenn zwar die NAMEN der Felder gleich aber die Datentypen unterschiedlich sind.

Der Fairness halber muss ich meine Aussage von vorhin zugunsten von black_adept etwas besser ausformulieren:
  • Wenn wirklich komplett dieselben Felder in beiden Strukturen vorkommen
  • Die Anzahl der NICHT zu vergleichenden Felder WESENTLICH (mehr als 10 Unterschied) geringer ist als die zu vergleichenden
  • Und man die Änderung der Struktur in Kauf nehmen kann
Dann sollte seine Lösung etwas performanter sein als meine.

lg ADT

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

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

2
Antw.
5400
Views
Strukturen vergleichen
von snooze » 17.01.2005 09:25 • Verfasst in ABAP® Core
3
Antw.
3092
Views
SORT mit Feldsymbolen
von MarkusW » 01.11.2007 13:14 • Verfasst in ABAP® Core
2
Antw.
4814
Views
Move Corresponding bei Feldsymbolen?
von MarkusW » 31.10.2007 09:27 • Verfasst in ABAP® Core
5
Antw.
2193
Views
Probleme mit Feldsymbolen
von LittleT » 16.10.2007 09:40 • Verfasst in ABAP® für Anfänger
26
Antw.
10194
Views
Unicode bei Feldsymbolen (UC_OBJECTS_NOT_CONVERTIBLE)
von zer0 » 14.03.2013 11:43 • Verfasst in ABAP® Core

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 9 Stunden von black_adept gelöst 23 / 3631
User Exit EXIT_RQCPRM10_001
vor 9 Stunden von a-dead-trousers 2 / 228
Trennen Strasse und Hausnummer
vor 15 Stunden von payten 13 / 10563
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1280

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 9 Stunden von black_adept gelöst 23 / 3631
User Exit EXIT_RQCPRM10_001
vor 9 Stunden von a-dead-trousers 2 / 228
Trennen Strasse und Hausnummer
vor 15 Stunden von payten 13 / 10563
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1280

Unbeantwortete Forenbeiträge

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