[Gelöst] Rechnungsbetrag im Kopf der Form ?

10. Januar 2008 12:40

Hallo zusammen.

Ich hab da ein kleines Problem und da wurde mir euer Forum mal empfohlen.

Und zwar sollen bei uns auf der Auftragsform auch oben im Kopf der gesamte Betrag des aktuellen Auftrages angebildet werden.

Hab das momentan mit dem OnTimer Trigger der Form gelöst:

CLEAR(SalesLine);
CLEAR(Total);
SalesLine.SETRANGE(SalesLine."Document Type", SalesLine."Document Type"::Order);
SalesLine.SETRANGE(SalesLine."Document No.", "No.");
IF SalesLine.FINDFIRST THEN REPEAT
Total += SalesLine."Unit Price";
UNTIL SalesLine.NEXT = 0;


Problem ist dabei das er es manchmal tut und manchmal wieder nicht.

Kann man das irgendwie elleganter / besser lösen ?


Vielen dank.

LG
Khristian
Zuletzt geändert von Khris am 10. Januar 2008 15:34, insgesamt 1-mal geändert.

10. Januar 2008 12:52

Gibt mehrere Ansätze ohne Timer.
  1. Feld in Kopf berechnen
    Das ist das, was du bereits realisiert hast (nur ohne Timer). Damit der Benutzer bei Änderungen in den Zeilen eine neue Summe sehen kann, muss er erst in den Kopf klicken. Dabei kommt es jedoch fast immer zu Transaktionskonflikten (ein anderer Anwender hat ...). Dies kann man umgehen, in dem man die Berechnung auf einen MainForm-Buttonklick legt.
  2. Tabelle Sales Line (!) um eine Funktion erweitern
    Alternativ schreibe deine Funktion in die Tabelle 37 mit Rückgabewert vom Typ decimal.
    Füge in die Subform eine Textbox ein (sinnigerweise über der 1. Zeile, damit es zumindest so aussieht, als gehöre diese Info zum Kopf) mit SourceExpr = Dein_Funktionsname.
    Vorteil: Bei jeder Aktion in den Zeilen wird der Wert sofort neu berechnet und ist immer aktuell.
    Nachteil: Sehr häufige Datenbankabfragen ...

10. Januar 2008 12:52

IF SalesLine.FINDFIRST THEN REPEAT


Bei SQL würde das zu Performance-Einbußen kommen,
lieber FINDSET oder FIND('-') vor einem REPEAT.

Eine Variante wäre ein FlowField im Kopf auf die Zeilen.
Vermutlich hast Du aber eher ein Update-Problem der Mainform, wenn eine Zeile eingefügt wird.

10. Januar 2008 14:43

dank euch beiden vielmals.

Ich hab die Subform bearbeitet und es dort oben eingefügt.
Führt in der Subform immer eine Funktion aus wenn ein neuer Datensatz geholt wird, oder ein bestehender verändert wird.

Lieben dank nochmal!


Khristian