Prozessübergreifend

So entdecken Sie dubiose Buchungsstrukturen in SAP

9 min. Lesezeit
Bild von Prof. Dr. Nick Gehrke

Verfasst von

Prof. Dr. Nick Gehrke

Double exposure of businessman working with new modern computer show social network structure and bokeh exposure

In dem heutigen Blog Beitrag sind wir innerhalb der Finanzbuchhaltung von SAP auf der Suche nach "dubiosen" Buchungsstrukturen. Ich zeige Ihnen, wie man Buchungsstrukturen in SAP schnell ausfindig machen kann und bei welchen man vielleicht etwas genauer hinsehen sollte, weil sie nicht den üblichen Erwartungen entsprechen!

 

Was ist eine "dubiose" Buchungsstruktur?

Okay, ich gebe zu, das Wort „dubios“ ist etwas salopp und zunächst auch ein wenig unscharf, um damit anständig arbeiten zu können. Deshalb erkläre ich Ihnen zunächst die Herangehensweise.

Seit Luca Pacioli ist der Menschheit bekannt, dass eine Buchung in der Finanzbuchhaltung aus Buchungszeilen auf Konten (z.B. im Soll) und Gegenkonten (z.B. im Haben) besteht, wobei die gebuchten Beträge im Soll und im Haben sich immer entsprechen müssen. Aus Sicht der Revision ist dies wohl einer der ersten und vielleicht die wichtigste interne Kontrolle im Bereich des Rechnungswesens.

In aller Regel ist der Revisor mit der Buchhaltung soweit vertraut, dass er sich stets vorstellen kann, was übliche Gegenkonten sind, wenn er ein bestimmtes Finanzbuchhaltungskonto betrachtet für das er sich gerade besonders interessiert. Das heißt für jedes Konto gibt es typische Gegenkonten. Wenn auf ein untypisches Gegenkonto gebucht wurde, dann nennen wir das nachfolgend "dubios" und soll uns als Anlass dienen tiefer zu bohren.

Es geht hier also letztendlich um eine Gegenkontoanalyse.

 

Zuerst eine Erwartungshaltung bilden

Wir verdeutlichen die Bildung einer Erwartungshaltung zunächst an zwei konkreten Beispielen.

In unserem Testdatensatz gibt es zwei Konten für die wir uns besonders interessieren:

  • 0000800000 Umsatzerlöse
  • 0000113100 Deutsche Bank

Bei den Umsatzerlösen wird maßgeblich ins Haben gebucht, denn dabei handelt es sich um Erlöse. Als Gegenkonten im Soll müssten wir natürlich Forderungen erwarten, wobei uns vielleicht noch Erlösschmälerungen in die Quere kommen. Gegenkonten mit anderem Charakter würden wir zunächst nicht erwarten.

Bei der Deutschen Bank wollen wir Auszahlungen betrachten, d.h. uns interessieren Buchungen im Haben. Gegenkonten im Soll, die wir erwarten würden, wären demnach z.B. Verbindlichkeiten, vielleicht noch gezahlte Steuern und Umbuchungen von anderen Bankkonten.

 

Umsatzerlöse untersuchen

Jetzt geht es los!

Nachdem wir uns zwei Konten ausgesucht haben, wollen wir herausfinden, was die Gegenkonten im Soll für die Umsatzerlöse auf Konto "0000800000" sind. Dafür dient nachfolgendes SQL Query. Um das Query ausführen zu können, nutzen Sie in SAP die Transaktion "DBACOCKPIT" und navigieren im linken Verzeichnis zu "Diagnose - SQL-Editor" (auf einer HANA DB getestet):

 

1 SELECT CONTRA.HKONT ACCOUNT, SKAT.TXT50 ACCOUNT_NAME, CONTRA.SHKZG DEBIT_OR_CREDIT, COUNT(DISTINCT CONTRA.BELNR) NUMBER_OF_DOCUMENTS FROM BSEG

Die Nummer und Bezeichnung des Gegenkontos, Soll oder Haben Kennzeichen (SHKZG) und die Anzahl der Belege in denen das Gegenkonto vorkommt

JOIN BKPF ON (BSEG.MANDT=BKPF.MANDT AND BSEG.BUKRS=BKPF.BUKRS AND BSEG.GJAHR=BKPF.GJAHR AND BSEG.BELNR=BKPF.BELNR)

Join auf den Belegkopf

JOIN BSEG CONTRA ON (BSEG.MANDT=CONTRA.MANDT AND BSEG.BUKRS=CONTRA.BUKRS AND BSEG.GJAHR=CONTRA.GJAHR AND BSEG.BELNR=CONTRA.BELNR AND BSEG.SHKZG!=CONTRA.SHKZG)

