[Gelöst] Report und Filterung 2 Felder mit OR

21. April 2009 11:20

Hallo Navision 4.0 Gemeinde.

Ich habe da ein "kleines" Problem mit einer Reporterstellung und einer ODER-Verknüpfung von 2 Feldern in 2 Tabellen.
Ich komme da irgendwie nicht mehr weiter. Habe auch schon verschiedene Lösungsansätze ausprobiert, aber keiner führte zum Ziel.

Zum Problem:
Ich habe die Tabelle 167 Job (Projekte) in der sich die Kostenstelle (Globale Dimensionen 1) und
ich habe die Tabelle 169 Job Ledger Entry (Projektposten) in der sich dasselbe Feld befindet.

Ich möchte nun die beiden Tabellen mit einander so verbinden und filtern, dass ich alle Datensätze angezeigt bekomme, welche die KST beinhaltet. ALSO auch wenn das Projekt nicht die KST gewünschte hat, dann kann doch ein Datensatz der Projektposten die KST haben.
UND es sollen alle Projektposten zu dem Projekt angezeigt werden, wenn die gewünschte KST zum Projekt gehört.

Im SQL wäre das eine ... WHERE Projekt.KST = KST OR Projektposten.KST = KST... Oder so ähnlich ! ! ! ! :-( Leider Nativ DB

Ich hoffe ich habe euch mit meiner Fragestellung nicht zu sehr überfordert und das Problem ist lösbar.

MfG
Marco Zimmermann
Zuletzt geändert von Marco.Zimmermann am 27. April 2009 11:48, insgesamt 1-mal geändert.

Re: Report und Filterung 2 Felder mit OR

21. April 2009 11:27

Kannst du nicht einfach die Tabellen als Variablen anlegen? Wenn in der ersten Tabelle nichts gefunden wird, durchsucht er halt die zweite (oder auch beide). Sonst müsste das auch mit DataItems gehen, die im OnPreDataItem entsprechend durchsucht werden.

Kleiner Trost: mit einer Nav-SQL-DB ändert sich daran nichts ;)

Re: Report und Filterung 2 Felder mit OR

21. April 2009 11:48

Hallo

Mach doch 2 Dataitems des Projekts und einem eingerückten DataItem Projektposten.

Im ersten Dataitem gibst Du alle Projekte aus mit Kostenstelle = XY.

Im zweiten Datatitem gibst Du alle Projekte aus. WICHTIG PrintOnlyIfDetail!!
Darunter eingerückt die Projektposten mit Kostenstelle = xy und zusätzlich die Projektnummer im Datalink angeben.

Das wars, da brauchts keinen SQL-Server.

Gruss

Re: Report und Filterung 2 Felder mit OR

21. April 2009 12:14

Vielen Dank für die schnellen Antworten.

Mir ist eigendlich jede Methode recht die zum Ziel fürt, kannst du mir die Variante mit den 2 Dataitems noch etwas genauer erklären??
Ich glaube die klingt gar nicht so schlecht.

MfG MArco Zimmermann

Re: Report und Filterung 2 Felder mit OR

21. April 2009 13:25

Wenn Du 2 DataItems des Record Job einem Report hast, sind das ja zwei unabhängige Datensets.

Auf dem ersten DataItem gibst Du nur die Projekte aus, die die Filterkriterien mit dem Dimensionscode erfüllen.
Auf dem zweiten DataItem durchläufst Du die Tabelle Job nochmal, gibst dort aber nur die Projekte aus, bei denen Projektposten mit dem entsprechenden Dimenscode vorhanden sind.
Dazu ist wichtig, dass auf diesem DataItem das Propertie PrintOnlyIfDetail = Yes eingestellt ist.
Darunter eben wie gesagt eingerückt die Tabelle Job Ledger Entry.
Auf dem DataItem Job Ledger Entry muss dann das Propertie DataItemLink = Job No.=FIELD(No.) sein.
Dann werden bei zweiten DataItem Job, nur die Projekte ausgegeben, zu denen entsprechende Projektposten vorhanden sind.

