Eine häufige Anforderung in Projekten ist es, daß Auftrags- oder Bestellpositionen durch irgendeine Programmlogik erstellt werden sollen, beispielsweise durch Datenimporte o.ä.
Zuletzt hatte ich erstmalig die Anforderung, daß per Code generierten Auftragspositionen anschließend aber manuell bearbeitet werden sollen, wobei die Preisinformationen wie Verkaufspreis und -rabatt aber unbedingt erhalten bleiben sollten.
Bearbeitet man in Dynamics AX aber bestimmte Felder einer Position, löst dies aber u.U. eine Preisfindung aus. Diese galt es also zu verhindern bzw. durch eine Abfrage den Benutzer zumindest davor hinzuweisen. Glücklicherweise gibt es eine solche Abfrage bereits, die über die folgenden Felder gesteuert wird:
Feld
Beschreibung
ManualEntryChangepolicy
Referenz auf Tabelle PriceDiscChangePolicy
SystemEntryChangePolicy
Referenz auf Tabelle PriceDiscChangePolicy
SystemEntrySource
BaseEnum
Übersteuert man in einer Auftragsposition manuell den Preis, kümmert sich AX um das Befüllen dieser Felder und kennzeichnet so die Preisinformationen als manuell verändert.
Ändert man anschließend beispielsweise die Auftragsmenge, öffnet sich folgender Dialog:
Ob sich dieser Dialog öffnet, wird übrigens über die Debitorenparameter > Preise > Handelsvereinbarungsauswertung gesteuert.
Nun werden die oben genannten Felder aber nur bestimmten Umständen von AX befüllt, d.h. man muss sich bei der Erstellung einer Auftragsposition per Code explizit um diese Felder kümmern.
Tut man dies nicht, werden die per Code geschriebene Preisinformationen überschrieben, wenn mit der Position irgendetwas passiert, was eine Preisfindung erforderlich macht.
Nachfolgende findet Ihr ein paar Beispiele, wie man eine Auftragsposition per Code anlegt und dabei die genannten Felder so setzt, daß bei einer Änderung von preisrelevanten Feldern in der Position sich der oben beschriebene Dialog öffnet. Bei all diesen Beispiele tue ich praktisch so, als wären die Preise manuell erfasst worden, das wird über den BaseEnum PriceDiscSystemSource gesteuert.
Erstellen einer Position per AxSalesLine
Für jedes manuell befüllte Preis-Feld muss die Methode setPriceDiscChangePolicy() aufgerufen werden
Diese Webseite verwendet Cookies, um Benutzern einen besseren Service anzubieten. Wenn Sie weiterhin auf der Seite bleiben, stimmen Sie der Verwendung von Cookies zu.
Mehr dazu
Eine häufige Anforderung in Projekten ist es, daß Auftrags- oder Bestellpositionen durch irgendeine Programmlogik erstellt werden sollen, beispielsweise durch Datenimporte o.ä.
Zuletzt hatte ich erstmalig die Anforderung, daß per Code generierten Auftragspositionen anschließend aber manuell bearbeitet werden sollen, wobei die Preisinformationen wie Verkaufspreis und -rabatt aber unbedingt erhalten bleiben sollten.
Bearbeitet man in Dynamics AX aber bestimmte Felder einer Position, löst dies aber u.U. eine Preisfindung aus. Diese galt es also zu verhindern bzw. durch eine Abfrage den Benutzer zumindest davor hinzuweisen. Glücklicherweise gibt es eine solche Abfrage bereits, die über die folgenden Felder gesteuert wird:
Übersteuert man in einer Auftragsposition manuell den Preis, kümmert sich AX um das Befüllen dieser Felder und kennzeichnet so die Preisinformationen als manuell verändert.
Ändert man anschließend beispielsweise die Auftragsmenge, öffnet sich folgender Dialog:
Ob sich dieser Dialog öffnet, wird übrigens über die Debitorenparameter > Preise > Handelsvereinbarungsauswertung gesteuert.
Nun werden die oben genannten Felder aber nur bestimmten Umständen von AX befüllt, d.h. man muss sich bei der Erstellung einer Auftragsposition per Code explizit um diese Felder kümmern.
Tut man dies nicht, werden die per Code geschriebene Preisinformationen überschrieben, wenn mit der Position irgendetwas passiert, was eine Preisfindung erforderlich macht.
Nachfolgende findet Ihr ein paar Beispiele, wie man eine Auftragsposition per Code anlegt und dabei die genannten Felder so setzt, daß bei einer Änderung von preisrelevanten Feldern in der Position sich der oben beschriebene Dialog öffnet. Bei all diesen Beispiele tue ich praktisch so, als wären die Preise manuell erfasst worden, das wird über den BaseEnum PriceDiscSystemSource gesteuert.
Erstellen einer Position per AxSalesLine
Für jedes manuell befüllte Preis-Feld muss die Methode setPriceDiscChangePolicy() aufgerufen werden
Erstellen einer Position per SalesLine.create()
Für jedes manuell befüllte Preis-Feld muss die Methode setPriceDiscChangePolicy() aufgerufen werden
Das oben beschriebene trifft übrigens nicht nur für Auftragspositionen zu, sondern beispielsweise auch auf Bestellpositionen.
Beispiel für eine Bestellposition über AxPurchLine
Detailiertere Information sind auch im Dokument "Trade agreement evaluation policies in Microsoft Dynamics AX 2012" zu finden.