2 interne Tabellen mit unterschiedlicher Struktur vergleiche

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

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

2 interne Tabellen mit unterschiedlicher Struktur vergleiche

Beitrag von Chriz ( / / 0 / 3 ) »
Hallo,

ich habe 2 Tabellen (lt_vdarl, lt_or) mit den jeweiligen Arbeitsbereichen (wa_vdarl, wa_or)

Diese 2 Tabellen möchte ich vergleichen und die, die in der einen aber anderen Tabelle nicht sind in einer dritten (lt_difftab) ausgeben.

Als Vergleichsfeld habe ich bei der tabelle vdarl das Feld RANL.

Bei der tabelle or das Feld OBJID_1.

OBJID_1 muss jedoch noch zerlegt werden... ich brauche aus diesem Feld alles, bis auf die ersten 3 stellen....!

Wer kann mir helfen...? Bin gerad schon am tüfteln, aber weil 2 unterschiedliche Strukturen bereitet es mir schwierigkeiten... Freu mich schon auf eure Antworten.

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


Beitrag von Christian Schmidt ( / / 0 / 3 ) »
Hallo Chriz,

zwar ein etwas sinnloses Bsp. was aber den Vergleich zeigt:

TYPES: BEGIN OF type_or,
objid_1 TYPE char20,
END OF type_or.

DATA: lt_vdarl TYPE trty_vdarl,
ls_vdarl TYPE vdarl,
lt_or TYPE TABLE OF type_or,
ls_or TYPE type_or.

SELECT * FROM vdarl INTO TABLE lt_vdarl UP TO 5 ROWS.
LOOP AT lt_vdarl INTO ls_vdarl.
ls_or-objid_1 = sy-mandt.
ls_or-objid_1+3 = ls_vdarl-ranl.
APPEND ls_or TO lt_or.
ENDLOOP.

LOOP AT lt_vdarl INTO ls_vdarl.
LOOP AT lt_or INTO ls_or WHERE objid_1+3(13) EQ ls_vdarl-ranl.
WRITE 'Gleich'.
ENDLOOP.
ENDLOOP.

Mit Gruß
Christian

Beitrag von Gast ( / / 0 / 3 ) »
der Vergleich an sich klappt so wie du das mir gegeben hast..

könntest du mir die so erweitern,dass er
s_or-objid nicht mit der RANL füllt sondern selbst aus der DB liest?


denn habe ja 2 tabellen: vdarl UND or...

versuche nebenbei weiterhin auch selber mein Glück.. big thx schonmal

Beitrag von Gast ( / / 0 / 3 ) »
ach.. habs schon gecheckt.. big thx :-)

Beitrag von Chriz ( / / 0 / 3 ) »
LOOP AT lt_vdarl INTO ls_vdarl.
LOOP AT lt_or INTO ls_or WHERE objid_1+3(13) EQ ls_vdarl-ranl.
WRITE 'Gleich'.
ENDLOOP.
ENDLOOP.


Hier is noch das Problem, dass er zwar alle außer vdarl nimmt, allerdings von der or die tabelle nicht komplett durchsucht...

er vergleicht nur alle aus der vdarl mit EINER aus der or.... und NUR wenn die übereinstimmen nimmt er aus der or den nächsten satz... sollte der aber nicht doppelt sein, hört er nach dem ersten Satz auf.... soll aber or auch komplett durchlaufen und jeden satz daraus mit dem aus der vdarl vergleichen... need help :)

Beitrag von Chriz ( / / 0 / 3 ) »
Habs jetzt so gemacht:

Code: Alles auswählen.

     

      SELECT * FROM vdarl INTO TABLE lt_vdarl WHERE gsart = 'REF'.
      SELECT * FROM /bhw/tb_rf_or INTO TABLE lt_or WHERE rel_typ =
   'REFI'.



 LOOP AT lt_vdarl INTO wa_vdarl.
        LOOP AT lt_or INTO wa_or WHERE objid_1+4(13) EQ wa_vdarl-ranl.

