Nichts hält ewig – sollte man meinen. Heute geht es um das Thema Dauerbuchungen. SAP bietet an vielen Stellen die Möglichkeit, wiederholende Tätigkeiten zu automatisieren und damit den Aufwand für bspw. die monatliche Buchung der Miete zu minimieren.
Klingt auf den ersten Blick sehr gut und hilfreich, doch wo Licht ist, da ist auch Schatten. Was, wenn zu diesen Vorlagen keine Urbelege mehr existieren und die auf diesen Vorlagen basierenden Buchungen weiterhin durchgeführt werden? Oder was, wenn sich Bilanzkonten in Ihrem SAP System ändern, die Vorlagen aber weiter wie bisher ausgeführt werden? Im ersten Falle haben wir Buchungen ohne Beleg, der letzte Fall führt ggf. zu Falschausweisen in der Bilanz und GuV.
Ein regelmäßiger Check auf Dauerbuchungen ist daher also angeraten und wir empfehlen eine Auswertung im Rahmen des Journal Entry Testings.
Wie lassen sich Dauerbuchungen in SAP aufspüren?
Bekanntermaßen führen alle Weg nach Rom. So auch im Fall einer Analyse von Dauerbuchungen. Zunächst werfen wir einen Blick auf die Auswertung per SQL, bevor wir zum Ende des Artikels das manuelle Vorgehen mit den Transaktionen „SE16N“ und „SQVI“ vorstellen. Hier springen sie direkt zur Anleitung ohne SQL.
Ein einfaches „SELECT“ auf die Tabelle „BKPF“ (Belegkopf für Buchhaltung) mit dem Blick auf das Datenfeld „BSTAT“ gibt einen Überblick der aktuell im System hinterlegten Dauerbuchungsvorlagen:
SELECT BKPF.BUKRS, BKPF.BELNR, BKPF.GJAHR, BKPF.BUDAT FROM BKPF WHERE BKPF.BSTAT = 'D' ORDER BY BKPF.GJAHR, BKPF.BUKRS ASC
BUKRS | BELNR | GJAHR | BUDAT |
---|---|---|---|
1000 | 9100000000 | 1995 | 19950127 |
1000 | 9100000004 | 1996 | 19960702 |
3000 | 9100000000 | 2003 | 20030411 |
1000 | 9100000000 | 2004 | 20040319 |
3000 | 9100000001 | 2012 | 20121103 |
2222 | 9100000000 | 2014 | 20140407 |
… | … | … | … |
In diesem Falle zeigt „BUDAT“ das Datum, an dem diese Vorlage erstellt wurde. Diese sind noch nicht als Geschäftsvorfall verbucht, da es sich lediglich um Vorlagen / Blaupausen handelt.
Mehr Details zu diesen einzelnen Vorlagen offenbart ein Blick in die Tabelle „BKDF“ (Belegkopfergänzung für Dauerbuchung):
SELECT BKDF.BUKRS, BKDF.BELNR, BKDF.GJAHR, BKDF.DBMON, BKDF.DBTAG, BKDF.DBBDT, BKDF.DBEDT, BKDF.DBZHL FROM BKDF ORDER BY BKDF.GJAHR, BKDF.BUKRS ASC
BUKRS | BELNR | GJAHR | DBMON | DBTAG | DBBDT | DBEDT | DBZHL |
---|---|---|---|---|---|---|---|
1000 | 9100000000 | 1995 | 01 | 28 | 19950101 | 19963112 | 1 |
1000 | 9100000004 | 1996 | 03 | 15 | 19960215 | 20201115 | 0 |
3000 | 9100000000 | 2003 | 01 | 03 | 20030101 | 20051231 | 0 |
1000 | 9100000000 | 2004 | 01 | 15 | 20040312 | 20041228 | 2 |
3000 | 9100000001 | 2012 | 01 | 30 | 20121130 | 20151231 | 1 |
2222 | 9100000000 | 2014 | 01 | 01 | 20140101 | 20181231 | 2 |
… | … | … | … | … | … | … | … |
Das Datenfeld „DBMON“ zeigt die geplante Ausführung in Monaten an. 01 steht bspw für monatliche Durchführung. 00? „DBBDT“ zeigt, wann diese Dauerbuchung erstmalig, „DBEDT“ zeigt, wann sie letztmalig angewendet werden soll. Hier fällt auf, dass einige Einträge in „DBZAHL“ – dem Feld, das anzeigt, wie häufig aus diesen Vorlagen Buchungsstoff erstellt wurde, dass sie nie (0) oder sehr selten (1-mal, 2-mal) genutzt wurde. Hier stellt sich also die Frage, warum überhaupt Vorlagen angelegt und dann nicht genutzt werden. Des Weiteren ist die zweite Zeile in dem Ergebnis erwähnenswert, hier wurde noch nie ein Beleg erzeugt, die Vorlage kann aber noch bis zum 15.11.2020 genutzt werden. Hier stellt sich also die Frage, ob im Falle einer auf dieser Vorlage basierenden Buchung, überhaupt noch ein Urbeleg vorhanden ist.
Die Verbindung aus der Tabelle „BKDF“ und „BKPF“ mit einem „left join“ listet die aus jeder Vorlage erzeugten Buchungsbelege auf und zeigt damit, wann konkret ein Geschäftsvorfall aus der Vorlage erstellt wurde.
SELECT BKDF.BUKRS, BKDF.BELNR DBBLG, BKDF.GJAHR, BKPF.BELNR, BKPF.BUDAT, BKPF.BKTXT FROM BKDF LEFT JOIN BKPF ON (BKDF.MANDT = BKPF.MANDT AND BKDF.BUKRS = BKPF.BUKRS AND BKDF.GJAHR = BKPF.GJAHR AND BKDF.BELNR = BKPF.DBBLG) ORDER BY BKDF.GJAHR, BKDF.BUKRS, BKPF.BUDAT ASC
BUKRS | DBBLG | GJAHR | BELNR | BUDAT | BKTXT |
---|---|---|---|---|---|
1000 | 9100000000 | 1995 | 1900000031 | 19950128 | Miete Lager |
1000 | 9100000004 | 1996 | |||
3000 | 9100000000 | 2003 | |||
1000 | 9100000000 | 2004 | 1900006961 | 20040315 | Haftpflichtversicherung |
1000 | 9100000000 | 2004 | 1900009135 | 20040415 | Haftpflichtversicherung |
3000 | 9100000001 | 2012 | 1900005300 | 20121130 | |
2222 | 9100000000 | 2014 | 1900000013 | 20140101 | |
2222 | 9100000000 | 2014 | 1900000014 | 20140201 |
Das Ergebnis zeigt abschließend, dass auch die Buchungstexte (Spalte BKTXT) deutliches Optimierungspotenzial hinsichtlich der Vollständigkeit und Nachvollziehbarkeit haben.
Auswertung von Dauerbuchungen mit der SE16N und SQVI in SAP
Nachdem wir einen Blick auf die recht unkomplizierte Auswertung per SQL geworfen haben, nutzen wir jetzt die Transaktion „SE16N“ für eine weitere Möglichkeit der Auswertung. Das Feld „BSTAT“ (Belegstatus) wird auf die Dauerbuchungen eingegrenzt (D = Dauerbuchungen). Das Pendant zum ersten SQL Query sieht dann in der „SE16N“ Maske folgendermaßen aus:
Entsprechend zeigt das Ergebnis (F8) die komplette Liste der vorhandenen Vorlagen für Dauerbuchungen:
Um jetzt zu prüfen, ob die Vorlagen auch verwendet wurden, wird die Tabelle „BKDF“ benötigt. Dafür selektieren wir in der Maske der „SE16N“ die nachfolgenden Felder:
Im Ergebnis (F8) zeigen sich dann alle Vorlagen für Dauerbuchungen und die Anzahl der Nutzungen (Feld DBZHL – Anzahl):
Soweit so gut. Versucht man jetzt den Tabellen Join der „BKPF“ auf die „BKDF“ in SAP mit der Transaktion „SQVI“ (Quickviewer) durchzuführen, fällt schnell auf, dass auch die „Left outer join“ Funktion nur in eine Richtung funktioniert. Aus unerklärlichen Gründen „joined“ SAP im Standard allerdings die „BKPF“ auf die „BKDF“ und nicht wie gewollt die „BKDF“ auf „BKPF“. Aus diesem Grund ist eine Analyse auf diesem Wege nicht möglich und ich schien auf dem Holzweg zu sein. Stattdessen bin ich einem Hinweis eines treuen Lesers aus den Kommentaren nachgegangen und beschreibe die Alternative mit einem InfoSet Query im Folgenden. Kennen Sie weitere Möglichkeiten? – Dann lassen Sie es uns in den Kommentaren wissen.
Dauerbuchungen mit einem InfoSet Query in SAP analysieren
Um eine Auswertung mit einem InfoSet in SAP vorzunehmen müssen wir zunächst eines anlegen. Das geschieht in SAP über die Transaktion „SQ02“ (InfoSet: Einstieg). Im oberen Bereich der Maske vergeben wir dann einen Namen für das InfoSet, wie z.B. „Dauerbuchungen“ und legen es schließlich mit einem Klick auf „Anlegen“ an. Daraufhin öffnet sich ein Fenster, das nach einer Bezeichnung und der Datenquelle fragt. Wählen Sie eine prägnante Bezeichnung und wählen „Tabellen-Join über Tabelle“ unter Angabe der „BKDF“ als Datenquelle aus:
Daraufhin öffnet sich eine Ansicht, die lediglich die Tabelle „BKDF“ mit ihren Feldern darstellt. Über einen Klick auf „Tabelle einfügen“, bzw. „Umschalt + F1“ fügen wir anschließend die „BKPF“ ein:
Im Standard verknüpft SAP die beiden Tabellen „BKDF“ und „BKPF“ über den sogenannten Primärschlüssel. Da wir allerdings den Link der Belegnummer aus der „BKDF“ auf die Belegnummer der Dauerbuchung benötigen, müssen wir den bestehenden Link zunächst löschen:
Nachdem wir den Link gelöscht haben, verbinden wir die Belegnummer (BELNR) der Tabelle „BKDF“ mit der Belegnummer der Dauerbuchung (DBBLG) der Tabelle „BKPF“ indem wir den linken Mauszeiger auf der „BELNR“ der „BKDF“ gedrückt halten und zum Feld „DBBLG“ der „BKPF“ ziehen. Anschließend ändern wir noch den „inner join“ auf einen „left outer join“ entsprechend der Abbildung:
Bevor wir schlussendlich das InfoSet generieren, lassen wir SAP die Verknüpfungsbedingungen nochmal prüfen. Das kann über den gleichnamigen Button, oder die Taste „F8“ geschehen:
In dem nachfolgenden Dialog wählen wir die Option „Keyfelder aufnehmen“. Die Datenfelder erweitern wir im darauffolgenden Schritt noch um das Belegdatum und den Belegkopftext. Dafür selektieren wir im mittleren Bereich der Maske zunächst die Feldgruppe „02 Belegkopf für Buchhaltung“ und wählen anschließend die Felder „Belegdatum im Beleg“ und „Belegkopftext“ aus der linken Spalte aus und nehmen diese mit in die Feldgruppe, wie dargestellt auf:
Mit dem Schritt ist die Erstellung des InfoSets soweit abgeschlossen. Jetzt müssen wir dieses nur noch mit einem Klick auf den rot weißen Button oder „Umsch + F6“ generieren und mit einem Klick auf „Lokales Objekt“ speichern. Um das InfoSet entsprechend verwenden zu können, müssen wir dieses noch einer Benutzergruppe zuordnen. Dafür verlassen wir die aktuelle Maske über den grünen Globus mit dem Pfeil zurück:
In der Übersicht „InfoSet: Einstieg“ wählen wir dann den Button „Zuordnung zu Rollen / Benutzergruppen“. Sollten Sie sich nicht sicher sein, welcher Benutzergruppe Sie das InfoSet zuordnen sollen, kontaktieren Sie den zuständigen SAP Administrator, oder legen ggf. mit diesem Vorgehen eine neue Gruppe an.
In dem vorliegen Fall verwende ich die Benutzergruppe mit der Bezeichnung „Test für generierte InfoSets“:
Anschließend können wir die Transkation „SQ02“ komplett über den roten Globus mit dem Kreuz verlassen.
Die Nachfrage, ob Sie die Zuordnung vor dem Verlassen speichern wollen, bestätigen Sie mit „Ja“. Auf dem Startbildschirm von SAP müssen wir dann in die Transaktion „SQ01“, um das InfoSet auch auszuführen. Mit einem Klick auf „InfoSet Query“ können wir dann das zuvor angelegte InfoSet aus der jeweiligen Benutzergruppe auswählen:
In der nachfolgenden Maske müssen wir dann nur noch die Ausgabe für die Ergebnisse entsprechend der Abbildung definieren:
Was lange währt wird endlich gut und so nutzen wir zum Abschluss die Taste „F8“ oder einen Klick auf „Ausgabe“, um das folgende Ergebnis zu produzieren:
Zusammenfassend zeigt sich, dass eine regelmäßige Prüfung der Dauerbuchungen im internen Kontrollsystem verankert werden sollte. Folgende Punkte helfen dabei, Fehler zu vermeiden:
- Begrenzen Sie Dauerbuchungsbelege von der Laufzeit
- Nutzen Sie nachvollziehbare Buchungstexte in der Vorlage und der generierten Belege
- Prüfen Sie regelmäßig, welche Vorlagen es gibt und wie sie genutzt werden.