Dubletten herausfinden

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

Getting started ... Alles für einen gelungenen Start.
17 Beiträge • Seite 1 von 2 (current) Nächste
17 Beiträge Seite 1 von 2 (current) Nächste

Dubletten herausfinden

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Hallo zusammen,

ich habe ein Programm geschrieben, welches mir Kreditoren-Dubletten heraussuchen soll. Nun kommt es leider vor, dass es mir unterschiedliche Ergebnisse ausgibt. Der Fehler liegt hier in folgendem Codefragment (siehe unten). Ich führe es ein Mal aus und es gibt mir 120 Einträge, beim nächsten Mal vielleicht 135 usw. Kann da jemand erkennen wo der Fehler liegt? Hat jemand sonst Vorschläge für eine Alternative wie man das programmieren könnte?

Vielen Dank im Voraus.
Zuletzt geändert von L0w-RiDer am 14.03.2019 21:28, insgesamt 1-mal geändert.

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


Re: Dubletten herausfinden

Beitrag von nikibert (ForumUser / 78 / 4 / 0 ) »
Hi,

habe nun grad kein System zur Hand, hatte kuerzlich aber nach selbiger Fragestellung gesucht und folgende Diskussion gefunden:
https://www.abapforum.com/forum/viewtop ... 5&start=15

Vielleicht hilft es dir ja weiter!

Gruss
nikibert

Re: Dubletten herausfinden

Beitrag von qyurryus (Specialist / 107 / 81 / 45 ) »
L0w-RiDer hat geschrieben:Hallo zusammen,

ich habe ein Programm geschrieben, welches mir Kreditoren-Dubletten heraussuchen soll. Nun kommt es leider vor, dass es mir unterschiedliche Ergebnisse ausgibt. Der Fehler liegt hier in folgendem Codefragment (siehe unten). Ich führe es ein Mal aus und es gibt mir 120 Einträge, beim nächsten Mal vielleicht 135 usw. Kann da jemand erkennen wo der Fehler liegt? Hat jemand sonst Vorschläge für eine Alternative wie man das programmieren könnte?

Vielen Dank im Voraus.

Code: Alles auswählen.

  LOOP AT gt_join INTO gs_join.
    IF sy-tabix = 1.
      gs_merk = gs_join.
    ELSE.
      IF gs_merk-iban = gs_join-iban
        AND gs_merk-tabkey <> gs_join-tabkey
        AND gs_merk-bukrs = gs_join-bukrs.
        IF lv_hilf <> 1.
          MESSAGE 'Doppelte IBAN-Nummer wurde gefunden!' TYPE 'I'
          DISPLAY LIKE 'I'.
          lv_hilf = 1.
        ENDIF.
        shift gs_merk-tabkey left DELETING LEADING '0'.
        shift gs_join-tabkey left DELETING LEADINg '0'.
        APPEND gs_merk TO gt_ausgabe.
        APPEND gs_join TO gt_ausgabe.
      ELSE.
        gs_merk = gs_join.
      ENDIF.
    ENDIF.
  ENDLOOP.
Du vergleichst mit deiner Methodik nur Tabellenzeilen, die direkt nebeneinander sind. Damit das funktioniert, müsste die Tabelle erst nach den Schlüsseln sortiert werden. Ob das passiert ist aus diesem Coding-Schnipsel nicht ersichtlich.
Außerdem könntest du für die Ausgabe der Message nach dem loop einfach abfragen, ob gt_ausgabe nicht leer ist, statt es im Loop und mit der Hilfsvariable zu tun.

Re: Dubletten herausfinden

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
In Anlehnung an qyurryus Antwort:
Wenn die Inhalte in 'gt_join' direkt aus der Datenbank stammen, ist die Sortierung, sofern kein ORDER BY oder SORT verwendet wurde, nicht gesichert.
Bei Verwendung der HanaDB ist das immer der Fall und bei Oracle leider hin und wieder auch. Der Name 'gt_join' lässt einen Datenbank-Join vermuten und da ist die Sortierung nach dem Primary Key (default in Oracle) nur schwer bis gar nicht möglich.
Wir haben daher schon vor geraumer Zeit (auch weil die Hana-Umstellung anstand) begonnen unsere Programme nach fehlenden SORT oder ORDER BY zu durchsuchen und korrigieren.
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: Dubletten herausfinden

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
a-dead-trousers hat geschrieben:IWir haben daher schon vor geraumer Zeit (auch weil die Hana-Umstellung anstand) begonnen unsere Programme nach fehlenden SORT oder ORDER BY zu durchsuchen und korrigieren.
Alle oder nur die wo die nachfolgende Verarbeitung auf einer Sortierung beruht? Ich kenne hinreichend viele Fälle, wo einfach eine Liste abgearbeitet werden muss - egal wie die Sortierung ist.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Dubletten herausfinden

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Sry, aber ein Variablenname wie „gt_join“ gehört verboten. Man sieht ja hier schon, dass gerätselt wird darüber, was da wohl drinstehen könnte. Aber Hauptsache, „gt_“ steht davor....


Ralf *sieht sich mal wieder belegt

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

Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Dubletten herausfinden

Beitrag von Thomas R. (Expert / 754 / 73 / 34 ) »
join als Name wäre aber auch nicht besser.... :D

MfG
Thomas R.

