Doppelte Einträge filtern

24. November 2009 10:41

Hallo,

ich bin neu in Navision. Ich soll aus mehreren Tabellen eine bestimmten Datensatz filtern wenn diese in der Spalte "Offen" als Ja (Boolscher-Wert) makiert ist. Das funktioniert auch im großen und ganzen, jedoch müssen ein paar Werte doppelt vorhanden sein, da ich anstatt 16114 Ergebnisse erhalte ich 16121. Ich soll jetzt eine Abfrage einbauen damit diese doppelten Einträge nur einmal gezählt werden. Leider stehe ich momentan ziemlich auf dem Schlauch wie ich das machen soll. Ich wäre über einen Tipp sehr dankbar.
Zuletzt geändert von Muenchner78 am 24. November 2009 11:02, insgesamt 1-mal geändert.

Re: Doppelte Einträge filtern

24. November 2009 10:48

Klingt verwirrend. Wenn du schon genau weißt, wie viele Ergebnisse heraus kommen sollen, müsstest du doch auch den Weg dahin wissen?

Sonst könnte es helfen, das ganze erst mal temporär zu speichern und vor dem Eintragen eines weiteren DS dort zu schauen, ob er nicht schon vorhanden ist.

Re: Doppelte Einträge filtern

24. November 2009 10:58

Die genaue Anzahl weiß ich von meinem Chef! Das ist eine Übungsaufgabe um mich in Navision einzuarbeiten.
Im Prinzip ist mir schon klar wie man so was macht. Aber irgendwie bekomme ich es in Navision nicht hin.
Ich versuche es mal genauer zu erklären:
Es sind zwei Tabellen die Miteinander verknüpft sind.
Ich soll jetzt einen Report erstellen, der mir die Gesamtanzahl der Artikel (erste Tabelle) ausgibt, wenn in der zweiten Tabelle in der Spalte "Offen" der Artikel als offen (also True) markiert ist.
Mein Problem ist jetzt, dass ich keine Ahnung habe wie und was ich jetzt vergleichen soll um die doppelten Einträge zu finden.

Re: Doppelte Einträge filtern

24. November 2009 11:30

Achso, du musst Fingerübungen machen :wink:
Eine Möglichkeit:
Ausgehend von deiner ersten Tabelle schaust du per Recordvariable, ob in der zweiten ein DS mit der ensprechenden Artikelnummer und offen gefunden wird. Das sind zwei SetRanges. Wird kein entsprechender Posten gefunden, zählst du den Artikel nicht mit und machst im Report einen Skip.

Re: Doppelte Einträge filtern

24. November 2009 11:34

McClane hat geschrieben:Achso, du musst Fingerübungen machen :wink:

Ja, genau! :-(
McClane hat geschrieben:Eine Möglichkeit:
Ausgehend von deiner ersten Tabelle schaust du per Recordvariable, ob in der zweiten ein DS mit der ensprechenden Artikelnummer und offen gefunden wird. Das sind zwei SetRanges. Wird kein entsprechender Posten gefunden, zählst du den Artikel nicht mit und machst im Report einen Skip.

Ich glaub ich weiß was du meinst. Ich versuch das jetzt mal und wenn ich noch Probleme habe, dann melde ich mich noch mal.
Danke fürs erste!

Re: Doppelte Einträge filtern

24. November 2009 11:34

McClane hat geschrieben:Sonst könnte es helfen, das ganze erst mal temporär zu speichern und vor dem Eintragen eines weiteren DS dort zu schauen, ob er nicht schon vorhanden ist.


Im Prinzip richtig, die Prüfung kann jedoch entfallen.
Einfach die Temporäre Tabelle (z.B. Item) mit den Artikel füllen und ein abgefangenens INSERT machen.
Dann bleibt genau die anzahl Artikel stehen, die den Status offen haben.

Oder im Report mit zwei DataItems Arbeiten:
-Artikel
--Artikelposten (gefiltert auf Offen=Ja)

Wenn kein Posten gefunden, ein CURREPORT.SKIP machen auf den DataItem Artikel (Trigger OnAfterGetRecord)

Re: Doppelte Einträge filtern

24. November 2009 11:45

Ich nehme mal an die Tabellen sind durch die Artikelnummern verknüpft?
Ich nehme weiterhin an das in der 2. Tabelle wahrscheinlich mehrere Datensätze mit der selben Artikelnummer gibt?

Wenn du den Tabellen einen Sortierschlüssel mit der Artikelnummer geben kannst, so sind die Tabelle dann vorsortiert und du brauchst nur beim Durchlaufen der Datensätze prüfen ob der momentane Datensatz die selbe Artikelnummer hat wie der vorherige Datensatz hat.

Wie man den Sortierschlüssel auf ein DataItem setzt siehe Bild:

Sortkey.PNG
nur am Beispiel Item ich weiß das der Sortierschlüssel hier automatisch "No." ist! :)

Die Überprüfung machst du dann wahrscheinlich in OnAfterGetRecord() ?!

Damit solltest du die doppelten Einträge finden.
Wie du diese gefunden doppelten Einträge dann behandelst, entscheidest du dann! :)

