Doubletten in verschiedenen SAP Stamm- oder Bewegungsdaten können immer wieder zu Problemen in den Geschäftsprozessen führen und erhöhen somit das Risiko von fehlerhaften Erfassung von Geschäftsvorfällen. Die Grundbuch-, Journal- und Kontenfunktion der GobD (Grundsätze zur ordnungsmäßigen Führung und Aufbewahrung von Büchern, Aufzeichnungen und Unterlagen in elektronischer Form sowie zum Datenzugriff) besagt, dass die Aufzeichnungen von Geschäftsvorfällen in zeitlicher Reihenfolge und in sachlicher Ordnung zu erfolgen haben. Teilziffer 82 der GobD´s:
Ein mangelhaftes Stammdatenmanagement beeinflusst mit einer erhöhten Fehleranfälligkeit somit auch die ordnungsgemäße Rechnungslegung im Unternehmen. Präventive Kontrollen in den jeweiligen Geschäftsprozessen (internes Kontrollsystem) sollen dabei helfen doppelte Stamm- und Bewegungsdatenanlagen zu vermeiden. Eine Pflicht zur Einrichtung eines internen Kontrollsystems kann aus dem § 146 der Abgabenordnung abgleitet werden. In den GoBD´s werden hier ebenfalls die Erfassungskontrollen explizit genannt.
Eine Möglichkeit zur nachträglichen Implementierung einer solchen Kontrolle mit Hilfe von „SAP Userexits“ soll hier beispielhaft dargestellt werden:
Userexits sind Zeitpunkte in einem SAP-Programm, zu dem ein kundeneigenes Programm aufgerufen werden kann. Im Gegensatz zu Customer-Exits kann der Entwickler über User-Exits auf Programmteile und Datenobjekte des Standards zugreifen und ändern. Beim Upgrade muss jeweils geprüft werden, ob die Erweiterung durch einen User-Exit zum Standard noch passen.
In diesem Beispiel soll eine Prüfung zur Vermeidung einer Stammdatenanlage eines doppelten Kreditoren angelegt werden.
Programm zum Anlegen von Kreditoren in SAP.
Mit der Transaktion SE37 kann nach verfügbaren bzw. von SAP bereitgestellten relevanten User-Exits gesucht werden.
Der Userexit „EXIT_SAPMF02K_001“ verfügt über einen Programmabsprung, der für kundenindividuelle Anpassungen (Include ZXF05U01) verwendet werden kann.
Coding der Prüfung
In der Tabelle LFA1 (Lieferantenstamm (allgemeiner Teil)) soll geprüft werden, ob der eingegebene Kreditorenname nicht bereits vorhanden ist.
Der Wert mit dem verglichen wird ist I_LFA1 (ein Wert der von der Funktion importiert wird.)
Die Fehlermeldung zwingt den Anwender zur erneuten Eingabe des Kreditorennamen bzw. der Überprüfung seiner Eingaben, bevor es zu einer Stammdatendoublette kommt.