Problem mit IF-Verzweigung im Report

23. Februar 2007 11:16

Hi Leute,

hab ein Problem, was mich zur Verzweiflung bringt.
In dieser kleinen, nervigen IF-Verzweigung wird eigentlich nur geprüft ob in der Variable "Date" eines Datensatzes ein Datum hinterlegt ist. Desweiteren wird geprüft, ob das Datum in "Date" kleiner oder gleich dem eingegebenen Datum ist (EingabeDatum).

Ist dies der Fall soll die Variable "xY" auf 0 gesetzt werden.

Allerdings greift diese IF-Verzweigung auch, wenn garnichts in Table.Date drin steht, was ich aber doch eigentlich im Kopf extra abfrage?

Code:
IF (Table.Date <> 0D) AND (Table.Date <= EingabeDatum) THEN BEGIN
  xY := 0;
END;


Hat jemand eine Erklärung dafür?

23. Februar 2007 11:31

Was zeigt der Debugger an dieser Stelle für den Datensatz an ?
Wenn die IF-Abfrage mehrmals durchlaufen wird, hat die Variable Table noch den alten Zustand, der dann ein Datum hatte. Ein CLEAR vor dem Nichtauffinden des nächsten gesuchten löscht die alten Werte.

23. Februar 2007 11:39

Den Code-Schnipsel verwende ich in einem Report.

Die IF-Verzweigung wird also für jeden einzelnen Datensatz im Table ausgeführt. Allerdings sollte er sich ja auch jeweils das aktuelle Datum aus der entsprechenden Zeile der Tabelle ziehen (macht er ja auch).

Trotzdem fällt er in die Verzweigung rein, obwohl er es nicht darf.

23. Februar 2007 11:53

Fragst du direkt ein DataItem oder doch nur eine von dir definierte Variable ab? Stimmt die Benennung? Oder erfolgt vorher eine Zuweisung?

Ich denke, wir brauchen hier mehr Informationen....

23. Februar 2007 12:00

Wenn er einen entsprechenden Datensatz gefunden hat, ist die Variable auch beim nächsten Datensatz bereits 0

Setzt du die Variable XY vor dem nächsten Durchlauf wieder zurück?

23. Februar 2007 12:02

xY wird zurückgesetzt.

Die Daten ziehe ich mir aus einem DataItem.

23. Februar 2007 12:08

Befindest du dich im OnAfterGetRecord-Trigger des betroffenen DataItems?
Dann schreib besser nur

Code:
IF (Date <> 0D) AND (Date <= EingabeDatum) THEN BEGIN
  xY := 0;
END;

23. Februar 2007 12:21

Befinde mich im OnAfterGetRecord-Trigger.

Funktioniert aber leider trotzdem nicht :-(

23. Februar 2007 12:37

Ich hatte das Problem bei einem Dataport:
Das Feld hieß "Date", dies ist aber ein geschützter Begriff.
Was ist, wenn du das hier schreibst:

Code:
IF ("Date" <> 0D) AND ("Date" <= EingabeDatum) THEN BEGIN
  xY := 0;
END;

23. Februar 2007 12:47

Probier doch einfach mal das [AND] auszuprogrammieren. Sprich 2 IF-Bedingungen draus zu machen.

Code:
IF (Date <> 0D) THEN BEGIN
  IF (Date <= EingabeDatum) THEN BEGIN
    xY := 0;
  END;
END;


Vielleicht hilfts ja!

23. Februar 2007 12:55

So heißt es eigentlich:

Code:
IF ("Employee/T"."Leaving Date" <> 0D) AND  ("Employee/T"."Leaving Date" <= GdBisDatum) THEN BEGIN
  GnResturlaub := 0;
END;


Habe jetzt extra noch eine Funktion eingebaut die mir vorher das Leaving Date ausließt und in ne Variable schreibt:

Code:
IF ("Employee/T"."Leaving Date" <> 0D) THEN BEGIN
  GdLeaving := "Employee/T"."Leaving Date";
END ELSE BEGIN
  GdLeaving := 0D;
END;


Ob die Vergabe richtig läuft hab ich mir in einer Message ausgeben lassen. Hat auch alles seine Richtigkeit.

23. Februar 2007 13:06

Könnte es sein, dass sich dein Quelltext bei den ganzen BEGIN und ENDs verhakelt hat, sofern du im Trigger noch weitere benutzt?

Reduziere deinen Quelltext ggf. so weit wie möglich, vielleicht sieht man dann mehr.

Code:
IF ("Employee/T"."Leaving Date" <> 0D) AND  ("Employee/T"."Leaving Date" <= GdBisDatum) THEN
  GnResturlaub := 0;

23. Februar 2007 13:12

Noch was ganz anderes:
Was soll mit diesem Resturlaub überhaupt passieren? Ist das ein Feld in der Tabelle? Führst du ein MODIFY aus?

Wird diese Variable mit dem ursprünglichen Feldinhalt ganz zu Anfang des OnAfterGetRecord-Triggers initialisiert?

23. Februar 2007 13:14

Isn bisschen schwierig den Zusammenhang zu erklären, da das ein recht mächtiger Report ist.

Im Groben:
Wenn der Resturlaub auf 0 gesetzt wird hat das zur Folge, dass der Body nicht angedruckt wird. Es wird also nichts in Tabellen geändert oder eingetragen. GnResturlaub ist ne Globale Variable im Report.

//EDIT:

Wie kann es sein, dass das mit dem 01.01.07 zusammenhängt?
Also in GdBisDatum steht der 01.01.07. Kriegt der einen Vergleich mit Daten aus dem Vorjahr nicht hin?

23. Februar 2007 14:24

Guck mal in deine Systemeinstellungen (Ländereinstellung). Dort wird geregelt, als welches Jahr die 07 interpretiert wird. Evtl. hakt es hier.

Mann, ich rate heute zuviel!