[Gelöst]Je Rec in Liste Index von dimensions Variable

5. Februar 2021 14:08

Hallo zusammen,

folgendes Problem... (ich benutze hier fiktive Zahlen)
In meiner Tabelle:
Datensätze mit Datumsfeld "a" und Datumsfeld "b" die gefüllt sind.
Z.B:
Record 1 hat Feld "a" mit dem Wert 10.01.2021 und Feld "b" mit dem Wert 05.01.2021
Record 2 hat Feld "a" mit dem Wert 20.06.2021 und Feld "b" mit dem Wert 10.06.2021
Record 3 hat Feld "a" mit dem Wert 31.10.2021 und Feld "b" mit dem Wert 01.10.2021
...
...
und so weiter..

In meiner List Page:
Ich habe eine globale Variable "differenz" vom Typ integer erstellt und dieser hat in der Property "Dimensions" den Wert 10 eingetragen.
Außerdem habe ich eine Variable "counter" vom Typ integer erstellt die nachher der Index meiner Variable "differenz" ist.
Nun berechne ich in meiner Page im OnOpenPage Trigger folgendes

Code:
counter := 0;
SETFILTER("No.", Record 1|Record 2|Record 3);
IF FINDSET THEN BEGIN
 REPEAT
  counter := counter +1;
  differenz[counter] := Rec.a - Rec.b;
  MESSAGE(FORMAT(differenz[counter])); //Nur um zu überprüfen ob es auch richtig berechnet wird.. Ergebnis: Bei Record 1 Wert 5, bei Record 2 Wert 10, bei Record 3 Wert 30
 UNTIL NEXT = 0;
END;



Ich habe nun in meiner Page eine Zeile genau zwischen Feld "a" und Feld "b" erstellt die im Source "differenz[counter]" enthält.


Problem:
Wenn meine Page nun geöffnet wird stehen in allen drei Zeilen in der Variable "differenz" der Wert 30.

Gewünscht habe ich mir aber dass in "Record 1" = 5, "Record 2" = 10 und in "Record 3" = 30 drin steht.

Fragen:
Ist es überhaupt möglich, das so mit einer Variable mit Dimension umzusetzen wie ich es mir vorgestellt habe?
Wenn ja wie?
und wenn nein? alternativ Vorschlag bitte :)

Mein Fokus liegt aber bei der Frage "wenn ja dann wie?". Ich würde es zu gerne mit einer Variable kalkulieren und anzeigen lassen. Möchte kein Feld in der Tabelle hinzufügen


Zur Info:
Ich benutze NAV 2009 und versuche das im RTC Client (Page) umgesetzt zu bekommen
Zuletzt geändert von Volkan am 8. Februar 2021 09:31, insgesamt 1-mal geändert.

Re: Je Record in Liste anderen Index von dimensions Variable

5. Februar 2021 19:54

Volkan hat geschrieben:Problem:
Wenn meine Page nun geöffnet wird stehen in allen drei Zeilen in der Variable "differenz" der Wert 30.

In der Variable steht natürlich der Wert nach der letzten Zuweisung. Beim Öffnen der Page wird Dein Code ausgeführt, danach holt sich die Anwendung die Datensätze der SourceTable und zeigt diese nach und nach im OnAfterGetRecord()-Trigger. Schmeiße also Deinen Code im OnOpenPage raus und füge in den OnAfterGetRecord()-Trigger so etwas ein:

Code:
differenz := 0;
IF (DateA <> 0D) AND (DateB <> 0D) THEN BEGIN
  differenz := (DateA - DateB);
END;

Erstelle in der Page neues Textfeld (Spalte) (z. B. rechts von der "Datum B"-Spalte und als SourceExpression Deine Differenz-Variable, setze das Textfeld auf nicht editierbar. Und vergiss den Quatsch mit Dimensionen, die Differenz-Variable als einfache Integer-Variable.
Der Abgleich ob Date <> 0D (also ungleich leeres Datum) ist notwendig, da Du ansonsten beim Öffnen Deiner Page, in welcher irgend ein Datensatz kein Datum hat (aus welchem Grund auch immer) Du eine lustige Fehlermeldung bekommst und Deine Page schmiert ab.

Re: Je Record in Liste anderen Index von dimensions Variable

8. Februar 2021 09:26

Es hat geklappt!
Sehr interessant xD.
Ich meine mich erinnern zu können, dass ich letzte Woche meinen Code in den OnAfterGetRecord - Trigger ausgelagert habe aber nicht den selben Effekt erzielt habe wie mit deiner Lösung.
Vielleicht lag es an der Dimension, vielleicht auch an der Variable mit dem 0 Wert oder an etwas anderem.
Aber dass der Client abschmiert ist mir auch schon aufgefallen. Wusste allerdings nicht dass es an dem Wert 0 bei der Variable liegt.

Jupiter hat geschrieben:Beim Öffnen der Page wird Dein Code ausgeführt, danach holt sich die Anwendung die Datensätze der SourceTable und zeigt diese nach und nach im OnAfterGetRecord()-Trigger.

Das habe ich auch schon vermutet wusste aber bis zu diesem Zeitpunkt nicht mir zu helfen.


Vielen Dank für deine Hilfe und für deine konkrete Lösung auf meine Frage!