[GELÖST]Filter Item aus Tabelle 1 die nicht in Tabelle 2 sin

17. April 2007 14:41

Hallo,

ich suche einen Ansatz wie ich das folgende Problem lösen kann:
es sollen nur die Items aus Tabelle1 angezeigt werden, die nicht in Tabelle2 enthalten sind.

Gruß und schöne Zeit noch
Jo
Zuletzt geändert von joachim am 17. April 2007 17:59, insgesamt 1-mal geändert.

17. April 2007 14:55

Hallo Jo,

dies kannst du meiner Meinung nach nur durch Programmierung lösen. Ich würde das ungefähr so machen, wenn das Ergebnis in einem Form angezeigt werden soll:

Du brauchst ein Objekt, das den Folgenden Code ausführt, z. B. eine Codeunit oder Code hinter einem Button auf einer Form.

Code:
IF Tabelle1.FIND('-') THEN
  REPEAT
    IF NOT Tabelle2.GET(Tabelle1.Keyfeld) THEN
      Tabelle2.MARK := TRUE;
  UNTIL (Tabelle1.NEXT = 0);

Tabelle2.MARKEDONLY := TRUE;
FORM.RUNMODAL(0, Tabelle1);


Gruß
Frank

17. April 2007 15:20

Kleine Zusatzfrage:
In einer Form oder in einem Report?

Diese Variante geht auch:
Prüfen, ob der Datensatz vorhanden ist,
wenn ja CURRREPORT.SKIP.
(Sollte schneller sein!)
Code:
// Tabelle1_Trigger- OnAfterGetRecord
IF Tabelle2.GET(Tabelle1.Keyfeld) THEN
  CURRREPORT.SKIP



Bei einer Form müsste man die Variante von Frank nehmen
Gruß Mikka

17. April 2007 15:34

Das ganze soll in eine Codeunit laufen. In Tabelle sind z.B. einige 1000 Items und in Tabelle 2 habe ich einige duzend Items die auch in der Tabelle 1 enthalten sind. So, nun will ich den/die Filter so setzten dass Tabelle1 die Items anzeigt, die nicht in Tabelle2 sind.
Die Lösung von Frank ist schon mal ein Ansatz, allerdings mit dem IF NOT werden keine Datensätze angezeigt. Nur mit IF werden die Datensätze angeizeigt die in der Tabelle2 enthalten sind ... also schon mal die richtige Spur, jetzt nur noch das ganze umgekehrt ;-) müßt also mit dem IF NOT gehen, leider tut es aber nicht.

Gruß
Jo

17. April 2007 15:42

Hups, da bin ich jetzt aber gerade sprachlos, das es mit IF NOT nicht geht. :roll:

Bist du dir sicher, dass es in Tabelle 1 Datensätze gibt, die in Tabelle 2 nicht enthalten sind? Das bist du bestimmt - aber ich weiss sonst keinen Grund, warum mit IF NOT nichts angezeigt wird.

Vielleicht stellst du mal deinen Code rein.

Gruß
Frank

17. April 2007 15:53

Tabelle1 ist die Tabelle Item (Artikel) und Tabelle2 eine Tabelle in der die Artikel 1000,1001, 70060 enthalten sind. Dann habe ich eine Form mit mit eine TableBox die, die ArtikelNr und den Namen des Artikels anzeigen.
Im OnOpenForm Trigger ist dan der Code den du vorhin gepostet hast, halt nur etwas angepasst

Code:
IF TestRec.FIND('-') THEN BEGIN
  REPEAT
    IF NOT GET(TestRec.ItemNr) THEN BEGIN
      //MESSAGE('%1', "No.");
      MARK := TRUE;
    END;
  UNTIL (TestRec.NEXT = 0);
END;
MARKEDONLY := TRUE;

Wenn man jetzt aber das NOT entfernt und so eine Funktion wie NOTMARKEDONLY geben würde dann wäre genau das was ich suche.

Gruß
Jo

17. April 2007 15:59

Hallo Joachim,

sorry, habe ich nicht gesehen, das du neu im Forum bist.
Ein "Herzliches Willkommen" von mir.

Nun zu dem was ich wollte:

Bitte benutze bei Zitieren von Antworten die [code] - Tags.
Somit ist für andere leichter zu erkennen, was gemeint ist!
(Der Code wird besser lesbar dargestellt!)
Diese erscheinen, wenn du auf "Vorschau" und dann in der Vorschau auf den Button Bild klickst.

Ich habe Deinen Beitrag entsprechend Angepasst.

Vielen Dank für dein Verständnis.
Solltest du dich ungerecht behandelt fühlen, so wende dich bitte an einen Administrator.

Gruß, Mikka
MSDynamics.de-Team

17. April 2007 17:09

Der Teufel steckt im Detail. So wäre Franks Code meiner Meinung nach richtig:

Code:
IF Tabelle1.FIND('-') THEN
  REPEAT
    IF NOT Tabelle2.GET(Tabelle1.Keyfeld) THEN
      Tabelle1.MARK := TRUE;
  UNTIL (Tabelle1.NEXT = 0);

Tabelle1.MARKEDONLY := TRUE;
FORM.RUNMODAL(0, Tabelle1);

MARK und MARKEDONLY sollten auf Tabelle 1 angewendet werden und nicht auf 2

auf Dein Codebeispiel angewendet also so:

Code:
IF FINDSET(FALSE,FALSE) THEN REPEAT
   MARK(NOT TestRec.GET("No."));
UNTIL (NEXT = 0);
MARKEDONLY := TRUE;
//nun noch auf den ersten Datensatz springen, dabei möglichen Fehler abfangen
IF FINDFIRST THEN;

17. April 2007 17:25

Upps - das kommt davon, wenn ich morgens zu früh aufstehen muss. :oops:

Danke Michael, für die Korrektur!

Gruß
Frank

[Gelöst]Filter Item aus Tabelle 1 die nicht in Tabelle 2 si

17. April 2007 17:57

Oh man, was würde ich ohne Euch machen, wahrscheinlich die ganze Nacht
heulend vor dem Rechner hocken.

Vielen Michael Schumacher und vielen Dank Frank.

Gruß
Jo