Duplicate Keys in ITAB

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

Duplicate Keys in ITAB

Beitrag von ralf.wenzel (Top Expert / 3472 / 155 / 223 ) » 11. Dez 2014 15:16

Moin.

Code: Alles auswählen.

DATA:
  test_st type standard table of char01,
  test_so type sorted table of char01 with unique key table_line.

APPEND:
  'A' to test_st,
  'A' to test_st.

TRY.
  test_so = test_st.
  CATCH CX_SY_ITAB_DUPLICATE_KEY.
ENDTRY.
Warum wird der Kurzdump durch den CATCH nicht verhindert? Kann ich den irgendwie verhindern, ohne manuelle Prüfungen durchzuführen?


Re: Duplicate Keys in ITAB

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) » 11. Dez 2014 16:20

Nein, den Fehler kannst Du nicht, ohne manuelle Prüfungen durchzuführen, verhindern.

Re: Duplicate Keys in ITAB

Beitrag von PeterPaletti (Specialist / 133 / 21 / 26 ) » 11. Dez 2014 16:23

Vielleicht hilft dir dieser Link http://help.sap.com/abapdocu_731/en/abe ... icates.htm weiter.

Wenn man es so macht, funktionierts. Ganz ohne CATCH.

Code: Alles auswählen.

DATA ld_char01 TYPE char01.
DATA:
  test_st TYPE STANDARD TABLE OF char01,
  test_so TYPE SORTED TABLE OF char01 WITH UNIQUE KEY table_line.

APPEND:
  'A' TO test_st,
  'A' TO test_st.


LOOP AT test_st INTO ld_char01.
  INSERT ld_char01 INTO TABLE test_so.
  if sy-subrc ne 0.
    write: / 'Fehler beim Eintrag'.
  endif.
ENDLOOP.

Re: Duplicate Keys in ITAB

Beitrag von ralf.wenzel (Top Expert / 3472 / 155 / 223 ) » 11. Dez 2014 16:28

Mir ist schon klar, dass ich die 250.000 Einzelsätze auch einzeln reinschreiben kann - ich programmiere erst seit gut 15 Jahren in ABAP. ein bisschen was kann ich da schon. Die Frage war, warum das Verhalten unterschiedlich ist je nachdem ob ich einen oder mehrere Sätze reinschiebe.

Ein "sort" und ein "delete adjacent duplicates..." wird meine Variante sein, aber es hätte ja sein können, dass ich eine andere Ausnahme in den CATCH hätte reinnehmen müssen.

Die Antwort, die du mir geliefert hast, ist abschließend und sagt: "Weil die SAP das so implementiert hat".

Nicht sehr befriedigend, kann man aber mit leben.

Re: Duplicate Keys in ITAB

Beitrag von black_adept (Top Expert / 3308 / 60 / 602 ) » 12. Dez 2014 01:15

Guten Abend Ralf,

wenn du unbedingt einen Einzeiler haben willst, der mittels Catch reagiert wenn du Duplikate hast,
und wenn du ein System mit einem recht neuen Releasestand hast funktioniert das, wenn du folgende Ersetzung vornimmst.

Code: Alles auswählen.

*   test_so = test_st.
    test_so = VALUE #( FOR wa IN test_st ( wa ) ).

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
ralf.wenzel

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Duplicate Keys in ITAB

Beitrag von ralf.wenzel (Top Expert / 3472 / 155 / 223 ) » 12. Dez 2014 01:45

Stefan, ich will ein Kind von dir!!!! LOL

Danke, an VALUE hatte ich gar nicht gedacht!

Re: Duplicate Keys in ITAB

Beitrag von ewx (Top Expert / 4067 / 177 / 400 ) » 12. Dez 2014 08:38

black_adept hat geschrieben: test_so = VALUE #( FOR wa IN test_st ( wa ) ).
Ich werd zu alt für den *... :)

Re: Duplicate Keys in ITAB

Beitrag von ralf.wenzel (Top Expert / 3472 / 155 / 223 ) » 12. Dez 2014 08:53

Da hat dich wohl der Wortfilter ausgetrickst - wofür wirst du zu alt?

Re: Duplicate Keys in ITAB

Beitrag von ewx (Top Expert / 4067 / 177 / 400 ) » 12. Dez 2014 09:35

