Für Debitoren (Kunden) kann in Microsoft Dynamics AX ein Kreditlimit vergeben/eingestellt werden.
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 entsprechender Fehler ausgegeben.
Die Funktion zur Überprüfung des Kreditlimits kann auch manuell, durch eine entsprechende 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 ersichtlich ist bzw. für Verwirrung sorgen kann.
Die Berechnung des verfügbaren Kreditrahmens oder des verbleibenden Kreditlimits ist durch die alleinige Angabe eines Debitors nicht möglich.
Es muss immer ein entsprechender Auftrag “vorhanden” sein um diese auszuführen zu können.
Berechtigterweise stellt sich die Frage, wie das verbleibende Kreditlimit eines Debitors berechnet werden kann, wenn keine “Beziehung” zu einem Auftrag besteht bzw. wenn kein Auftrag angegeben werden kann.
Hierfür muss ein kleiner “Trick” angewendet werden, der nichts anderes macht, als einen 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));