Problem mit IF-Verzweigung im Report

Bild Microsoft Dynamics NAV 3.xx
(ehem. Navision Attain)

Problem mit IF-Verzweigung im Report

Beitragvon F11 » 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: Alles auswählen
IF (Table.Date <> 0D) AND (Table.Date <= EingabeDatum) THEN BEGIN
  xY := 0;
END;


Hat jemand eine Erklärung dafür?
F11
 
Beiträge: 52
Registriert: 14. Februar 2007 17:49

Beitragvon Kowa » 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.
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7849
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01

Beitragvon F11 » 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.
F11
 
Beiträge: 52
Registriert: 14. Februar 2007 17:49

Beitragvon Natalie » 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....
GruĂź, Natalie

Frage beantwortet oder Problem von allein gelöst? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.

Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
Benutzeravatar
Natalie
Moderator
Moderator
 
Beiträge: 9257
Registriert: 31. Oktober 2006 19:51
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Beitragvon mespelage » 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?
mespelage
 
Beiträge: 213
Registriert: 29. März 2006 11:56
Wohnort: Lohne
Realer Name: Michael Espelage
Arbeitsort: Steinfeld
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2015

Beitragvon F11 » 23. Februar 2007 12:02

xY wird zurĂĽckgesetzt.

Die Daten ziehe ich mir aus einem DataItem.
F11
 
Beiträge: 52
Registriert: 14. Februar 2007 17:49

Beitragvon Natalie » 23. Februar 2007 12:08

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

Code: Alles auswählen
IF (Date <> 0D) AND (Date <= EingabeDatum) THEN BEGIN
  xY := 0;
END;
GruĂź, Natalie

Frage beantwortet oder Problem von allein gelöst? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.

Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
Benutzeravatar
Natalie
Moderator
Moderator
 
Beiträge: 9257
Registriert: 31. Oktober 2006 19:51
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Beitragvon F11 » 23. Februar 2007 12:21

Befinde mich im OnAfterGetRecord-Trigger.

Funktioniert aber leider trotzdem nicht :-(
F11
 
Beiträge: 52
Registriert: 14. Februar 2007 17:49

Beitragvon Natalie » 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: Alles auswählen
IF ("Date" <> 0D) AND ("Date" <= EingabeDatum) THEN BEGIN
  xY := 0;
END;
GruĂź, Natalie

Frage beantwortet oder Problem von allein gelöst? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.

Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
Benutzeravatar
Natalie
Moderator
Moderator
 
Beiträge: 9257
Registriert: 31. Oktober 2006 19:51
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Beitragvon Falc » 23. Februar 2007 12:47

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

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


Vielleicht hilfts ja!
Falc
 
Beiträge: 18
Registriert: 3. Februar 2006 22:57
Wohnort: Beckum
Arbeitsort: Deutschland
Bezug zu Microsoft Dynamics: Freiberufler
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Beitragvon F11 » 23. Februar 2007 12:55

So heiĂźt es eigentlich:

Code: Alles auswählen
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: Alles auswählen
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.
F11
 
Beiträge: 52
Registriert: 14. Februar 2007 17:49

Beitragvon Natalie » 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: Alles auswählen
IF ("Employee/T"."Leaving Date" <> 0D) AND  ("Employee/T"."Leaving Date" <= GdBisDatum) THEN
  GnResturlaub := 0;
GruĂź, Natalie

Frage beantwortet oder Problem von allein gelöst? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.

Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
Benutzeravatar
Natalie
Moderator
Moderator
 
Beiträge: 9257
Registriert: 31. Oktober 2006 19:51
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Beitragvon Natalie » 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?
GruĂź, Natalie

Frage beantwortet oder Problem von allein gelöst? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.

Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
Benutzeravatar
Natalie
Moderator
Moderator
 
Beiträge: 9257
Registriert: 31. Oktober 2006 19:51
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Beitragvon F11 » 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?
F11
 
Beiträge: 52
Registriert: 14. Februar 2007 17:49

Beitragvon Natalie » 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!
GruĂź, Natalie

Frage beantwortet oder Problem von allein gelöst? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.

Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
Benutzeravatar
Natalie
Moderator
Moderator
 
Beiträge: 9257
Registriert: 31. Oktober 2006 19:51
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV


ZurĂĽck zu NAV 3.xx

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast