Kategorien
SAP Schulung

SAP Zinsrechnung

Kaufmännisches Rechnen hört sich simpel an, ist es aber nicht. In einem Workshop habe ich gezeigt, dass das Feld sehr groß ist. Obwohl SAP die Zinsrechnung bis in das kleinste Detail gut durchdacht hat, lohnt es sich darüber nach zu denken.

Die Zinsrechnung ist weitaus mehr als Zins = Betrag * Zinssatz / 100. Es tauchen Fragen auf wie: Ist der Zins in einer Periode linear oder exponentiell verteilt. Ist der Zinssatz auf 365 oder, banküblich, auf 360 Tage zu verteilen. Und, und, und. Aus dem Schaubild der SAP geht das Prinzip hervor, wie und womit die Zinsrechnung im System realisiert wird.

SAP Zinsrechnung
Copyright by SAP
Tabelle Leitzins T056B
Tabelle Leitzins T056B

In der Realität wird zur Bestimmung eines Zinssatzes u.a. die Tabelle T056P befragt, in der auch der EZB Leitzins abgespeichert ist. In dem Schulungssystem des letzten Workshops war die Tabelle leer, weshalb ich sie mit den Echtdaten der EZB gefüllt habe.

An der Stelle ist schon der Typ des Datenelementes zu beachten: Der Zins ist vom Datentyp DEC, 10 Zeichen lang davon 7 Nachkommastellen und entspricht dem ABAP Datentyp p (packed). Das ist wichtig in Bezug auf die Nutzung der im ersten Bild angesprochenen Funktionsbausteinen, die als Importparameter für den Zinssatz den ABAP Datentyp f (float) voraus setzen! An der Stelle habe ich meinen Teilnehmern das Nachschlagen unter dem  Stichwort „Festpunktarithmetik“ anheim gestellt, denn das habe ich zur Erhöhung des Spaßfaktors deaktiviert! Die Folgen können hier nachgelesen werden. (Link).

Zunächst aber die Problematik in der Betrachtung des Zeitraums: Eine Bank rechnet nicht nach Kalendar. Ein Jahr hat für die Bank 360 Tage, ein Monat immer 30 Tage. Es hat den Vorteil, das man über Schaltjahre garnicht erst nachdenken muss. Ein Zeitraum, also die Anzahl Tage zwischen zwei Daten, ist einfach zu programmieren. Der Datentyp DATS, ABAP Datentyp d, ist ein CLIKE also ein Feld vom Typ  Like Charakter. Das Format ist „YYYYMMTT“. Es lässt sich mit den Werkzeugen der Stringmanipulation, dem Textoffset, bequem auslesen und auch Rechenoperationen sind systemseitig realisiert. So funktioniert „TAGE = DATUM2 – DATUM1“ genau so wie „Monate = DATUM2+4(2) – DATUM1+4(2)“. Genau das wird mit dem Funktionsbaustein FIMA_DAYS_BETWEEN_TWO_DATES realisiert, dem wir uns problemlos bedienen können. Die Berechnung nach Bankstandard ist auch hier Standard!

In dem Listing (Link) ist in Zeile 29 zu sehen, das der Datumswert, wie auch in der Tabelle T056P, als invertiertes

28.07.2018 und 01.01.2020 Normal und invertiert
28.07.2018 und 01.01.2020 Normal und invertiert

Datum erfasst wird. Nach der Konvertierung suchen wir aus der Tabelle den zum Startzeitpunkt gültigen Zinssatz und addieren den in Zeile 30 abgefragten Zinswert welcher über dem Leitzins errechnet werden soll.

Stehen die Parameter Basisbetrag, Startdatum und Zinssatz soweit fest, kann der Zins mit dem Funktionsbaustein FIMA_INTEREST_COMPUTE errechnet werden. Schauen wir in die Zeile 102 auf den Importparameter i_pzins. Der Datentyp ist f (float). Mit ausgeschalteter Festpunktarithmetik wird jetzt,  schon beim Casting der Werte, der Wert mit dem Typ DEC als Ganzzahl interpretiert. Wir sagten: DEC 10 Stellen, 7 Dezimal. Wenn der Wert vorher 10,1000000 war, ist er jetzt 101000000. Genau DAS passiert in Zeile 96. In Zeile 97 ist eine mögliche Korrektur, nämlich die Division mit 10000000 – das Komma um sieben Stellen verschoben. Statt solcher unschönen Klimmzügen, geben wir die Werte einem Funktionsbaustein in dessen Funktionsgruppendefinition die Festpunktarithmetik aktiviert ist. Dieser Funktionsbaustein Y_ZAHL übergibt schlicht den Wert mit dem Typ p (packed) and den Typ f (float) unter Beachtung des Dezimaltrenners.

Die Daten so, korrekt, dem Funktionsbaustein FIMA_INTEREST_COMPUTE übergeben, wird unter Beachtung der Zinsrechnungsmethode ( Standard ist die lineare Verteilung auf 360 Tage ) und des Verteilungsquotient ( Tage / Basistage ) der Zins errechnet.

entscheidende Formel im FB FIMA_INTEREST_COMPUTE
entscheidende Formel im FB FIMA_INTEREST_COMPUTE

In Zeile 115 bauen wir so unsere Tabelle auf, die durch den Loop in den Zeilen 45 bis 121, maximal soviele Zeilen aufweist wie auch Zinssätze in der Tabelle T056P vorhanden sind. Im Echtsystem ist das Vorgehen so nicht empfehlenswert, da die Tabelle im Normalfall mehr als 88.000 Einträge hat.

Eine Antwort auf „SAP Zinsrechnung“