Numerisches Attribut runden

Ereignisaktion - Kurzfassung

Zweck: Rundet den Zahlenwert eines über den Nummerntyp identifizierten Numerischen Attributs innerhalb des aktuellen Bezugsobjekts auf eine statisch definierte Anzahl von Dezimalstellen und aktualisiert das Attribut mit dem gerundeten Wert.

Die Ereignisaktion Numerisches Attribut runden rundet den Zahlenwert eines über den Nummerntyp identifizierten Numerischen Attributs innerhalb des aktuellen Bezugsobjekts auf eine statisch definierte Anzahl von Dezimalstellen und aktualisiert das Attribut mit dem gerundeten Wert.

Sofern das aktuelle Bezugsobjekt nicht über ein numerisches Attribut mit dem angegebenen Nummerntyp verfügt oder der angegebene Nummerntyp als "plural" definiert ist (also eine Liste von mehreren Werten enthalten kann), hat die Ereignisaktion keinen Effekt.

HINWEIS

  • Die Rundung des numerischen Attributs verändert die Daten des Bezugsobjekts, impliziert aber nicht das Speichern des geänderten Stands. Sofern es sich bei dem Bezugsobjekt eine eigenständige Entität (und nicht nur um eine Position eines Geschäftstransaktionsobjekts) handelt, kann bei Bedarf die Ereignisaktion Änderungen später speichern verwendet werden, um die gerundeten Werte zu sichern. Ansonsten gelten die Änderungen nur für den volatilen Stand des Bezugsobjekts.

  • Beim Runden von negativen Kommazahlen rundet die Ereignisaktion Numerisches Attribut runden Mittelpunktwerte (d. h. Werte, die den Grenzfall für die Rundung exakt markieren) in Richtung 0 (towards zero)auf, während für positive Kommazahlen Mittelpunktwerte "weg von der 0" - also ebenfalls aufgerundet wird. Falls in einer negativen Kommazahl die erste wegfallende Dezimale also eine 5 ist, auf die keine weiteren von 0 unterschiedlichen Ziffern folgen, wird also die letzte gültige Ziffer beibehalten (s. rot schattierte Zellen in der folgenden Tabelle). Dagegen rundet eine kaufmännische Rundung für die "Mittelpunktwerte" für positive und negative Werten "weg von der 0" (away from zero), so dass im Grenzfall sinngemäß der Absolutbetrag aufgerundet und anschließend wieder mit dem anwendbaren Vorzeichen versehen wird. Für positive Werte unterscheiden sich die Ergebnisse der beiden Rundungsvorschriften nicht.

    Ausgangswert

    Ergebnis für
    Numerisches Attribut runden
    mit Anzahl Dezimalstellen = 2

    Ergebnis für
    Kaufmännische Rundung
    auf 2 Dezimalstellen

    +2,345

    +2,35

    +2,35

    -2,345

    -2,34

    -2,35

HINWEIS◄ Wenn eine "kaufmännische Rundung" auch für negative "Mittelpunktwerte" (z. B. für Preisabschläge oder Gutschriften) erreicht werden muss, sollte anstelle der Ereignisaktion Numerisches Attribut runden der Wertauflöser Berechne Wert verwendet werden, um den gerundeten Attributwert zu setzen. Innerhalb der Berechnung kann die Funkion round() für die Rundung verwendet werden, die Mittelpunktwerte "kaufmännisch" behandelt. Allerdings bietet round() die Anzahl der Dezimalstellen nicht als Parameter an, sondern rundet immer auf Ganzzahlen auf oder ab. Um auf eine definierte Anzahl von Nachkommastellen zu runden empfiehlt sich daher ein Ausdruck wie der folgende: round(value*(10^decimals))/(10^decimals) , wobei der zu rundende Wert in der Variablen value und die Anzahl der Nachkommastellen als Long-Wert in der Variablen decimals vorliegen sollte.

Konfiguration