Re: Dubletten herausfinden

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Nein, aber „gt_“ wird gern empfohlen, macht den Namen aber nix besser.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Dubletten herausfinden

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
black_adept hat geschrieben:Alle oder nur die wo die nachfolgende Verarbeitung auf einer Sortierung beruht? Ich kenne hinreichend viele Fälle, wo einfach eine Liste abgearbeitet werden muss - egal wie die Sortierung ist.
Sagen wir mal so: Ziemlich viele. :x
Sicher ist sicher.
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: Dubletten herausfinden

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Ich habe mir sogar angewöhnt, bei Tabellen, bei denen ich keinerlei Sortierung brauche, in der Deklaration explizit WITH EMPTY KEY anzugeben. Das spart eine unbedeutende Anzahl Bytes, hebt aber besonders hervor, dass ich mir Gedanken gemacht habe. Und Schlüssel bei Standardtabellen sind eine ziemlich nutzlose Sache. Die kann man eigentlich nur bei COLLECT brauchen. Oder bei AT/ENDAT - aber dafür muss die Tabelle dann doch wieder nach dem Schlüssel sortiert werden.

Leider hat die SAP diesen netten Zusatz nicht kompatibel zu Konstrukten wie Funktionsbausteinen gemacht. Die können in ihren TABLES-Parametern zwar nur Standardtabellen, aber wenn man denen als TABLES-Parameter eine interne Tabelle übergibt, die WITH EMPTY KEY definiert ist, dann kommt es zu einem Dump. Ich weiß, TABLES-Parameter gelten schon seit ewigen Zeiten als obsolet, aber jeder, der noch mit FBs arbeitet, benutzt sie, die SAP eingeschlossen. Dass man da keine Tabellen WITH EMPTY KEY übergeben kann, halte ich für eine schon mutwillige Schikane. Sie haben den CALL FUNCTION-Befehl ja auch kompatibel zu VALUE #( ) gemacht.

Re: Dubletten herausfinden

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Ich würde nicht immer gleich Böswilligkeit unterstellen. Jeder, der schonmal große IT-Projekte gemacht hat, weiß, wie schwierig es ist, große Teams optimal zu administrieren.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Dubletten herausfinden

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Also es geht darum, dass ich Kreditor-Dubletten herausfischen möchte. Die gleiche IBAN-Nummer hat unterschiedliche TABKEY im gleichen Buchungskreis. So z.B.

IBAN : 7888900 Tabkey : 790 Buchungskreis: 0010
IBAN: 7888900 Tabkey: 450 Buchungskreis: 0010.

Hat jemand eine Idee so etwas elegant zu lösen? Meine Schleife funktioniert an sich schon, bloß irgendwo ist ein Fehler drin, da ich einmal 320 Treffer bekommen und wenn ich es noch mal ausführe nur 308 z.B. usw.

Re: Dubletten herausfinden

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Ja, gt_join ist ein DB-Join über 3 DB-Tabellen. Ich sortierte davor auf iban und bukrs, da ich ja alle doppelten IBAN-Nummern die verschiedene Tabkeys haben im gleichen Buchungskreis herausfinden möchte.

Hat da einer ne Idee?

Re: Dubletten herausfinden

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
L0w-RiDer hat geschrieben:Ja, gt_join ist ein DB-Join über 3 DB-Tabellen. Ich sortierte davor auf iban und bukrs, da ich ja alle doppelten IBAN-Nummern die verschiedene Tabkeys haben im gleichen Buchungskreis herausfinden möchte.

Hat da einer ne Idee?
Hi.

Das ist jetzt ein wild-quess:
Hab mir dein Coding nochmal durchgesehen. Innerhalb deiner IF-Abfrage veränderst du den Tabkey von gs_merk. Da die Sortierung den Tabkey laut deiner Aussage ja nicht einschließt, ist die Abfolge der Tabkeys innerhalb der Schleife bei mehreren verschiedenen Aufrufen des Programms nicht konsistent und könnte dafür verantwortlich sein, dass die Ergebnismenge so schwankt. Durch das Löschen der führenden Nullen könnte einmal der nächste Datensatz in gs_join mit gs_merk zusammenpassen und beim nächsten Lauf mit einer anderen Reiehenfolge wiederum nicht. Versuch mal als schnellen Test den Tabkey in die Sortierung mitaufzunehmen um zu prüfen ob dann die Schwankung in der Ergebnismenge nicht mehr auftritt. Ob das Programm damit insgesamt korrekt arbeitet ist aber nicht gesagt, weil du ja den Vergleichswert während des Vergleiches veränderst.

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: Dubletten herausfinden

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Das wäre mal eine schöne Aufgabe, bei der man den TDD-Ansatz (Test Driven Development) sinnvoll ausprobieren könnte.
Mit übersichtlichen, selbst zusammengestellten Testdaten.
(Diese kann man dann nämlich auch gut debuggen.)
Zusätzlich die Frage: Was soll die Methode eigentlich liefern?
  • Info, dass Dubletten vorhanden sind?
  • Info, wie viele Dubletten vorhanden sind?
  • Anzeige des jeweils doppelten/ mehrfach vorhandenen Einträge?
  • Anzeige aller doppelten/ mehrfach vorhandenen Einträge?

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag (Insgesamt 2):
ralf.wenzelmoo_jo


Vergleichbare Themen

8
Antw.
2294
Views
Dubletten
von greenhorn » 20.07.2011 12:01 • Verfasst in ABAP® für Anfänger
2
Antw.
1297
Views
Dubletten
von bohne » 07.12.2006 23:24 • Verfasst in ABAP® für Anfänger
2
Antw.
2495
Views
Dubletten Bereinigung
von zeico » 10.11.2008 20:36 • Verfasst in Sales and Distribution
2
Antw.
2771
Views
Tabellennamen herausfinden
von Franky » 07.09.2011 14:40 • Verfasst in ABAP® für Anfänger
5
Antw.
2557
Views
Benutzer herausfinden
von kaim77 » 07.03.2013 09:11 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

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 / 255

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 / 255

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