30.12.2009, 14:05 | #1 |
Участник
|
jinx: Ermittlung des verbleibenden Kreditlimits
Für Debitoren (Kunden) kann in Microsoft Dynamics AX ein Kreditlimit vergeben/eingestelltwerden.
In der Auftragsmaske wird bei Anlage eines Auftrag (in Abhängigkeit der Kreditlimit-Einstellungen)das verbleibende Kreditlimit berechnet und der Auftragswert gegen dieses geprüft. Bei Überschreitung des Kreditlimits wird eine entsprechende Warnung oder ein entsprechenderFehler ausgegeben. Die Funktion zur Überprüfung des Kreditlimits kann auch manuell, durch eineentsprechende Funktion auf der Auftragsmaske, aufgerufen werden. Soll das verbleibende Kreditlimit mit X++ Code berechnet werden, muss leider eine“Kleinigkeit” beachtet werden, die so auf den ersten Blick nicht immer ersichtlichist bzw. für Verwirrung sorgen kann. Die Berechnung des verfügbaren Kreditrahmens oder des verbleibenden Kreditlimits istdurch die alleinige Angabe eines Debitors nicht möglich. Es muss immer ein entsprechender Auftrag “vorhanden” sein um diese auszuführen zukönnen. Berechtigterweise stellt sich die Frage, wie das verbleibende Kreditlimit eines Debitorsberechnet werden kann, wenn keine “Beziehung” zu einem Auftrag besteht bzw. wenn keinAuftrag angegeben werden kann. Hierfür muss ein kleiner “Trick” angewendet werden, der nichts anderes macht, alseinen neuen “SalesTable” Datensatz zu initialisieren, diesen aber nicht zu speichern. Ist der “SalesTable” Datensatz initialisiert kann mithilfe der beiden Klassen “SalesTotals”und “CustCreditLimit” der verfügbare Kreditrahmen berechnet werden. Beispiel: CustTable custTable = CustTable::find("1101"); CustCreditLimit custCreditLimit; SalesTotals salesTotals; SalesTable salesTable; AmountMST balanceEstimate; AmountMst creditRemain; ; salesTable.CustAccount = custTable.AccountNum; salesTable.initFromCustTable(); salesTotals = SalesTotals::construct(salesTable); salesTotals.calc(); custCreditLimit = CustCreditLimit::construct(salesTable); balanceEstimate = custCreditLimit.balanceEstimate(); if(custCreditLimit.useEstimated()) { creditRemain -= balanceEstimate; } creditRemain += conpeek(salesTotals.displayFieldsCurrency(CustTable.Currency), TradeTotals::posFreeValue()); info(strfmt("Verbleibendes Kreditlimit: %1", creditRemain)); .csharpcode, .csharpcode pre{ font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em;}.csharpcode .lnum { color: #606060; } Es wird keine Haftung oder Gewährleistung auf die Richtigkeit der gemachten Angaben gegeben. Die Verwendung erfolgt auf eigene Gefahr. Copyright © Axel Kühn (Aku's AX Blog, http://blog.ak-home.net) and Mathias Füßler (jinx's AX Blog, http://starside.eu) More... |
|
|
|