*          WRITE 'Gleich'.
*          MESSAGE '2 gleiche gefunden' TYPE 'I'.
          APPEND wa_or TO lt_difftab.
        ENDLOOP.
        IF NOT ( wa_or-objid_1+4(13) = wa_vdarl-ranl ).
          LOOP AT lt_or INTO wa_or.
            IF ( wa_or-objid_1+4(13) = wa_vdarl-ranl ).
              APPEND wa_or TO lt_difftab.
              EXIT.
            ENDIF.
          ENDLOOP.
        ENDIF.
      ENDLOOP.

Vielleicht kann das noch jemand etwas performanter machen? hab das Gefühl,dass geht noch besser :-)

Beitrag von Neuer Gast ( / / 0 / 3 ) »
Ja, geht performanter. Setze dafür lt_or in eine Hilfstabelle um, so dass als erstes Feld das Vergleichsfeld objid_1+4(13) steht:

Code: Alles auswählen.

DATA: lt_or occurs..., field1, fieldn...objid_1(17), 
      rest, end of lt_or.
DATA: help_or occurs..., h_objid(13), field1 like 
      lt_or-field1, fieldn like lt_or-fieldn, rest
      like lt_or-rest, end of lt_or.
...
loop at lt_or.
move-corresponding lt_or to help_or.
move lt_or-objid_1+4(13) to help_or-h_objid.
append help_or.
endloop.
Nun beide Tabellen nach den relevanten Feldern sortieren:

Code: Alles auswählen.

sort lt_vdarl by ranl.
sort help_or by h_objid.
Und jetzt vergleichen:

Code: Alles auswählen.

data: tabzeile like sy-tabix.
...
loop at lt_vdarl.
read table help_or with key h_objid = lt_vdarl-ranl
     binary search.
if sy-subrc = 0.  "1. Eintrag gefunden, merken wo
   move sy-tabix to tabzeile.
   do.   "Solange lesen, bis ungleich
   read table help_or index tabzeile.
   if sy-subrc ne 0.   "Index größer als Tabelle     
      exit.
   else.
   endif.
   if help_or-objid_1 = lt_vdarl-ranl. "Gleich
      "Index erhöhen für nächsten Read
      compute tabzeile = tabzeile + 1.
      append help_or to lt_difftab. 
   else.
      exit.   "Ungleich, Schleife verlassen.
   endif.
   enddo.    
else.
   "Kein gleicher Eintrag gefunden
endif.
endloop.
Prinzip verstanden ? Mit dem 1. Read stellst du fest, ob ein gleicher Eintrag vorhanden ist. Da die Tabelle help_or nach objid_1 sortiert ist, liest du ab dieser Fundstelle mit Index immer weiter, bis objid_1 sich ändert = Wechsel von objid_1. Das ist natürlich sehr viel performanter, da du nicht mehr für jeden Eintrag aus lt_vdarl die komplette help_or durchnudeln musst, sondern nur noch ab 1. Fundstelle bis letzte Fundstelle.

Seite 1 von 1

Vergleichbare Themen

8
Antw.
4873
Views
2 Tabellen unterschiedlicher Struktur vergleichen?
von Gast » 30.11.2004 15:29 • Verfasst in ABAP® Core
2
Antw.
304
Views
Spalten unterschiedlicher Tabellen vergleichen und dann ändern
von yefpie » 26.07.2022 16:10 • Verfasst in ABAP® für Anfänger
3
Antw.
1297
Views
3
Antw.
6303
Views
Tabellen hinter einer Struktur
von commolus » 02.05.2012 16:08 • Verfasst in ABAP® für Anfänger
0
Antw.
1930
Views
Interne Tabelle in XML-Date (tiefe Struktur)
von airwaver » 07.09.2006 11:14 • Verfasst in ABAP® Core

Über diesen Beitrag

Anonymous
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

Aktuelle Forenbeiträge

Zeilenumbrüche ersetzen
vor 9 Minuten von rob_abc 4 / 19
Dialog-Container mit Toolbar/Status
vor 19 Stunden von tar gelöst 19 / 2084
SAP Trial Version für SAP Fiori
Gestern von tar 2 / 1444

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

Zeilenumbrüche ersetzen
vor 9 Minuten von rob_abc 4 / 19
Dialog-Container mit Toolbar/Status
vor 19 Stunden von tar gelöst 19 / 2084
SAP Trial Version für SAP Fiori
Gestern von tar 2 / 1444

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
Gestern von Bright4.5 1 / 505
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2143
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8738