Berechnungsfeld
Hallo Zusammen, ich habe einen Code in ein Berechnungsfeld geschrieben. Leider bleibt das Berechnungsfeld leer.
Hier der Code:
if Abrechnung = 2 then 'Summe Netto' end;
if Abrechnung = 3 then 'Summe Netto' / 3 end;
if Abrechnung = 5 then 'Summe Netto' / 12 end
Wenn ich nun jedoch nur die erste Zeile des Codes stehen lasse und die anderen beiden lösche, funktioniert es.
Was mache ich falsch?
12 Antworten
-
Hallo Paul
Probiere es mal in dieser Form:let Anzeige := "";
if Text = 1 then Anzeige := "1" end;
if Text = 2 then Anzeige := "2" end;
AnzeigeGruss
UweG
-
Hallo Paul, ist 'Abrechnung' ein Auswahlfeld? Ich würde für mehrere gleichartige Abfragen eines Feldes statt "if" lieber "switch" benutzen. Versuch's mal so:
switch number(Abrechnung) do
case 2: 'Summe Netto'
case 3: 'Summe Netto' / 3
case 5: 'Summe Netto' / 12
default: 0
end
Auf diese Weise könntest du bei Bedarf auch noch weitere Nummern abfragen und mit "default" als letztem Eintrag einen Standardwert definieren für den Fall, dass keiner der "case"-Werte zutrifft. Die "default"-Zeile kann aber auch einfach gelöscht werden.
-
Hallo Uwe, interessanter Lösungsansatz. Habe soeben bemerkt, dass er nur den zuletzt geschriebene If - CODE ausführt... In meinem Falle:
if Abrechnung = 5 then 'Summe Netto' / 12 end
Wie kann ich den Code so abändern, dass er die jeweiligen Rechenaufgaben nach Bedingung löst? :)
-
Ach, Uwe war schneller. Ich würde aber dennoch die switch-Konstruktion empfehlen.
-
Hallo Copywriter, vielen Dank! Das hat geholfen :)
-
Hallo Paul
Wie Copytexter geschrieben hat ist die switch..case Lösung eleganter.
Zu bedenken ist hier aber, dass wenn du mehrere Befehle im case abarbeiten möchtest, diese in geschweifte Klammern setzen musst.Dein Script mit if...then sollte dann so aussehen:
let Anzeige := "";
if Abrechnung = 2 then Anzeige := 'Summe Netto' end;
if Abrechnung = 3 then Anzeige := 'Summe Netto' / 3 end;
if Abrechnung = 5 then Anzeige := 'Summe Netto' / 12 end;Anzeige
-
Ich fürchte, das funktioniert so nicht, Uwe. Berechnungsfelder geben immer nur einen einzigen Wert zurück. Wenn man nun mehrere abgeschlossene "if"-Abfragen nacheinander vornimmt, dann wird immer das Ergebnis der letzten zurückgegeben. Wenn man also mit "if"-Abfragen arbeiten will, dann muss man sie so verschachteln, dass am Ende nur ein Wert ermittelt wird.
if number(Abrechnung) = 2 then
'Summe netto'
else
if number(Abrechnung) = 3 then
'Summe netto' / 3
else
if number(Abrechnung) = 5 then
'Summe netto' / 12
else
0
end
end
end
-
Hallo Copytexter.
Da muss ich leider widersprechen.
Ich habe solch ein ein Modell erstellt und es funktioniert.
Dadurch, dass ich eine Variable definiere und sie ganz am Ende ausgebe enthält sie den Wert, der in der if-Abfrage zutrifft.
In deinem Modell wird das Ergebnis direkt in der if-Funktion ausgegeben. Da stimmt dein Einwand.
Wenn ich als letztes eine Variable ausgebe, kann man ohne Verschachtelungen arbeiten.
Hier ist der Default-Wert das 'let' bei der Variablendeklaration um im switch..case Vergleich zu bleiben.Der Vorteil von if...then gegenüber switch...case ist die Möglichkeit in einer Bedingung mehrere Funktionen auszuführen.
Das funktioniert bei switch...case nur bedingt mit geschweiften Klammern.
Gruss
Uwe -
Interessant. Mit geschweiten Klammer habe ich allerdings nicht verstanden. Bei switch kann men auch mehrere Anweisungen machen, diese müssen in einfachen Klammern sein.
switch Wert do
case 1:
(tue dies;
tue das;
tue dies und das)
case 2:
......end
Wie machst es mit geschweiten Klammern?Leo
-
Moin Leo
Du hast natürlich Recht.
Ich hatte mal einen Hinweis auf Klammern in der switch...case Anweisung falsch verstanden und das mit geschweiften Klammern probiert.
Dabei kamen zuhauf Fehlermeldungen. Merkwürdigerweise haben jedoch einige Funktionskombinationen, die ich in der geschweiften Klammer platziert habe, funktioniert.
Ich weiss aber nicht mehr welche.
Gruss
Uwe -
Guten Morgen. Auf die Idee, das so mit Variable und mehreren aufeinanderfolgenden if-Abfragen zu versuchen, wäre ich von mir gar nicht gekommen. Denn für genau sowas gibt es ja "switch". Aber ich lerne immer gerne dazu (im Ernst) und habe es deshalb natürlich gleich ausprobiert.
Und siehe da - nachdem ich die initiale Variablenzuweisung auf den numerischen Wert 0 geändert hatte, ging's tatsächlich auch. Mich wundert zwar, dass es bei dir auch mit dem Leerstring funktioniert haben soll ("null" geht bei mir übrigens auch nicht), aber grundsätzlich hattest du recht: Man kann das so machen. Ich habe zwar noch keine Idee, wozu man es mal brauchen könnte - zum Thema "mehrere Befehlszeilen": siehe Leo -, aber man weiß ja nie. Auf jeden Fall wieder was gelernt.
-
Guten Morgen
Du hast Recht.Leerstring geht nicht, da die Variable immer den gleichen Typ aufnehmen muss. Ich hatte ebenfalls die Variable auf 0 gesetzt, dies jedoch nicht kommuniziert.
Content aside
- vor 4 JahrenZuletzt aktiv
- 12Antworten
- 982Ansichten