Join auf die Belegzeilen, die sich gegenüberstehen

Wenn Umsatzerlöse im Haben betrachtet werden, dann werden die Gegenpositionen im Soll betrachtet. "!= bedeutet ungleich"

LEFT JOIN T001 ON (T001.MANDT=CONTRA.MANDT AND T001.BUKRS=CONTRA.BUKRS)

Join auf die Kontenbezeichungen, um die Namen der Gegenkonten zu erhalten

LEFT JOIN SKAT ON (T001.MANDT=SKAT.MANDT AND T001.KTOPL=SKAT.KTOPL AND SKAT.SAKNR=CONTRA.HKONT AND SKAT.SPRAS='E')
WHERE BSEG.HKONT='0000800000' AND BSEG.SHKZG='H' AND BKPF.STBLG = '' AND BSEG.GJAHR=1997 AND BSEG.BUKRS='1000'

Das Konto von Interesse: Umsatzerlöse gebucht im Haben; Nur Belege betrachten, die nicht storniert sind; Buchungskreis und Geschäftsjahr der Wahl einschränken

GROUP BY CONTRA.HKONT, CONTRA.HKONT, CONTRA.SHKZG, SKAT.TXT50;

Aggregation der Konten

(Weiter unten können Sie die Query aus der Analyse des Deutsche Bank Kontos einfach kopieren)

Wenn Sie das bei sich ausprobieren wollen, dann müssen Sie natürlich Ihr Finanzbuchhaltungskonto und Ihre Buchungsseite (S=Soll bzw. H=Haben) entsprechend in der "WHERE" Bedingung einsetzen:

WHERE BSEG.HKONT='0000113100' AND BSEG.SHKZG='H'

 

Zusätzlich müssen sowohl Ihr Buchungskreis, als auch das zu betrachtende Geschäftsjahr angepasst werden:

BSEG.GJAHR=1997 AND BSEG.BUKRS='1000'

 

In unserem Testdatensatz kommen folgende Gegenkonten für die Umsatzerlöse heraus:

 

ACCOUNT

ACCOUNT_NAME

DEBIT_OR_CREDIT

NUMBER_OF_DOCUMENTS

889000

Other sales deductions

S

1

230051

Gain/loss Euro conversion / document difference

S

133

140000

Trade Receivables - domestic

S

273

888000

Sales deductions - domestic

S

3

 

Bei der Durchsicht der Ergebnisse entdecken wir die zuvor zu erwartenden Forderungen und Erlösschmälerungen. Außerdem finden wir noch ein paar Währungsgewinne bzw. Verluste, die wir bei unserer Erwartungsbildung nicht dabei hatten, aber nicht überraschend sind. Das Ganze scheint demnach nicht wirklich auffällig, weshalb wir die Analyse dieses Kontos nicht weiter vertiefen wollen.

 

Untersuchung des Bankkontos

Nachdem wir bei den Umsatzerlösen keine Auffälligkeiten feststellen konnten, werfen wir jetzt einen Blick auf die Auszahlungen hinsichtlich der Deutschen Bank. Dafür können wir das gleiche SQL Query verwenden und tauschen in der WHERE Bedingung lediglich das Konto der Umsatzerlöse "0000800000" gegen das Konto der Deutschen Bank "0000113100 " aus (auf einer HANA DB getestet):

 

2 SELECT CONTRA.HKONT ACCOUNT ,SKAT.TXT50 ACCOUNT_NAME, CONTRA.SHKZG DEBIT_OR_CREDIT,COUNT(DISTINCT CONTRA.BELNR) NUMBER_OF_DOCUMENTS FROM BSEG
JOIN BKPF ON (BSEG.MANDT=BKPF.MANDT AND BSEG.BUKRS=BKPF.BUKRS AND BSEG.GJAHR=BKPF.GJAHR AND BSEG.BELNR=BKPF.BELNR)
JOIN BSEG CONTRA ON (BSEG.MANDT=CONTRA.MANDT AND BSEG.BUKRS=CONTRA.BUKRS AND BSEG.GJAHR=CONTRA.GJAHR AND BSEG.BELNR=CONTRA.BELNR AND BSEG.SHKZG!=CONTRA.SHKZG )
LEFT JOIN T001 ON (T001.MANDT=CONTRA.MANDT AND T001.BUKRS=CONTRA.BUKRS)
LEFT JOIN SKAT ON (T001.MANDT=SKAT.MANDT AND T001.KTOPL=SKAT.KTOPL AND SKAT.SAKNR=CONTRA.HKONT AND SKAT.SPRAS='E')
WHERE BSEG.HKONT='0000113100' AND BSEG.SHKZG='H' AND BKPF.STBLG IS NULL AND BSEG.GJAHR=1997 AND BSEG.BUKRS='1000'
GROUP BY CONTRA.HKONT,CONTRA.HKONT,CONTRA.SHKZG,SKAT.TXT50;

 