Wenn Du dann soweit bist, kommen noch ein paar Sachen dazu:
- Projekte nicht zweimal ausgeben (Stichwort MARK(TRUE))
- Filter von DataItem 1 auf DataItem 2 übertragen, mit Ausnahme
- etc.

Gruss

Re: Report und Filterung 2 Felder mit OR

21. April 2009 13:34

Danke nochmal.

werd das gleichmal probieren. Melde mich wieder

cu
Marco

Re: Report und Filterung 2 Felder mit OR

27. April 2009 09:41

So ich noch mal.
Bin leider mit den 2 Dataitems nicht wirklich vorangekommen. Habe nun unter der Maßgabe, dass die gewünschte Kostenstelle in den Projektposten vorhanden sein muss, folgenden Code geschrieben.
Code:

//Suche nach dem Projektbereich(Kostenstelle des Users) <- Schleife, weil 2 Kostenstellen = 1 Projektbereich
RECUserSetup.GET(USERID);
RECKostenstellen.SETRANGE(RECKostenstellen.Name,RECUserSetup.Projektbereich);
IF RECKostenstellen.FIND('-') THEN
BEGIN
  REPEAT
    TXTKostenstellenFilter:= TXTKostenstellenFilter + FORMAT(RECKostenstellen.Code) + '|'
  UNTIL RECKostenstellen.NEXT = 0;
  TXTKostenstellenFilter:=COPYSTR(TXTKostenstellenFilter,1,(STRLEN(TXTKostenstellenFilter)-1));
END;

//Suchen nach dem Projekt, welches mindestens eine der gesuchten Kostenstelle enthält und markieren
RECJobLedgerEntry.SETFILTER(RECJobLedgerEntry."Global Dimension 1 Code",TXTKostenstellenFilter);
IF RECJobLedgerEntry.FIND('-') THEN BEGIN
  REPEAT
    Job.GET(RECJobLedgerEntry."Job No.");
    IF (Job.MARK=FALSE) THEN BEGIN
      Job.MARK:=TRUE;
    END;
  UNTIL RECJobLedgerEntry.NEXT = 0;
END;

//alle markierten Datensätze anzeigen
Job.MARKEDONLY(TRUE);


Leider braucht der Bericht so lange dass ich nicht zum Ende komme. (nach 30min abgebrochen)

Sieht jemand den Fehler??? Bin glaube ich blind! :-(

Re: Report und Filterung 2 Felder mit OR

27. April 2009 09:50

Ich vermute, dass ihr sehr viele Projektposten habt.
Was dir hier fehlt:
Code:
..
RECJobLedgerEntry.SETFILTER("Global Dimension 1 Code",TXTKostenstellenFilter);
IF RECJobLedgerEntry.FIND('-') THEN BEGIN
..

ist ein passender RECJobLedgerEntry.SETCURRENTKEY("Global Dimension 1 Code").
Wenn es keinen Schlüssel gibt, der so anfängt, dann leg ihn an.

Re: Report und Filterung 2 Felder mit OR

27. April 2009 11:25

Problem mit der Anzeige ist gelös.

War noch ein alter Report! :oops: Na ja kann passieren.

Leider habe ich noch ein anderes Problem.
Der Filter zeigt keinerlei Wirkung. An welcher Stelle sollte man einen solchen Filter platzieren???? Ich habe ihn im OnInitReport??

cu
Marco

Re: Report und Filterung 2 Felder mit OR

27. April 2009 11:27

Wenn ich alles richtig verstanden habe, gehört dein Quelltext in das DataItem Job, OnPreDataItem-Trigger.

Re: Report und Filterung 2 Felder mit OR

27. April 2009 11:47

Juhu DANKE!!!!

Sitz seit 2 Wochen dran! Und Endlich...

Dickes THX

cu MArco :-D