Addition mit Auswahlfeld
Hallo an Alle,
wahrscheinlich ist die Antwort so offensichtlich, als würde ich fragen, wieviel 1+1 ist, aber ich komme einfach nicht darauf.
Google-Suche und Forum-Suche haben mich nicht weitergebracht oder ich hatte die Lösung vor Augen und habe es nicht kappiert.
In der Untertabelle 'Positionen' habe ich Zahlenfelder mit Preis A, B, C, D und ein Auswahlfeld, welches entweder Preis X oder Preis Y anzeigt.
Nun möchte ich alle Preise addieren, also A bis D + X oder +Y, jenachdem welches Auswahlfeld gewählt wird.
Die Gesamtsumme ist ein Berechnungsfeld.
Kann mir bitte jemand auf die Sprünge helfen?
Ich hoffe, dass ich mich einigermaßen verständlich ausgedrückt habe.
Vielen Dank im Voraus!
Beste Grüße
Kruna
16 Antworten
-
Hallo Kruna, wo kommen denn die Werte für Preis X und Y her? Falls sie als Ganzzahl nur mit Ziffern als Text in dem Auswahlfeld geschrieben sind (z. B. "25"), dann könnte es mit einem Funktionsfeld folgendermaßen funktionieren:
let myPreis := number(text(Auwahl));
'Preis A' + 'Preis B' + 'Preis C' + 'Preis D' + myPreis
Wenn der Wert auch Nachkommastellen beinhaltet (z. B. 9,95"), dann würde ich es so versuchen:
let myPreis := text(Auswahl);
let myPVK := number(first(split(myPreis, ",")));
let myPNK := number(last(split(myPreis, ","))) / 100;
let myZahl := myPVK + myPNK;
'Preis A' + 'Preis B' + 'Preis C' + 'Preis D' + myZahl
-
Vielen Dank für die schnelle Antwort.
Die Fromel hat leider nicht funktioniert. Ich denke, dass ich mich falsch ausgedrückt habe.
Nein, sie sind nicht mit Ziffer als Text im Auswahlfeld.
Ich habe in meiner TAbelle 'Artikel' im Auswahlfeld 1= Kosten A, 2=Kosten B, 3=Kosten C usw. Daneben habe ich das dazugehörige Zahlfeld 'Preis' für Kosten A, 'Preis' für Kosten B usw.
Die Felder werden angezeigt, je nach Auswahl (Auswahl=1, usw)
Nun möchte ich eine RG schreiben und habe in der Untertabelle 'Positionen' die Preise stehen und auch die Auswahl:
'Techn. Kosten 4 Motive' wären dann zB 20€
Die Rechnung wäre dann 'Preis A' + 'Preis B' + 'Preis C' + 12€ oder 20€, je nachdem welche Auswahl man ausgewählt hat.
Eine gute Idee, daran habe ich nicht gedacht, aber ja, der Wert könnte auch Nachkommastellen beinhalten. Vielen DAnk für den Hinweis.
Beste Grüße
Kruna
-
Klar, wenn die Preise nicht direkt in den Einträgen des Auswahlfeldes stehen, dann kann die Formel natürlich nicht funktionieren. Jetzt blicke ich aber offen gestanden nicht mehr so ganz durch. Vorher spielte sich alles in der Tabelle 'Positionen' ab, jetzt gibt es eine weitere Tabelle 'Artikel' und ein weiteres Auswahlfeld mit 'Kosten A', 'Kosten B' usw. ...
Wenn es aber nur um die abgebildete Auswahl und das dazugehörige Zahlenfeld geht, dann könnte man das mit einer if-Abfrage machen. Oder gleich mit einer switch-case-Struktur für den Fall, dass noch weitere Einträge dazukommen könnten:
let myPreis := switch number(Auswahl) do
case 1: 'Technische Kosten 1 Motiv p.a.'
case 2: 'Technische Kosten 4 Motive p.a.'
default: 0
end
'Preis A' + 'Preis B' + 'Preis C' + 'Preis D' + myPreis
-
Hallo Copytexter,
ja, ich muss mich entschuldigen, ich habe wohl mit dem Versuch, es verständlicher zu erklären, noch mehr durcheinander gebracht.
Es geht ja eigentlch um die abgebildete Auswahl und mit Deiner Formel hat alles wunderbar geklappt!
Vielen, tausend DANK!
Beste Grüße
Kruna
-
-
Huhu nochmals,
Entschuldigung, aber ich habe da doch noch eine Frage, wie gehe ich denn vor, wenn ich zwei Auswahlfelder habe?
D.h. ich müsste case 1, case 2, case 3 usw. mit einem anderen Auswahlfeld (1 Jahr, 2 Jahre usw. ) multiplizieren:
case 1 * 12
case 1* 24
case 1 *36
case 2 *12
case 2*24
case 2*36
Vielen Dank und beste Grüße,
Kruna
-
Hallo,
let myMultiplikator := switch Auswahlfeld1 do
case 1:
12
case 2:
24
case 3:
36
end;
let myErgebnis switch Auswahlfeld2 do
case 1:
Feld1 * myMultiplikator
case 2:
Feld2 * myMultiplikator
.
.
.
end
lg, Torsten
-
Örgs,
da hab ich was vergessen:
let myErgebnis := switch Auswahlfeld2 do
sorry...
-
Hallo,
vielen Dank für Deine Antwort! Ich habe die Formel gerade ausprobiert:
let myMultiplikator := switch Mietdauer do
case 1:
12
case 2:
24
case 3:
36
case 4:
48
case 5:
60
case 6:
1
case 7:
3
case 8:
6
end;
let myErgebnis := switch Auswahl do
case 1:
'Techn. Kosten 4 Motive p.a.' * myMultiplikator
case 2:
'Techn. Kosten 1 Motiv p.a.' * myMultiplikator
case 3:
'Nebenkosten mtl.' * myMultiplikator
end;
voidDie Formel, so wie ich sie hingeschrieben habe, funktioniert leider nicht. Bei mir kommt am Ende immer diese 'void', obwohl ich es garnicht dahingeschrieben habe.
Was habe ich bloß falsch gemacht?
Beste Grüße
Kruna
-
Hallo Kruna, ich verstehe nicht genau, was du da machen willst, aber wenn du ein zweites Auswahlfeld mit einem Multiplikator hast, kannst du dieses getrennt auswerten, in eine eigene Variable übernehmen und diese dann für jede Berechnung nutzen:
let myLaufzeit := switch number(Laufzeit) do
case 1: 12
case 2: 24
case 3: 36
end
Die switch-case-Abfrage zur Ermittlung von myPreis bliebe wie gehabt. Und die Berechnungsformel würde um den Mulitiplikator ergänzt:
'Preis A' + 'Preis B' + 'Preis C' + 'Preis D' + myPreis * myLaufzeit
Oder so, wie ich es schon oben in meiner ersten Antwort als Möglichkeit genannt hatte: Die Anzahl der Monate direkt in Ziffern als Text der Auswahloptionen schreiben, also "12", "24", "36" usw. Dann kann man sich das switch-case sparen:
let myLaufzeit := number(text(Laufzeit))
Falls ich es richtig verstehe und es um die 'Anzahl Motive' und die 'Laufzeit Monate' geht, dann wäre vielleicht zu überlegen, bei beiden Auswahlfeldern nur die jeweiligen Zahlwerte einzutragen. Der gesamte Code zur Berechnung des Endpreises wäre dann sehr viel kompakter:
let myMotive := number(text('Anzahl Motive'));
let myLaufzeit := number(text('Laufzeit Monate'));
'Preis A' + 'Preis B' + 'Preis C' + 'Preis D' + myMotive * myLaufzeit
Oder sogar mit einer Zeile möglich:
'Preis A' + 'Preis B' + 'Preis C' + 'Preis D' + number(text('Anzahl Motive')) * number(text('Laufzeit Monate'))
Nur so als Idee.
-
Ups, da war ich wieder mal zu spät ...
-
Das "void" erscheint, weil in dem Berechnungsfeld zwar die Variablen 'myErgebnis' und 'myMultiplikator' ermittelt werden, mit den Werten aber nichts passiert. Es fehlt noch die Formel für das Endergebnis, das in diesem Berechnungsfeld angezeigt werden soll.
-
HAllo,
wahrscheinlich weiß ich vor lauter ninoxing selbst nicht mehr was ich eigentlich erreichen will!
Jedenfalls hat mir
'Preis A' + 'Preis B' + 'Preis C' + 'Preis D' + myPreis * myLaufzeit
geholfen.
Nach umstellen/umbenennen der Felder war myPreis * myLaufzeit genau das , was ich ereichen wollte.
Die Sache ist die, dass ich noch ziemlich am Anfang stehe, sowohl bei Ninox, als auch mit meiner kleinen Firma.
Nun habe ich diverse NinoxAbläufe im Kopf, stelle jedoch fest, dass im eigentlichen Ablauf diese nicht ganz praktikabel sind. Daher auch noch die vielen Änderungen.
Wirklich sorry, wenn ich mich da ewtas unverständlcih ausdrücke.
Vielen DAnk und beste Grüße
Kruna
-
Kein Problem. Noch mal kurz zum Verständnis des "void": Ein Berechnungsfeld hat den Zweck, einen Wert zu ermitteln und anzuzeigen. Mit Betonung auf "anzeigen". Eine korrekt Formel wäre bspw.
10 + 20
Als Ergebnis würde im Feld nun der Ergebniswert '30' angezeigt. Schriebe man aber
let Zahl1 := 10;
let Zahl2 := 20
würde gar nichts passieren, weil es nichts anzuzeigen gäbe, denn man hätte ja nur Variablen befüllt. Und Ninox würde der Form halber "void" darunter setzen, was in diesem Kontext so viel heißt wie "Mach nix". Man müsste also noch angeben, was angezeigt werden soll, nämlich das Ergebnis der Addition von Zahl1 und Zahl2:
let Zahl1 := 10;
let Zahl2 := 20
Zahl1 + Zahl2
Nun wäre der Code vollständig und im Berechnungsfeld würde auch wieder '30' angezeigt.
-
Ach so! Ja vielen Dank für die Erklärung. Man lernt jeden Tag etwas neues dazu. Beim nächsten 'void', weiß ich nun worauf ich achten muss.
Ich bewundere Euch ja immer wieder, wie ihr die Formeln 'zusammenpackt'.
Jetzt, wo ich diese Lösung vor Augen habe, klingt alles logisch und nachvollziehbar, aber selbst darauf kommen? Da tue ich mich echt noch sehr schwer.
Aber wie heißt es doch so schön...learning by doing!
Dank nochmals udn beste Grüße
-
Ja, aus eigener Erfahrung weiß ich: Wenn Ninox von sich aus irgendwo ein "void" einsetzt, hat man in der Regel irgendwas falsch gemacht. Man sollte dann genau schauen, was man an der Stelle eigentlich bewirken wollte. ;)
Content aside
- vor 4 JahrenZuletzt aktiv
- 16Antworten
- 1976Ansichten