[Gelöst] Summenwert von Subform in Mainform anzeigen

31. Oktober 2007 19:04

Hallo

Ich hätte folgende Anforderung zu lösen und bräuchte hierbei eure Ideen.

Bei der Auftragserfassung sollte (wenn möglich) die Gesamtmenge als Information im Auftragskopf (kann auch in der Subform sein) angezeigt werden.
Sobald man eine Positionszeile eingegeben hat sollte dieses Feld aktualisiert werden.

Ist dies möglich bzw. gibt es so etwas irgendwo in Navision.

mfg
stony
Zuletzt geändert von stony am 1. November 2007 13:56, insgesamt 1-mal geändert.

31. Oktober 2007 19:09

Hi stony,
dafür sind doch FlowFields prädestiniert :-)
Hast du schon einmal ein FlowField (hier für den Auftragskopf) erstellt?
Bilde damit die Summe der Menge über alle Auftragszeilen.

31. Oktober 2007 19:15

Hi

Sorry für den schlecht gwählten Titel.

Ich habe zwar schon ein wenig mit FlowFields herumgespielt.

Heißt das, das ich im Auftragskopf ein FlowField erstell, welches sich auf die Daten in der Subform (Auftragspositionen) bezieht bzw. berechnet.

31. Oktober 2007 19:36

Richtig, aber denke mehr auf Tabellen- statt auf Formebene ;-)

Du brauchst ein neues Feld (FlowField) im Kopf (Tabelle 36 Sales Header) vom Typ Decimal, das auf alle zum Kopf zugehörigen Zeilen zugreift. Hierfür brauchst du "Sum" (klick dich einfach durch die Assist-Buttons durch).
Wichtig bei 99% aller FlowFields: Stelle die Eigenschaft Editable unbedingt auf NEIN!

31. Oktober 2007 21:24

Das mit dem FlowField funktioniert wirklich gut. Nun hätte ich nur noch ein Frage dazu. Wie schaffe ich es, das das Feld im Kopf automatisch aktualisiert wird, sobald sich in der Subform etwas ändert.

31. Oktober 2007 22:08

Die dafür notwendige Aktualisierung der Mainform erfolgt normalerweise erst, wenn man in die Mainform wechselt (z.B. dort hinein klickt)
Leider kann man sich von der Subform aus, nicht direkt auf die Mainform beziehen. Es bleibt Dir daher nur der OnTimer-Trigger der MainForm.
Hier könntest Du mit einem regelmäßigen CurrForm.Update das Flowfield aktualisieren.

Gruß
Ralf

1. November 2007 00:11

Naja, alternativ könntest du in der Tabelle 37 Sales Line im OnValidate-Trigger des Feldes Quantity auch folgenden Code zur Neuberechnung des Feldes anstoßen (hoffe, das gibt jetzt nicht wieder irgendwelche Transaktions-, Aktualisierungs- oder sonstige Laufzeitfehler *g*):
Code:
GetSalesHeader;
SalesHeader.CALCFIELDS("Feldname");

Statt Feldname musst du da natürlich den Namen deines neuen FlowFields einsetzen.

1. November 2007 00:32

Sorry Natalie,

aber ich glaube das "CalcFields" in der Tabelle SalesLine hat keinen Einfluss auf die Aktualisierung der Mainform.
Habs mal getestest - bei mir wird das Flowfield auch dann erst nach anklicken der Mainform aktualisiert.
Ich glaube das wirklich nur der OnTimer-Trigger der Mainform helfen kann, lasse mich aber gerne eines besseren belehren.

Gruß
Ralf

1. November 2007 03:24

Nee, Natalie, da hat Ralf recht, das geht nicht, du kannst von einer Subform aus keine Aktionen in der Mainform auslösen. ein Calcfields auf ein Feld in einer Recordvariable gilt immer nur für genau diese Variable.
Es hilft wirklich nur ein Timer-Trigger in der Mainform, oder eine Taste auf der Mainform hinter der nix anderes als ein Currform.update liegt, wenn die im Property FocusOnClick No stehen hat, dann bleibt der Cursor da wo er ist. Wenn du in der Caption dieser Taste auch noch einen eindeutigen Buchstaben mit & markierst, dann kannst du sogar ohne Mausschubsen die Mainform aktualisieren ;-)
Zuletzt geändert von Michael Schumacher am 1. November 2007 14:25, insgesamt 1-mal geändert.

1. November 2007 11:48

Gut, dann gehts halt eben nicht ...

Was mal bei uns gemacht worden ist: Statt einem FlowField wurde auf der Subform (aber oberhalb der Tablebox) eine Textbox gesetzt, deren Wert durch eine Funktion auf der Tabelle 37 berechnet worden ist - und zwar nach jeder Änderung eines bestimmten Feldes auf Subform-Ebene. Das Feld war so automatisch immer aktuell (klar, war ja auch auf Subformebene).