Egal ob Anfänger oder schon erfahrener Dynamics AX Entwickler.
Von Zeit zu Zeit tauchen immer die gleichen Fragen und/oder Problemstellungen auf.
Was immer mal wieder in Foren oder Newsgroups zu lesen ist, ist die Frage, wie die Berechnung des Artikelpreises für eine Debitor mit X++ Code durchgeführt werden kann.
Der Standard von Microsoft Dynamics AX bringt zwar eine Maske zur “Preisabfrage” mit sich, welche diese Problemstellung eigentlich schon löst, allerdings ist es manchmal
notwendig, die Preisberechnung z.B. in einer Klasse durchzuführen, um mit dem Ergebnis weitere Operationen durchführen zu können.
Da in Dynamics AX Preise für einen Artikel nicht nur “direkt” im Artikelstamm, sondern auch in den Handelsvereinbarungen, hinterlegt werden können, stellt der Standard von
Dynamics AX die Klasse “PriceDisc” zur Verfügung, welche alle Möglichkeiten der Preispflege berücksichtig.
Unter Anderem werden auch Rabatte bzw. Zuschläge der Handelsvereinbarungen durch diese Klasse berücksichtigt.
Die Klasse “PriceDisc” stellt die statische Methode “actualSalesPriceDisc” bereit. Mit dieser können z.B. der Verkaufspreis pro Preiseinheit, der Rabatt oder die Zuschläge
berechnet und/oder ermittelt werden.
Durch eine zweite statische Methode “price2Amount” lässt sich anschließend der Nettobetrag eines Artikels ausrechnen.
Beispiel:
CustTable custTable = CustTable::find("5010");InventTable inventTable = InventTable::find("1000");Qty qty = 1.00;
SalesPrice salesPrice; // Verkaufspreis je Preiseinheit
PriceMarkup salesMarkup; //Preis sonst. Zuschläge
PriceUnit priceUnit; // Preiseinheit
SalesLineDisc salesLineDisc; // Rabatt
SalesLinePercent salesLinePercent;
DiscPct percent1;
DiscPct percent2;
PriceDiscTable actualPrice; // Gefundener Datensatz der Handelsvereinbarung (Verkaufspreis)
PriceDiscTable actualDisc; // Gefundener Datensatz der Handelsvereinbarung (Rabatte)
AmountCur lineAmount; // Nettobetrag
;
[salesPrice, salesMarkup, priceUnit,
salesLineDisc, salesLinePercent, percent1,
percent2, actualPrice, actualDisc] = PriceDisc::actualSalesPriceDisc(custTable, inventTable, qty);
lineAmount = PriceDisc::price2Amount(salesPrice, priceUnit, salesLineDisc, qty,
qty, salesMarkup, salesLinePercent,
custTable.Currency, 0);