Aufschlagprozentberechnung und Rückwärtsrechnung vom Einzelpreis

Dieses Thema im Forum "AppDesigner" wurde erstellt von AndreasOhlig, 15. September 2020.

  1. AndreasOhlig

    AndreasOhlig Neues Mitglied

    Hallo. Ich habe momentan die folgende Anforderung:

    An der Belegposition soll ein neues User-Feld "AufschlagProzent" automatisch berechnet werden (sofern Einzelpreis, VKRoherloes und Menge angegeben sind). Wenn der Einzelpreis sich ändert, dann sollte das User-Feld "Aufschlagprozent" neu berechnet und an der Position gesetzt werden

    Formel: USER_AufschlagProzent = [VKRoherloes] * 100 / ([VKMIttlererEK] * [Menge])

    Wenn sich das User-Feld "Aufschlagprozent" ändert, dann sollte der Einzelpreis neu berechnet und an der Position gesetzt werden

    Formel: Einzelpreis = ([VKRoherloes] + [VKMittlererEK] * [Menge]) / [Menge]

    Standardmäßig wird der Roherlös automatisch berechnet, wenn der Einzelpreis oder die Menge sich ändert.

    Nun bin ich bei der Implementierung auf ein Problem gestoßen. Die Lösung sollte nur über eine Technologie umgesetzt werden (entweder AppDesigner-Makro oder DCM).

    Wenn ich die Berechnungen im Makro "Nach Aktualisierung vom Feld {USER_AufschlagProzent /Einzelpreis}" in der Datenstruktur implementiere, dann kommt es zu einer Art Endlosschleife, da eine Änderung am Aufschlagprozent wiederum eine Änderung am Einzelpreis verursacht, was wiederum den Aufschlagprozent neu berechnet und ändert und so weiter. Anscheinend gibt es aber bei Sage irgendwas, das die Endlosschleife abbricht, denn beim Debuggen springt das Makro fürs erste Feld (Aufschlagprozent) einmal ein, dann springt das Makro vom Einzelpreis und dann nochmal das vom Aufschlagprozent, bevor es dann aus dem Makro raus springt.

    Ich habe noch keinen Weg gefunden, die Berechnung im Makro mit den richtigen Werten durchzuführen, da bei Änderung am Einzelpreis automatisch der Roherlös neu berechnet wird und der neu berechnete Roherlös aber nicht für die Berechnung des Aufschlagprozents verwendet wird, was aber so sein sollte.

    Die Lösung rein über eine DCM zu implementieren ist mir leider bisher nicht gelungen, da der DCM-Einsprung beim Ereignis VKBelegPositionRecalculate nur bei Änderungen an Berechnungswirksame Felder (also Menge, Einzelpreis) erfolgt. Eine Änderung am Aufschlagprozent führt also nicht zum Einsprung der DCM, es sei denn, es wird im Makro vom Aufschlagprozent eine Änderung am Einzelpreis definiert (durch FestlegenFeldWert Einzelpreis.)

    Obwohl das nicht schön ist, habe ich genau das ausprobiert, um dann in der DCM die Formeln mit den richtigen Werten zu berechnen.

    Komisch ist jedoch, dass es beim Setzen des Roherlöses an der Belegposition zu einem Rundungsfehler kommt, der nicht aus der DCM stammt. Das habe ich überprüft, indem ich ein Haltepunkt am Ende der DCM gesetzt habe und die Werte der Felder überwacht habe. Bis dahin stimmen die Werte, aber sobald die DCM mit der nächsten Position beginnt (bzw. sobald die nächste Position initialisiert wird), dann stimmt der VKRoherloes der 1. Position nicht mehr (Es gibt einen Rundungsfehler: z.B. wird 6332 erwartet [aufgerundet von 6331.8], aber an der Position steht dann 6333).

    Gibt es einen einfachen Weg, die Berechnung nur über Makros durchzuführen, sodass ich immer mit den korrekten Werten der Felder die entsprechende Berechnung durchführen kann?

    Für jegliche Hilfe wäre ich sehr dankbar!
     

Diese Seite empfehlen