Durchschnittspreisberechnung
Definition
Durchschnittspreis wird auf dem Lagerkonto des jeweiligen Teils als Preis per Menge gespeichert (Anzeige s. Logistikkonto) und laufend geführt. Die Berechnungsregeln werden nicht im Programmcode, sondern in der Datenbank durch die Transaktionsbeschreibungen für entsprechende bestandswirksame Belege festgelegt. Als Berechnungsbasis kann der Rollenpreis des Teiles (Fertigungsteil/Bestellartikel) oder der Preis des Belegs verwendet werden. Diese Einstellung kann unter dem Mandanten vorgenommen werden, siehe.
- Durchschnittspreis nach Rollenpreis = In den Wareneinlagerungsbeleg wird der Preis aus der durch das Logistik-Kennzeichen eingestellten Beschaffungsart (Kaufteil/Fertigungsteil) festgelegten Rolle gezogen, d.h. bei Kaufteilen aus dem Bestellartikel der Standardwert und bei Fertigungsteilen die Herstellungskosten. Der Rollenpreis bestimmt also die Entwicklung des Durchschnittspreises auf dem Lagerkonto und der Monatsbewertung über den Durchschnittspreis.
- Durchschnittspreis nach Belegpreis = In den Wareneinlagerungsbeleg wird wenn vorhanden der Preis aus dem Vorgängerbeleg geschrieben. Wird eine Wareneingang also ausgelöst durch eine Bestellung verbucht, so wird der Bestellpreis unter Berücksichtigung aller Rabatte in den Wareneinlagerungsbeleg geschrieben. Dieser steuert wie oben den Durchschnittspreis.
Der Durchschnittspreis steht in beiden Fällen in dem Logistik-Konto, jedoch wird dieser mit einer unterschiedlich Basis berechnet. Auf jedem Beleg wird der aktuelle Preis vom Beleg "pricePer" und von der Rolle "last.defaultPricePer" abgeschrieben.
Die vorhandenen Durchschnittspreise der lagergeführten Teile können Sie im Menü "Dienste --> Materialwirtschaft" in der Karteikarte "Lagerkonto" prüfen. Siehe
Momentan wird folgendes Standard-Schema benutzt:
Beleg | Funktionalität | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Wareneingangsposition |
|
||||||||||||
Wareneinlagerungsposition |
|
||||||||||||
Warenauslagerungsposition |
|
||||||||||||
Lieferscheinposition (Direkte Lagerbuchung) |
|
||||||||||||
Inventurbelegposition |
|
Bei jeder Änderung des Durchschnittspreises wird auch das Datum der Änderung im Lagerkonto gespeichert.
Rechnung
Durchschnittspreis wird mit jedem Materialzugang wie folgt angepasst:
Der Wert für den Zugangspreis wird je nach Einstellung im Mandanten aus dem Slot pricePer (= Belegpreis) oder last.defaultPricePer (=Rollenpreis) genommen.
( alter Bestand * alter Durchschnittspreis + Zugangsmenge * Zugangspreis ) / ( alter Bestand + Zugangsmenge ) ==> neuer Durchschnittspreis
Durchschnittspreis wird mit jedem Inventurbeleg wie folgt angepasst:
alter Durchschnittspreis = average.PricePer
Bewertungspreis = pricePer
( alter Bestand * alter Durchschnittspreis + Zählmenge * Bewertungspreis - Soll-Menge * Durchschnittspreis ) / ( alter Bestand + Zählmenge - Soll-Menge ) ==> neuer Durchschnittspreis
Der neue Durchschnittspreis wird anschließend auf die im System vorgegebene Anzahl der Nachkommastellen gerundet (z.B. für Euro = 2 Nachkommastellen) und auf den vorherigen Per-Faktor normiert (s. unten Beispiele).
Dieses Berechnungsschema bewirkt gleichzeitig, dass für das jeweilige Lagerkonto zu jedem Zeitpunkt stimmt (s. auch unten Sonderfall 3):
( Anfangslagerwert + Summe aller Zugangswerte - Summe aller Abgangswerte ) / (Anfangsbestand + Summe aller Zugänge - Summe aller Abgänge ) = Durchschnittspreis
Sonderfälle:
- Alter Durchschnittspreis war Null:
Der neue Durchschnittspreis wird von dem Zugangsbeleg übernommen. - Belegmenge oder Belegpreis = Null:
Der Durchschnittspreis wird nicht geändert, die Rechnung stimmt weiterhin. - Der alte oder der neue Bestand ist negativ:
Die Benutzung der oben angegebenen Formeln würde zu der absurden Rechnung führen, dass bei negativem Bestand der Zugang der teureren Ware den Durchschnittspreis vermindert u.s.w. Deswegen wird der Durchschnittspreis von dem Zugangsbeleg direkt übernommen, was eventuell zur Abweichung von der Gesamtrechnung auf dem Lagerkonto führen kann.
Beispiele
Beispiel 1:
Beleg | Zugang | Abgang | Preis | Bestand | Durchschnittspreis |
---|---|---|---|---|---|
0 Stück | - | ||||
Warenzugang | 25 Stück | 120,00 EUR / 1 Stück | 25 Stück | 120,00 EUR / 1 Stück | |
Warenentnahme | 5 Stück | 120,00 EUR / 1 Stück | 20 Stück | 120,00 EUR / 1 Stück | |
Warenzugang | 10 Stück | 140,00 EUR / 1 Stück | 30 Stück | 126,67 EUR / 1 Stück | |
Warenentnahme | 20 Stück | 126,67 EUR / 1 Stück | 10 Stück | 126,67 EUR / 1 Stück | |
Warenzugang | 30 Stück | 100,00 EUR / 1 Stück | 40 Stück | 106,67 EUR / 1 Stück | |
Inventur | 40 Stück (Zählmenge) | 40 Stück (Soll-Menge) | Bewertungspreis 100,00 EUR / 1 Stück Durchschnittspreis 106,67 EUR / 1 Stück |
40 Stück | 100,00 EUR / 1 Stück |
Beispiel 2:
Beleg | Zugang | Abgang | Preis | Bestand | Durchschnittspreis |
---|---|---|---|---|---|
0 Stück | - | ||||
Warenzugang | 350 m | 16,50 EUR / 100 m | 350 m | 16,50 EUR / 100 m | |
Lieferschein | 200 m | 16,50 EUR / 100 m | 150 m | 16,50 EUR / 100 m | |
Warenzugang | 350 m | 14,50 EUR / 100 m | 500 m | 15,10 EUR / 100 m | |
Lieferschein | 300 m | 15,10 EUR / 100 m | 200 m | 15,10 EUR / 100 m | |
Lieferschein | 400 m | 15,10 EUR / 100 m | -200 m | 15,10 EUR / 100 m | |
Warenzugang | 300 m | 14,90 EUR / 100 m | 100 m | 14,90 EUR / 100 m | |
Warenzugang | 200 m | 14,80 EUR / 100 m | 300 m | 14,83 EUR / 100 m |
Verwandte Themen
Technische Dokumentation
Der Durchschnittspreis wird auf dem Lagerkonto (CX_STOCK_ACCOUNT) im Slot average.pricePer gespeichert. Das Datum der letzten Änderung des Durchschnittspreises wird auf dem Lagerkonto (CX_STOCK_ACCOUNT) im Slot average.date gespeichert.
Standard-Zuweisungsformel aus der Transaktionsbeschreibung des Warenzugangsbeleges:
RoundAutomatically(ValuePer((average.pricePer * current.quantity + pricePer * quantity) / (current.quantity + quantity) * average.pricePer.Denominator(), average.pricePer.Denominator()))
Vorbedingung:
if(has(current.quantity) & has(average.pricePer) & has(quantity) & has(pricePer)) (IsZero(quantity * pricePer)=0 & current.quantity + quantity > 0 & current.quantity > 0) else false