[gelöst]Berechnung Indikatorfeld

19. Dezember 2006 09:29

Hi Leute!

Ich soll 2 Indikatorfelder schreiben.
Diese sollen z.B. das Kreditlimit angeben.

Das Indikatorfeld ist abhängig von 2 Werten. Dem Kreditlimit und dem Saldo.
Immer wenn ich eins von beiden ändere soll sich der Indikator ändern.

Welchen Trigger muss ich hier verwenden?

Und wie fange ich eine Nulldivision ab?

Cheer, Eowyn
Zuletzt geändert von Eowyn am 19. Dezember 2006 10:02, insgesamt 1-mal geändert.

19. Dezember 2006 09:49

Das Indikatorfeld ist abhängig von 2 Werten. Dem Kreditlimit und dem Saldo.
Immer wenn ich eins von beiden ändere soll sich der Indikator ändern.

Welchen Trigger muss ich hier verwenden? --> Im OnValidateTrigger dieser Felder im Formular oder in der Tabelle

Und wie fange ich eine Nulldivision ab?
-->
if (Divisior > 0) then begin
Division;
Berechnung;
Berechnung;
...
end;

mfg Jürgen

19. Dezember 2006 09:51

Hallöchen!

Nun Prinzipiell ist es der OnValidate Trigger der hier anzuwenden ist. Da das Feld Saldo aber ein FlowField ist (ich nehme an wir sprechen von der Tabelle 18 Debitor und Du willst wissen wie viel Prozent des Kreditlimits ausgeschöpft sind) wird der Saldo nicht eingegeben - kein OnValidate - sondern muß anders berechnet werden.

Code Beispiele:

Code:
Kreditlimit OnValidate()
SetIndikator();

Function SetIndikator()
CALCFIELDS(Saldo);
IF Kreditlimit <> 0 THEN
  "Indikator %" := Saldo / Kreditlimit * 100
ELSE
  "Indikator %" := 0;
MODIFY;  // "Indikator %" als Feld in T18 ?


Wie gesagt, das Problem ist das FlowField Saldo. Es wird zwar automatisch kalkuliert wenn man z.B. die Debitorenkarte öffnet (Trigger OnAfterGetRecord oder OnAfterGetCurrentRecord), allerdings sind in diesen Triggern keine Transaktionen erlaubt, also kein Modify.
In diesem Fall müsste man den Indikator manuell per Funktionsaufruf aktualisiseren.

Anders, wenn Indikator kein echtes Feld sein soll, sondern lediglich eine Variable die auf der Form zur Laufzeit angezeigt werden soll; hier entfällt der Modify und die Funktion SetIndikator() kann in OnAfterGetRecord aufgerufen werden.

Ich hoffe, daß hilft Dir weiter ...

Gruß,

19. Dezember 2006 09:57

wieder mal zu spät

Ich denke du willst das ganze in einer Form darstellen, dann mache folgendes
Code:
auf den beiden OnValdateTriggern "Kreditlimit und Saldo

If Kreditlimit > 0 Then
   Indikator := 100 *((100 / Kreditimit) * (Saldo));


mfg Michael

19. Dezember 2006 10:02

Hipp Hipp Hurra!

Danke Jürgen! Jetzt läuft es perfekt!!!

19. Dezember 2006 10:18

Danke Euch allen!!!!