ralf.wenzel hat geschrieben:wofür wirst du zu alt?
$ch&!#ß ;)

Re: Duplicate Keys in ITAB

Beitrag von ralf.wenzel (Top Expert / 3472 / 155 / 223 ) » 12. Dez 2014 09:43

Das dachte ich auch, als ich im SDN die Seiten von Horst Keller zu ABAP 7.40 studierte. Aber ich habe mich schnell umgewöhnt, weil ich einen Kunden habe, bei dem ich das schon einsetzen kann. Ein

Code: Alles auswählen.

read table matnr_liste 
transporting no fields 
with key matnr = p_matnr. 

if sy-subrc eq 0. 
".....
endif.
wird zu einem einfachen

Code: Alles auswählen.

if line_exists( matnr_liste[ matnr = p_matnr ] ).
"....
endif.
Das kommt der Denke viel näher, denn was will ich machen? Ich will wissen, ob in der Tabelle was steht. Das Lesen ohne Transport der Daten mit Abfrage des sy-subrc ist nicht die Art und Weise, wie man denkt.

Ich kann jedem nur empfehlen: Wer die Möglichkeiten hat, sollte sie nutzen!

Re: Duplicate Keys in ITAB

Beitrag von ralf.wenzel (Top Expert / 3472 / 155 / 223 ) » 6. Jan 2015 14:24

ralf.wenzel hat geschrieben:

Code: Alles auswählen.

if line_exists( matnr_liste[ matnr = p_matnr ] ).
"....
endif.
So ein Mist. Kann mir jemand erklären, wie ich das gescheit angezeigt kriege? Das ist ganz normale ABAP-Syntax (allerdings 7.4).... Aus den eckigen Klammern wird "Mist" (TM)

Re: Duplicate Keys in ITAB

Beitrag von tm987456 (ForumUser / 26 / 16 / 8 ) » 8. Nov 2019 09:02

Hallo

sitze vor einem ähnlichen Problem, wobei mir try-catch an der Stelle nicht wirklich hilft.

Ich habe eine Methode die Materialnummern als hashed-table erwartet. In meinem Programm habe ich eine Liste von Lagerbeständen.

Code: Alles auswählen.

converted_matnrs = conv_material_numbers( VALUE #( FOR row IN stock ( row ) ) ).
Obige Zeile funktoiniert nicht, da die Bestandsliste nicht verdichtet ist und auch nicht nach Materialnummer verdichtet werden soll.

Folgendes Coding funktioniert, erscheint mir aber umständlich, da ich eine Hilfstabelle benötige.

Code: Alles auswählen.

DATA material_numbers TYPE STANDARD TABLE OF matnr WITH EMPTY KEY.

material_numbers = VALUE #( FOR <row> IN stock ( row-matnr ) ).
SORT material_numbers BY table_line.
DELETE ADJACENT DUPLICATES FROM material_numbers COMPARING ALL FIELDS.

converted_matnrs = conv_material_numbers( VALUE #( FOR row2 IN material_numbers ( row2 ) ) ).


Da wäre es wahrscheinlich noch sinnvoller, wenn in conv_material_numbers() der Input eine standard table ist, damit die Sortierung und Verdichtung in der Methode passiert und der Aufrufer sich nicht darum kümmern braucht.

Was übersehe ich?

Gruss
Thomas

Seite 1 von 1

Aktuelle Forenbeiträge

AUSpacken einer Lieferung - WS_DELIVERY_UPDATE gelöst
vor 24 Minuten von MICBV 9 / 3974
SELECT + LOOP: Geschwindigkeit?
vor 31 Minuten von foxtrot 11 / 144
STMS via Coding aktualisieren gelöst
vor einer Stunde von ichse18577 7 / 119
ILM SAP HCM - Löschen von Daten
vor 2 Stunden von SaskuAc 4 / 76

Unbeantwortete Forenbeiträge

Report-Entwurf mit Mediator-Entwurfsmuster
vor 2 Tagen von Maximus 1 / 77
Verpacken vorhandener HUs an Auslieferungen
vor 5 Tagen von Trilla_CB 1 / 17
RFC_READ_TABLE mit RANGES selection
vor 6 Tagen von Tron 1 / 88