Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: sudsaat am 14.07.14 - 14:47:21

Titel: Angabe nummerische Konstante in @Function
Beitrag von: sudsaat am 14.07.14 - 14:47:21
Hi zusammen,

ich stehe vor einem kleinen Problem mit der Angabe einer nummerischen Konstanten in @Functions. Ich habe eine datenbank, die auf verschiedenen Systemen entwickelt wird (Betriebssystem in Deutsch, Englisch und Schweiz & Domino-Designer in Deutsch und Englisch) mit unterschiedlichen Einstellungen für die Zahlenformate.

Jetzt benötige ich eine Formel mit nummerischen Konstanten um eine Rundung durchzuführen. Exemplarisch hier ein kleiner Auszug aus der Formel, die mir Probleme bereitet:

Code
@If( (PosSteuerSatz != "") & (PosBetragNetto != "");
	steuer := @Round(PosBetragNetto / 100 * PosSteuerSatz; 0,05);
		steuer := 0);

Die Konstante 0,05 ist mein Problem. Je nachdem auf welchem System ich diese Formel speichern will, meckert der Domino-Designer wegen falscher Formatierung.

Auf einem deutschen System mit englischem Designer (und deutschen locales) kann ich die Formel (verkürzt) so schreiben:
steuer := @Round(PosBetragNetto / 100 * PosSteuerSatz; 0,05);   <- Komma als Trenner

Möchte ich die Formel auf einem englischen System speichern, nimmt der Designer sie nur mit "." als Trenner an:
steuer := @Round(PosBetragNetto / 100 * PosSteuerSatz; 0.05);   <- Punkt als Trenner

Gibt es eine Möglichkeit, die Formel allgemeingültig zu schreiben, sodass sie, egal in wecher Spracheinstellung, gespeichert werden kann? Sowas wie
@Property("number.decimal.separator")

oder ähnliches?

..das ganze zieht sich leider auch nach Lotus-Script durch, da dort (auf Grund der Rundungsproblematik in Notes) mit Evaluate gearbeitet wird und der Script-Compiler ebenfalls diese Formel mit der Fehlermeldung anmeckert: Error in Evaluate-Macro
steuer = Evaluate(|@Round(roundme; 0,05)|, doc)

Freue mich auf euer Feedback

Grüße Thomas :-)
Titel: Re: Angabe nummerische Konstante in @Function
Beitrag von: Peter Klett am 14.07.14 - 15:09:22
ungetestet, probier mal

Code
_tmp := 5 / 100;
@Round(PosBetragNetto / 100 * PosSteuerSatz; _tmp);


EDIT: Oder in einer Zeile für das Evaluate
Code
@Round(PosBetragNetto / 100 * PosSteuerSatz; 5 / 100);
Titel: Re: Angabe nummerische Konstante in @Function
Beitrag von: sudsaat am 14.07.14 - 15:21:41
Hi Peter,

gute Idee - danke!

Wie wäre das aber grundsätzlich, wenn es nicht gerade eine "glatte" Zahl wie hier "0,05" wäre? Gibt es da einen Ansatz oder ist die Angabe generell über eine Berechnung zu realisieren?

Grüße Thomas :-)
Titel: Re: Angabe nummerische Konstante in @Function
Beitrag von: Mitch am 14.07.14 - 15:22:03
Huhu,

ich würde die Zahl lieber in ein (Konfigurations-)dokument auslagern und dann immer frisch ziehen. Aus einem ordentlichen Zahlen-Item solltest du immer das korrekte Format zurück bekommen.

Magische Zahlen würde ich ohnehin möglichst vermeiden und es ist außerdem auch viel einfacher anzupassen wenn sich der Wert in der Zukunft mal ändern sollte.

Gruß,

Mitch
Titel: Re: Angabe nummerische Konstante in @Function
Beitrag von: sudsaat am 14.07.14 - 15:27:15
Hi Mitch,

danke für dein Feedback, das wäre auch eine Idee, aber die Berechnungsformeln werden in einer Benutzeraktion so oft verwendet und sind mit festen Konstanten einfach performanter als jedesmall einen Zugriff auf ein (Profil-)Dokument..

Grüße Thomas ;-)
Titel: Re: Angabe nummerische Konstante in @Function
Beitrag von: Peter Klett am 14.07.14 - 15:32:28
Wie wäre das aber grundsätzlich, wenn es nicht gerade eine "glatte" Zahl wie hier "0,05" wäre?
Was verstehst Du unter einer nicht glatten Zahl, die Du als Konstante verwenden willst?

Vielleicht 1,23456789?

Das kannst Du immer irgendwie ausrechnen

123456789 / 100000000
Titel: Re: Angabe nummerische Konstante in @Function
Beitrag von: Mitch am 14.07.14 - 15:45:35
(...) aber die Berechnungsformeln werden in einer Benutzeraktion so oft verwendet und sind mit festen Konstanten einfach performanter als jedesmall einen Zugriff auf ein (Profil-)Dokument (...)

Jeder wie er mag, aber dass das - richtig gemacht - einen messbaren Einfluss auf die Performance hat, wage ich zu bezweifeln. Mit statistischen Daten zu dem Thema kann ich allerdings auch nicht dienen. ;)
Titel: Re: Angabe nummerische Konstante in @Function
Beitrag von: sudsaat am 14.07.14 - 16:04:29
Hi Peter,

hast recht .. vergiss die Frage :-)

@Mitch: Über eine langsame Leitung ist der Unterschied (leider) zu spüren.. Wobei ich hier nicht mehr weiß, ob beim Test ein Profildokument oder "normale" Konfigurationsdokumente schneller waren ..

Grüße Thomas :-)
Titel: Re: Angabe nummerische Konstante in @Function
Beitrag von: koehlerbv am 14.07.14 - 16:06:51
Profildokumente werden nach dem Öffnen der DB nur einmal geöffnet (und über eine interne Table adressiert) und danach im Cache gehalten.

Bernhard