interne tabellen vergleichen

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

interne tabellen vergleichen

Beitrag von TobiB (ForumUser / 38 / 0 / 0 ) » 23.11.2007 13:12
Hallo zusammen,


ich möchte 2 interne tabellen mit der gleichen struktur zeilenweise vergleichen und alle ungleichen einträge löschen.

ich hab das ganze über nen loop versucht, was aber nur dazuführt dass meine interne tabelle dann leer ist.

hoff mal ihr könnt mir da weiter helfen.
LOOP AT itab.

IF itab-gpart NE wa_itab-gpart.
DELETE wa_itab.
ENDIF.

ENDLOOP.

gruß tobi


Wer fehler Findet, darf se behalten :D


Re: interne tabellen vergleichen

Beitrag von ralf.wenzel (Top Expert / 3526 / 161 / 242 ) » 23.11.2007 14:59

Code: Alles auswählen.

loop at lt_itab1 into ls_itab1.
  read table itab2 into ls_itab2 index sy-tabix.
  if ls_itab1 ne ls_itab2.
    delete table lt_itab2 from ls_itab_2.
  endif.
endloop.
Ohne Syntax-Gewähr, ich hab grad kein System zur Hand.

Ralf

Beitrag von TakerOne (Specialist / 102 / 0 / 3 ) » 26.11.2007 12:15
Hi.

Es existiert auch ein FuBa für diese Funktion

Hier ein Beispiel der Anwendung:

REPORT zdz_test_tabellenvergleich
NO STANDARD PAGE HEADING LINE-SIZE 80.

DATA:
gs_zpack_old TYPE STANDARD TABLE OF zpack,
gs_zpack_new TYPE STANDARD TABLE OF zpack,
gs_zpack_del TYPE STANDARD TABLE OF zpack,
gs_zpack_add TYPE STANDARD TABLE OF zpack,
gs_zpack_mod TYPE STANDARD TABLE OF zpack,
no_change TYPE char1,
key_len TYPE i.

key_len = 5.

SELECT * FROM zpack INTO TABLE gs_zpack_old.

SELECT * FROM zpack INTO TABLE gs_zpack_new
WHERE
vbpos = '000010'.

CALL FUNCTION 'CTVB_COMPARE_TABLES'
EXPORTING
table_old = gs_zpack_old
table_new = gs_zpack_new
key_length = key_len
IMPORTING
table_del = gs_zpack_del
table_add = gs_zpack_add
table_mod = gs_zpack_mod
no_changes = no_change.

WRITE: 'hallo'.

Gruß TakerOne
Ich bin eigentlich ein sehr netter Mensch.
Wenn ich Freunde hätte, könnten diese es bestätigen. :-)

Beitrag von TobiB (ForumUser / 38 / 0 / 0 ) » 26.11.2007 14:28
alles klar ich dank euch.

ich werd die beiden varianten mal testen.
gruß tobi


Wer fehler Findet, darf se behalten :D

Beitrag von TobiB (ForumUser / 38 / 0 / 0 ) » 27.11.2007 16:37
also mit dem FuBa bekomm ich des net hin, da gibt's dann nur Laufzeitfehler weil mal wieder eine Docu zu dem Ding fehlt.

hab des ganze jetzt so versucht zu lösen

Code: Alles auswählen.

LOOP AT itab1 INTO wa_itab1.
    READ TABLE itab2 INTO wa_itab2.
    IF wa_itab1 NE wa_itab2.
      DELETE TABLE itab1 FROM wa_itab1.
    ENDIF.
  ENDLOOP.