Gruß,
winfy
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von winfy am 24. November 2009 11:57, insgesamt 9-mal geändert.

Re: Doppelte Einträge filtern

24. November 2009 11:47

mikka hat geschrieben:Wenn kein Posten gefunden, ein CURREPORT.SKIP machen auf den DataItem Artikel (Trigger OnAfterGetRecord)

Das ist dafür aber im Prinzip falsch :mrgreen:

Re: Doppelte Einträge filtern

24. November 2009 11:58

winfy hat geschrieben:... nur beim Durchlaufen der Datensätze prüfen ob der momentane Datensatz die selbe Artikelnummer hat wie der vorherige Datensatz hat.


Und genau das ist mein Problem bis jetzt! Wie gesagt, mir ist im Prinzip schon klar wie man so was macht. Das DataItemTableView sieht so aus:
SORTING(Kreditorennr.,Debitorennr.,Artikel,Offen,Datum) WHERE(Offen=FILTER(Yes))
Wenn ich jetzt z.B. Artikel mit Artikel -1 vergleiche, dann bekomme ich immer eine Fehlermeldung:
Eine Typkonvertierung kann nicht durchgeführt werden, da eine der Seiten einen ungültigen Typ hat. Code - Integer
Mir ist auch klar, dass das mit dem -1 zu tun hat. Aber bis jetzt hatte ich noch nicht wirklich viel mit Datenbanken zu tun weiß leider nicht was ich da falsch mache.

Re: Doppelte Einträge filtern

24. November 2009 12:02

Kannst du den Code mal am Stück posten?

Re: Doppelte Einträge filtern

24. November 2009 12:04

Viel Code ist das nicht
Code:
IF lr_dopAktiv.Artikel = lr_dopAktiv.Artikel - 1 THEN
  BEGIN
     ...
  END;

Re: Doppelte Einträge filtern

24. November 2009 12:18

Ich schätze mal, dass mit Artikel die Artikelnummer gemeint ist. An solchen Stellen kannst du dir viel helfen, indem du die Feldnamen eindeutiger vergibst.
Jedenfalls müsstest du immer die zuletzt gezählte Artikelnummer zwischenspeichern. Also in einer Variable vom Typ Code, die du dann mit der aktuellen vergleichst. Sind sie nicht gleich, hast du einen neuen Artikel zum Mitzählen gefunden, und dessen Nummer wird die, mit der die folgenden verglichen werden.
Klappt aber nur, wenn du einen Schlüssel nimmst, der möglichst mit der Artikelnummer beginnt (oder mit Offen,Artikel(nummer)).

Re: Doppelte Einträge filtern

24. November 2009 12:49

Muenchner78 hat geschrieben:
Und genau das ist mein Problem bis jetzt! Wie gesagt, mir ist im Prinzip schon klar wie man so was macht. Das DataItemTableView sieht so aus:
SORTING(Kreditorennr.,Debitorennr.,Artikel,Offen,Datum) WHERE(Offen=FILTER(Yes))
Wenn ich jetzt z.B. Artikel mit Artikel -1 vergleiche, dann bekomme ich immer eine Fehlermeldung:
Eine Typkonvertierung kann nicht durchgeführt werden, da eine der Seiten einen ungültigen Typ hat. Code - Integer
Mir ist auch klar, dass das mit dem -1 zu tun hat. Aber bis jetzt hatte ich noch nicht wirklich viel mit Datenbanken zu tun weiß leider nicht was ich da falsch mache.


Weil du die Datensätze nicht so einfach vergleichen kannst! :)
Artikel ist ein CODE Feld und du willst -1 davon abziehen, daher wirft er den Fehler mit der Typkonvertierung aus.

Was heißt Artikel - ist das die Artikelnummer?
Du brauchst hierfür einen Sortierschlüssel mit Artikel am Anfang, sonst kannst du nicht so simpel mit dem Vorherigen vergleichen.

Beispielcode:

in OnAfterGetRecord()
Code:
IF vorherigerArtikel=Artikel THEN BEGIN
  //... z. B. zähle hier doppelte Artikel
  CurrReport.SKIP;
END
ELSE BEGIN
  //... z. B. zähle hier die Artikel bzw. die Doppelten nur einmal
END;
vorherigerArtikel:=Artikel;

Das setzt voraus:
Als GLOBALE Variable vorherigerArtikel vom Typ CODE, bzw. den selben Typ den "Artikel" in der Tabelle hat, deklarieren.

Gruß winfy

Re: Doppelte Einträge filtern

24. November 2009 15:41

Keine Ahnung warum, aber nachdem mir Navision heute abgestürzt ist und ein großer Teil von dem was ich heute Programmiert habe, weg war, stimmt die Abfrage jetzt ohne die doppelten Einträge zu suchen bzw. gehe ich mal davon aus, dass keine doppelten Einträge vorhanden sind.
Jedenfalls danke an alle die geholfen haben.

Re: Doppelte Einträge filtern

24. November 2009 15:46

Kein Problem und willkommen hier im Forum! :wink:

Gruß,
winfy