Die Ereignisaktion muss im Kontext des Bezugsobjekts (s. a. Ausführen mit) ausgeführt werden, das der "Attributsbesitzer" des zu rundenden Attributs ist.

  • Der Parameter Typ verlangt als Pflichtangabe die Auswahl eines Werts aus der Dynamischen Aufzählung Nummerntyp, um das zu rundende Attribut zu identifizieren.
    HINWEIS◄ Die Rundung wird nur ausgeführt, wenn der Nummerntyp nicht "plural" gesetzt ist. Die Werte eines pluralen numerischen Attributs müssen bei Bedarf mit anderen Methoden (z. B. über Berechne Wert) gerundet werden.

  • Der Parameter Anzahl Dezimalstellen definiert, wie viele Dezimalen der gerundete Zahlenwert maximal enthalten soll. Der Standardwert (0) wird dabei als "keine Rundung" interpretiert, so eine Rundung auf ganzzahlige Werte ohne Nachkommastellen bei Bedarf mit anderen Methoden (z. B. Berechne Wert) erreicht werden muss.

images/download/attachments/177907142/Screenshot_2024-08-07_at_09-58-54_test1-version-1-modificationdate-1723019440899-api-v2.png

Beispiel

Beim Erfassen von Bestellungen sollen neben Positionen für Waren auch "Service-Positionen" (mit dem Positionstyp "Service") angelegt werden, um kostenpflichtige Dienstleistungen (z. B. Montage/Demontage) abzubilden.

Der Inhalt einer Service-Position soll unter anderem durch ein numerisches Attribut mit dem Nummerntyp "Arbeitsstunden" quantifiziert werden, dessen Wert innerhalb der Erfassungsmaske aus anderen Angaben zunächst als "Kommazahl" mit "unbegrenzter" Genauigkeit berechnet wird. Für die Abrechnung von Service-Positionen ist eine "kaufmännische Rundung" der Stundenzahl je Position auf eine Dezimalstelle vereinbart, so dass die Services mit einer Genauigkeit von 6 Minuten bewertet werden und Einzelpositionen mit einem rechnerischen Arbeitsinhalt von weniger als 3 Minuten kostenfrei abgewickelt werden.

Beim Speichern einer Bestellung soll die definierte Rundung für die "Arbeitsstunden" je Service-Position festgeschrieben werden.

Eine Ereignisbehandlung, die auf die Ereignisse "Erstellen" und "Ändern" (s. Allgemein (Ereignisse)) reagiert, stellt über eine Typprüfung sicher, dass eine Bestellung als Eingabewert anliegt.

Als Aktion bei bestandener Regel wird eine Für jeden Eintrag wiederholen (Schleife) wie rechts abgebildet konfiguriert:

  • Der Wertauflöser für Einträge greift auf Direkte Positionen Vom Typ "Service" zu, so dass innerhalb der Schleife das je Iteration wechselnde Bezugsobjekt jeweils eine bestimmte Service-Position ist.

  • Im Aktionsblock der Schleife wird die Ereignisaktion Numerisches Attribut runden für den Typ "Arbeitsstunden" (Nummerntyp) mit einer Anzahl Dezimalstellen von 1 ausgeführt. Sofern eine Service-Position "Arbeitsstunden" spezifiziert, werden diese also auf "Zehntelstunden" genau auf - oder gerundet.

ANMERKUNG◄ Die Ereignisbehandlung wird ausgehend von den Ereignissen "Erstellen" und "Ändern" ausgelöst, also beim "Speichern" der Bestellung. Daher erübrigt sich hier ein Aufruf von Änderungen später speichern. Diese wäre z. B. dann erforderlich, wenn die Rundung auch für eine selektierte Bestellung in einer Übersicht auslösbar sein soll, indem ein Ribbon-Makro-Befehl ein Eigenes Aktionsevent triggert.

images/download/attachments/177907142/Screenshot_2024-08-07_at_08-29-31_test1-version-1-modificationdate-1723019380991-api-v2.png