waas aber beim debuggen dazuführt dass ich ein Commit bekomme und des alv grid leer bleibt.
passiert leider auch beim direkten ausführen :(

so vllt weiß noch einer ne gute idee.

nochmal ne kleine erklärung zu meim problem:
ich hab 2 itabs mit der gleichen struktur aber unterschiedler anzahl von einträgen, ich will aber nur die einträge haben die in beiden tabellen vorhanden sind und diese dann durch n alv grid ausgaben.
gruß tobi


Wer fehler Findet, darf se behalten :D

Beitrag von ralf.wenzel (Top Expert / 3526 / 161 / 242 ) » 27.11.2007 18:47
TobiB hat geschrieben:

Code: Alles auswählen.

LOOP AT itab1 INTO wa_itab1.
    READ TABLE itab2 INTO wa_itab2.
    IF wa_itab1 NE wa_itab2.
      DELETE TABLE itab1 FROM wa_itab1.
    ENDIF.
  ENDLOOP.
waas aber beim debuggen dazuführt dass ich ein Commit bekomme und des alv grid leer bleibt.
Dass du itab1 ausgeben musst ist dir klar, ja?

Was für einen Dump bekommst du? Was steht in den ersten fünf Zeilen? Der kann mit einem commit aber nichts zu tun haben.


Ralf

Beitrag von TobiB (ForumUser / 38 / 0 / 0 ) » 28.11.2007 11:20
ralf.wenzel hat geschrieben:
Dass du itab1 ausgeben musst ist dir klar, ja?

Was für einen Dump bekommst du? Was steht in den ersten fünf Zeilen? Der kann mit einem commit aber nichts zu tun haben.
jo dass ich itab ausgeben muß is mir schon klar, andersrum würd's ja uch kein sinn machn.
ich bekomm gar keinen dump
entweder steht unter in der Status-leiste 'Commit wurde vom System ausgegeben' (oder so ähnlich)
oder im alv grid wird nix angezeigt.

naja ich schreib des ganze nochmal um und bastel dann alles in ein select rein, dann sollt es gehn.
gruß tobi


Wer fehler Findet, darf se behalten :D

Beitrag von ralf.wenzel (Top Expert / 3526 / 161 / 242 ) » 28.11.2007 12:00
TobiB hat geschrieben:oder im alv grid wird nix angezeigt.
Welche der beiden itabs gibst du denn nun aus?


Ralf

Beitrag von TobiB (ForumUser / 38 / 0 / 0 ) » 28.11.2007 13:26
ausgegeben werden soll itab1

hab auch schon des coding überprüfung, dass überall auch itab1 steht.
gruß tobi


Wer fehler Findet, darf se behalten :D

Beitrag von ralf.wenzel (Top Expert / 3526 / 161 / 242 ) » 28.11.2007 14:48
Poste doch mal bitte das Coding, das fängt langsam an mich zu interessieren....


Ralf

Beitrag von TobiB (ForumUser / 38 / 0 / 0 ) » 28.11.2007 15:49
naja des wrd schwierig weil ich es jetzt komplett umgeschrieben hab um diesen vergleich auszuschließen.

im grunde ging's darum dass ich den select

Code: Alles auswählen.

SELECT
     dfkkop~betrh
     dfkkop~augst
     dfkkop~vtref
     dfkkop~bukrs
     dfkkop~gpart
     dfkkop~vkont
     dfkkop~hvorg
     dfkkop~tvorg
     dfkkop~faedn
     dfkkop~opbel
     fkkmako~mstyp

  INTO CORRESPONDING FIELDS OF itab
  FROM ( dfkkop
  INNER JOIN fkkmako ON
  fkkmako~ausbl = dfkkop~opbel
  INNER JOIN dimaparbrok ON
  dimaparbrok~insobject = dfkkop~vtref )
  WHERE
  fkkmako~mstyp NOT IN ('MB') AND
  dfkkop~bukrs IN sel001 AND
  dfkkop~gpart IN sel002 AND
  dfkkop~vtref IN sel003 AND
  dfkkop~faedn IN sel004 AND
  dfkkop~hvorg IN ('1000') AND
  dfkkop~tvorg IN ('1010', '2012', '2013', '2019') AND
  dfkkop~augst NOT IN ('9')
  GROUP BY dfkkop~gpart dfkkop~opbel dfkkop~faedn dfkkop~tvorg
           dfkkop~hvorg dfkkop~vkont dfkkop~bukrs dfkkop~vtref
           dfkkop~betrh dfkkop~augst fkkmako~mstyp.

    MOVE-CORRESPONDING itab TO wa_fitab.

    CLEAR coll.
    CALL FUNCTION 'ISCD_BROK_OP_COLLECT_CHECK'
         EXPORTING
              i_fkkop   = wa_fitab
         IMPORTING
              e_collect = coll.

    IF coll NE ' '.

*     DELETE itab.
*mach nix
    ELSE.
      APPEND itab.
    ENDIF.
  ENDSELECT.
  SORT itab BY gpart.

aufgesplittet hatte und dann eine der select-abfragen durch den fuba gejagt hab um die beiden tabellen danach dann zu vergleichen damit alle ungleichen einträge rausfliegen.

grund warum ich des so machen wollt:
der FuBa ISCD_BROK_OP_COLLECT_CHECK is ziemlich lahm da der auf n paar weitre FuBa's zurückgreift und es dadurch immer weider zu Laufzeitfehlern (Time Out) kam.

so wie ich den jetzt eingebunden hab, geht's etwas schneller, wobei die auswetung immernoch gut 10 min brauch.

wenn am ganzen coding intressiert bist kann ich dir des gern mal schicken.
gruß tobi


Wer fehler Findet, darf se behalten :D

Seite 1 von 1

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und besseren Inhalt:

Aktuelle Forenbeiträge

Mandantenabhängige Farbgebung?
vor 10 Stunden von gtoXX 8 / 2227
Mandantenabhängige Z-Tabelle
vor 10 Stunden von gtoXX 4 / 129
Smartform debuggen Main-Teil
vor 22 Stunden von Bright4.5 15 / 411

Vergleichbare Themen

2 interne Tabellen vergleichen
von swonny » 06.11.2006 16:12
2 interne Tabellen vergleichen
von Klende » 21.11.2005 15:16
2 interne Tabellen vergleichen
von Bright4.5 » 28.03.2019 08:56
2 interne Tabellen vergleichen
von Frank Schmitt » 24.06.2020 09:40
Interne Tabellen: Feldinhalte vergleichen
von Mario Reum » 09.10.2019 21:36