Duplicate Keys in ITAB

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

Duplicate Keys in ITAB

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
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?
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

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


Re: Duplicate Keys in ITAB

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Nein, den Fehler kannst Du nicht, ohne manuelle Prüfungen durchzuführen, verhindern.

Re: Duplicate Keys in ITAB

Beitrag von PeterPaletti (Specialist / 336 / 29 / 96 ) »
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 / 3776 / 176 / 262 ) »
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.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Duplicate Keys in ITAB

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
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 / 3776 / 176 / 262 ) »
Stefan, ich will ein Kind von dir!!!! LOL

Danke, an VALUE hatte ich gar nicht gedacht!
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Duplicate Keys in ITAB

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
black_adept hat geschrieben: test_so = VALUE #( FOR wa IN test_st ( wa ) ).
Ich werd zu alt für den *... :)

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
urmel376


Re: Duplicate Keys in ITAB

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Da hat dich wohl der Wortfilter ausgetrickst - wofür wirst du zu alt?
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Duplicate Keys in ITAB

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
ralf.wenzel hat geschrieben:wofür wirst du zu alt?
$ch&!#ß ;)

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
urmel376


Re: Duplicate Keys in ITAB

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
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!
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Duplicate Keys in ITAB

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
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)
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Duplicate Keys in ITAB

Beitrag von tm987456 (ForumUser / 72 / 42 / 14 ) »
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

Re: Duplicate Keys in ITAB

Beitrag von kstroemich (ForumUser / 1 / 0 / 0 ) »
Hallo zusammen,

anbei eine Alternative ohne try/catch:

lt_mat = VALUE #( BASE lt_mat FOR i
IN FILTER #( lt_mat_ins EXCEPT IN lt_mat WHERE matnr =matnr )
( CONV matnr( i-matnr ) ) ).

Falls in lt_mat_ins Dubletten vorhanden sind:

lt_mat = VALUE #( BASE lt_mat FOR GROUPS group_mat of i
IN FILTER #( lt_mat_ins EXCEPT IN mt_mat WHERE matnr = matnr)
group by ( matnr = i-matnr ) WITHOUT MEMBERS
( CONV matnr( group_mat-matnr ) ) ).

Seite 1 von 1

Vergleichbare Themen

2
Antw.
1210
Views
Bestimmung von Primary Keys
von index7 » 30.11.2006 16:13 • Verfasst in ABAP® Core
3
Antw.
2411
Views
Select Spalten (Keys)
von Gast » 30.09.2004 12:50 • Verfasst in ABAP® Core
13
Antw.
3816
Views
Hilfe : Keys von Tabellen sind GUID
von HH_ABAP » 07.04.2018 20:11 • Verfasst in ABAP® für Anfänger
2
Antw.
3351
Views
View-Cluster - Keys werden nicht in nächste Tab. übernommen
von realtimeedv » 09.03.2011 10:03 • Verfasst in SAP - Allgemeines
30
Antw.
12676
Views
move itab 1 nach itab 2 mit bedingung
von c oco » 17.04.2012 14:39 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

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

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140