Nach dem Ausführen des Queries zeigt sich in unserem Testdatensatz folgendes Ergebnis:

 

ACCOUNT

ACCOUNT_NAME

DEBIT_OR_CREDIT

NUMBER_OF_DOCUMENTS

113102

Deutsche Bank - domestic bank tranfers

S

1

154000

Input tax

S

13

400010

Raw materials consumed

S

1

417000

Purchased services

S

13

230051

Gain/loss Euro conversion / document difference

S

3

400000

Consumption, raw material

S

6

410000

Usage: trading goods

S

1

113101

Deutsche Bank - checks payable

S

1

 

Auch hier sehen wir uns wieder Konten durch. Auffällig ist, dass wir überhaupt keine Verbindlichkeiten auf einem Gegenkonto finden können.

Seltsam!

Offenbar werden von diesem Bankkonto keine Lieferanten bezahlt. Die bezahlten Umsatzsteuern sind als Gegenkonto nicht überraschend. Dafür ist es aber sicherlich merkwürdig, dass die Aufwandskonten "Raw Material consumed" gebucht wurden und das direkt gegen Cash! Und offenbar wurden auch Dienstleistungen direkt gegen Bank gebucht ("Purchased services"). Normalerweise dürfte es für solche Dienstleistungen zunächst eine Verbindlichkeit geben, die anschließend bezahlt wird. Das war hier wohl nicht der Fall und ist dann auch noch in 13 verschiedenen Belegen aufgetreten. Das entspricht nicht wirklich unserer Erwartungshaltung und daher sollte im nächsten Schritt näher untersucht werden, welche einzelnen Belege dahinterstehen. Wir wollen das einmal exemplarisch für die betreffenden Belege bzgl. des Gegenkontos "Purchased services" machen.

Und so einfach geht’s:

 

3 SELECT DISTINCT BSEG.BELNR FROM BSEG

Doppelte Belegnummern werden unterdrückt

JOIN BKPF ON (BSEG.MANDT=BKPF.MANDT AND BSEG.BUKRS=BKPF.BUKRS AND BSEG.GJAHR=BKPF.GJAHR AND BSEG.BELNR=BKPF.BELNR)

Join auf den Belegkopf

WHERE BSEG.SHKZG='H' AND BSEG.HKONT='0000113100' AND EXISTS

Konto von Interesse war Deutsche Bank im Haben (also lediglich die Zahlungsausgänge)

(SELECT * FROM BSEG CONTRA WHERE BSEG.MANDT=CONTRA.MANDT AND BSEG.BUKRS=CONTRA.BUKRS AND BSEG.GJAHR=CONTRA.GJAHR AND BSEG.BELNR=CONTRA.BELNR AND BSEG.SHKZG!=CONTRA.SHKZG AND CONTRA.HKONT='0000417000')

Von Interesse sind aber nur die Belege wo auch das Gegenkonto '0000417000' = 'Purchased services' angesprochen wurde

AND BKPF.STBLG = '';

Und stornierte Belege sollen aus der Analyse ausgeschlossen werden

 

Wenn man das Query ausführt, dann kommt man zu den betreffenden Belegnummern, z.B.:

 

BELNR

100007425

100007426

100007427

100007428

100007605

100007606

100007607

100007608

100007609

100007342

100007343

100007610

100007424

 

Diese Belege sollte man sich doch nun einmal exemplarisch genauer ansehen, um dieser "dubiosen" Buchungsstruktur auf die Schliche zu kommen.

Und jetzt?

Datenanalysen sind mächtig. Wohl dem, der die richtige Analyse durchführen kann, wenn er sie gerade braucht und in der Lage ist, die Daten entsprechend zu hinterfragen!

SQL ist nicht jedermanns Sache und Kollegen in der Revision, die sowohl fit in kaufmännischen Fragestellungen als auch in Data Science sind sucht man in aller Regel heute noch vergeblich.

Daher unser Angebot: Testen Sie zapliance und überlassen die Data Science Aufgaben komplett der Software. Für kleine Buchungskreise sogar komplett kostenfrei. Inklusive der mehr als 135 automatisierten Prüfungsfragen / Datenindikatoren, dem integriertem Process Mining und ohne funktionale Einschränkungen. So ist mit Sicherheit die eine oder andere Datenanalyse für Sie dabei. Vereinbaren Sie ganz unverbindlich einen kostenlosen Termin und wir zeigen Ihnen die fortschrittliche Audit und Datenanalyse-Software in einem Schnelldurchgang:

 

Termin vereinbaren