[gelöst]Hilfe beim Filtersetzen

11. August 2009 12:07

Hallo Gemeinde,

kleines Problem bei setzten eines Filters. Ich öffne über eine Line die Projektübersicht. Dort sollen aber nur die Projekte eingezeigt werden, die über eine Zugriffsrechttabelle erlaubt sind. Dort besteht die Möglichkeit ein von - bis Datum für den Zugriffszeitraum anzugeben.

In der Projektübersichtskarte habe ich im OnOpen-Form den Filter gesetzt. Zuerst filter ich in der Zugriffsrechtstabelle und dann in der Jobtabelle.

Code:
greWorkTimeRights.RESET;
greWorkTimeRights.SETFILTER(Code,USERID);
greWorkTimeRights.SETFILTER(greWorkTimeRights."Permission From",'%1',100809D);
IF greWorkTimeRights.FINDSET THEN BEGIN
  SETFILTER("No.",greWorkTimeRights."Job No.");
  FINDSET;
END ELSE BEGIN
  SETFILTER("Person Responsible",USERID);
  FINDSET;
END;

um es zu testen habe ich ein festes Datum angeben, welches es auch in der Rechtetabelle gibt.
So wie dort der Filter gesetzt ist, zeigt er mit zwar ein Projekt, aber nur das erste Projekt aus der Tabelle. Ich habe überhaupt keine Idee, wieso es das System so macht. Ich hoffe ihr könnt mir da ein wenig weiter helfen.

Danke schon mal im voraus.

Vg Rom
Zuletzt geändert von rom am 11. August 2009 14:05, insgesamt 1-mal geändert.

Re: Hilfe beim Filtersetzen

11. August 2009 12:16

Du bearbeitest ja auch nur die erste gefundene Nummer:
Code:
greWorkTimeRights.RESET;
greWorkTimeRights.SETFILTER(Code,USERID);
greWorkTimeRights.SETFILTER(greWorkTimeRights."Permission From",'%1',100809D);
IF greWorkTimeRights.FINDSET THEN BEGIN
  SETFILTER("No.",greWorkTimeRights."Job No."); // <-- setzt nur den Filter auf die Nummer des ersten records
  FINDSET;
END ELSE BEGIN
  SETFILTER("Person Responsible",USERID);
  FINDSET;
END;

Du musst schon alle Einträge der Rechtetabelle durchgehen, markierst am Besten die gefundenen Projekte, und nimmst danach markedonly(true).

Allerdings kann der Anwender sowohl bei deiner ursächlichen Version als auch dieser den Filter wieder lösen und sieht dann die ganze Liste. Ich weiß grad nicht, ob bei markierten Datensätzen ein Filtergroup funktioniert. Wenn nicht, musst du die gefundenen Projekte in eine temporäre Tabelle schreiben.

Re: Hilfe beim Filtersetzen

11. August 2009 12:20

Hallo, danke für die schnelle Anwort.

Mir ist nur nicht ganz klar, wie ich das markonly setzen soll. Über eine Variable oder eine Erweiterung in der Tabelle?

lg

Re: Hilfe beim Filtersetzen

11. August 2009 12:29

Code:
greWorkTimeRights.RESET;
greWorkTimeRights.SETFILTER(Code,USERID);
greWorkTimeRights.SETFILTER(greWorkTimeRights."Permission From",'%1',100809D);
IF greWorkTimeRights.FINDSET THEN
  begin
    repeat
      SETFILTER("No.",greWorkTimeRights."Job No.");
      if FINDSET then repeat
        mark(true);
      until next=0;
    until greWorkTimeRights.next=0;
    markedonly:=true;
  end
ELSE BEGIN
  SETFILTER("Person Responsible",USERID);
  FINDSET;
END;


Ein wenig hingeschmiert :oops: sollte aber gehen

Re: Hilfe beim Filtersetzen

11. August 2009 12:48

Im OnOpen-Trigger brauchst du übrigens das FINDSET nicht.

Re: Hilfe beim Filtersetzen

11. August 2009 13:13

Natalie hat geschrieben:Im OnOpen-Trigger brauchst du übrigens das FINDSET nicht.



Hallo, das weiß ich eigentlich, wollte nur sicher gehen, das ich damit nicht falsch liege :-)

Re: Hilfe beim Filtersetzen

11. August 2009 13:21

McClane hat geschrieben:
Code:
greWorkTimeRights.RESET;
greWorkTimeRights.SETFILTER(Code,USERID);
greWorkTimeRights.SETFILTER(greWorkTimeRights."Permission From",'%1',100809D);
IF greWorkTimeRights.FINDSET THEN
  begin
    repeat
      SETFILTER("No.",greWorkTimeRights."Job No.");
      if FINDSET then repeat
        mark(true);
      until next=0;
    until greWorkTimeRights.next=0;
    markedonly:=true;
  end
ELSE BEGIN
  SETFILTER("Person Responsible",USERID);
  FINDSET;
END;


Ein wenig hingeschmiert :oops: sollte aber gehen


danke für den Code. Nur zeigt er leider immer noch nicht alle an, sondern nur den letzten, den er gefunden hat.

Re: Hilfe beim Filtersetzen

11. August 2009 13:25

Hmm .. musst evtl. bloß hochscrollen?¿

Re: Hilfe beim Filtersetzen

11. August 2009 13:26

leider nein, sind nur 4 Datensätze dier er anzeigen musste, und einen zeigt er mir.

Re: Hilfe beim Filtersetzen

11. August 2009 13:45

ich find aber keinen Fehler :-?

Sicher, dass die alle den 100809 in dem Datumsfeld drin stehen haben?

Re: Hilfe beim Filtersetzen

11. August 2009 13:46

Wahrscheinliche Ursache:
Es muss noch ein Filter aufgehoben werden:
Code:
greWorkTimeRights.RESET;
greWorkTimeRights.SETFILTER(Code,USERID);
greWorkTimeRights.SETFILTER(greWorkTimeRights."Permission From",'%1',100809D);
IF greWorkTimeRights.FINDSET THEN BEGIN
  REPEAT
    SETFILTER("No.",greWorkTimeRights."Job No.");  // <-- Hier wird der Filter gesetzt ...
    if FINDSET then
    repeat
      mark(true);
    until NEXT = 0;
  UNTIL greWorkTimeRights.NEXT = 0;
  SETRANGE("No.");  // <-- ... den wir hier noch aufheben müssen, da ...
  markedonly:=true; // <-- ... hier sowieso auf die Satzmarken gefiltert wird
END ELSE BEGIN
  SETFILTER("Person Responsible",USERID);
  FINDSET;
END;

Re: Hilfe beim Filtersetzen

11. August 2009 13:54

Ich hätte dann einen Antrag für einen neuen Smiley für mich: "Tomaten auf den Augen" :roll:

Re: Hilfe beim Filtersetzen

11. August 2009 14:04

Ja, genau das ist es, wollte diese auch gerade schreiben. Ihr ward aber schneller :-)
danke für Eure Hilfe..