Das Geheimnis der vergessenen Vorsteuer

Wer zu faul zum Ziehen der Vorsteuer ist, der lässt sein Geld beim Fiskus liegen. Wer macht denn sowas – könnte man sich fragen? Leider passiert das aber immer wieder. Denn manchmal ist das Zurückholen der Vorsteuer eben kompliziert. Insbesondere, wenn es bei einem ausländischen Finanzamt liegt. In diesem Beitrag zeige ich, wie vergessene Vorsteuer in SAP aufzuspüren ist.

Wo bliebt die Vorsteuer liegen?

Die meisten Unternehmen sind berechtigt, sich die Vorsteuer vom Finanzamt erstatten zu lassen (Vorsteuerabzugsberechtigung). Normalerweise ist das auch nicht schwer und es gibt hierfür normale Prozesse zur Abwicklung. Problematisch kann es bei Rechnungen mit Auslandsbezug werden. Viele Leistungen mit Auslandsbezug zwischen Unternehmen werden von vornherein ohne Umsatzsteuer abgerechnet (steuerfrei gestellt), so z.B. im Rahmen von innergemeinschaftlichen Lieferungen oder durch die Umkehrung der Steuerschuldnerschaft (Reverse Charge). In diesem Fällen gibt es im Ergebnis keine Vorsteuer zu ziehen und die Sache ist entsprechend einfach.

Aber es gibt auch Fälle, in denen ausländische Umsatzsteuer auf der Rechnung vorkommt. Das Problem ist, dass der inländische Fiskus (mit dem man sich gut auskennt) ausländische Vorsteuer eben nicht erstattet. Man muss sich dann an das ausländische Finanzamt wenden. Und damit kennt man sich ggfs. nicht gut aus, wenn es sich nur um seltene oder sporadische Fälle handelt.

Ein Beispiel: Ein Mitarbeiter eines deutschen Unternehmens unternimmt eine mehrtägige Dienstreise in Norwegen. Auf der Hotelrechnung wird norwegische Umsatzsteuer ausgewiesen und auch bezahlt. Das deutsche Unternehmen hat aber ansonsten keine Umsätze in Norwegen und deshalb auch keinerlei Beziehung zum norwegischen Fiskus.

Natürlich kann das deutsche Unternehmen die Vorsteuer vom norwegischen Finanzamt zurückerhalten. Das Problem ist der weg dorthin. Das deutsche Unternehmen muss dazu das Vorsteuervergütungsverfahren mit Norwegen bestreiten. Da dies prozessual kompliziert erscheint, wird die Hotelrechnung einfach brutto in den Aufwand gebucht und die Vorsteuer somit ignoriert.

Wenn man das allzu häufig macht, ggfs. auch noch in verschiedenen Ländern, könnten einige Summen zusammenkommen.

Vergessene Vorsteuer aufspüren

Sie stellen sich als Revisor oder Mitarbeiter im Rechnungswesen die Frage, ob und wie häufig das auch bei Ihnen vorkommt? Oder auch bei welchen Aufwendungen das der Fall sein könnte? Dann lassen Sie uns einen Ansatz entwickeln, wie man das in der SAP Datenbank mit Hilfe von SQL herausbekommen könnte.

Wie könnte man Bedingungen für eine relativ einfache Abfrage formulieren? Hier mein Vorschlag. Relevant für die Fragestellung sind Belege, die:

  • Im Haben nur kreditorisch gebucht wurden (also Rechnungen)
  • Im Soll nur auf ein einziges Konto in der GuV gebucht wurden (Fälle mit mehreren GuV-Konten in einer Buchung werden also vernachlässigt)

Wenn man den Buchungsstoff derart abgrenzt, dann kann man im Anschluss untersuchen, ob es GuV-Konten gibt, bei denen es Buchungen sowohl mit Steuerzeile gibt und andere Buchungen ohne Steuerzeile. Dies sind dann Aufwandskonten, die „verdächtig“ sind im Sinne der „vergessenen“ Vorsteuer. Dabei ist die Prämisse, dass sich hinter einem Aufwandskonto Leistungen verbergen, die entweder immer mit Steuer oder immer ohne Steuer sind. Mischfälle sind deshalb verdächtig.

So viel zur Vorgeschichte. Jetzt ist allerdings Vorsicht geboten, denn selbst für die eingefleischten Analytiker unter Ihnen wird es jetzt gruselig. Wir verzichten an dieser Stelle auf eine ausführliche Erklärung, da wir sonst den Rahmen des Artikels sprengen.

Also, los, hier kommt ein SQL Query, welches alle relevanten Belege ermittelt. Sie können dies selbst ausprobieren, indem Sie in SAP die Transaktion „DBACOCKPIT“ aufrufen und über die „Diagnose“ zum „SQL-Editor“ navigieren.

SELECT BSEG.MANDT, BSEG.BUKRS, BSEG.GJAHR, BSEG.BELNR, COUNT(DISTINCT CASE WHEN BSEG.SHKZG = 'S' AND BSEG.XBILK = '' THEN BSEG.HKONT ELSE null END) EXPENSE_ACCOUNTS, STRING_AGG(CASE WHEN BSEG.SHKZG = 'S' AND BSEG.XBILK = '' THEN SKAT.TXT50 ELSE null END, ',') EXPENSE_ACCOUNT_TXT, STRING_AGG(CASE WHEN BSEG.SHKZG = 'S' AND BSEG.XBILK = '' THEN HKONT ELSE null END, ',') EXPENSE_ACCOUNT, COUNT(DISTINCT CASE WHEN BSEG.SHKZG = 'S' AND BSEG.MWART != '' THEN 1 ELSE null END) WITH_INPUT_TAX
FROM BSEG
LEFT JOIN T001 ON (
T001.MANDT = BSEG.MANDT AND T001.BUKRS = BSEG.BUKRS)
LEFT JOIN SKAT ON (SKAT.MANDT = BSEG.MANDT AND SKAT.KTOPL = T001.KTOPL AND SKAT.SAKNR = BSEG.HKONT AND SKAT.SPRAS = 'D')
WHERE BSEG.MANDT = '800' AND BSEG.BUKRS = '1000' AND BSEG.GJAHR = 1997 AND NOT EXISTS (
SELECT B1.BUZEI
FROM BSEG B1
WHERE B1.MANDT = BSEG.MANDT AND B1.BUKRS = BSEG.BUKRS AND B1.GJAHR = BSEG.GJAHR AND B1.BELNR = BSEG.BELNR AND B1.SHKZG = 'H' AND KOART != 'K') AND NOT EXISTS (
SELECT B1.BUZEI
FROM BSEG B1
WHERE B1.MANDT = BSEG.MANDT AND B1.BUKRS = BSEG.BUKRS AND B1.GJAHR = BSEG.GJAHR AND B1.BELNR = BSEG.BELNR AND B1.SHKZG = 'S' AND B1.XBILK = 'X' AND B1.MWART = '')
GROUP BY BSEG.MANDT, BSEG.BUKRS, BSEG.GJAHR, BSEG.BELNR HAVING COUNT(DISTINCT CASE WHEN BSEG.SHKZG = 'S' AND BSEG.XBILK = '' THEN BSEG.HKONT ELSE null END) = 1 ORDER BY EXPENSE_ACCOUNT

Ein Ausschnitt aus meinem Testdatensatz ergibt folgendes Ergebnis:

BELNREXPENSE_
ACCOUNT_TXT
EXPENSE_
ACCOUNT
WITH_
INPUT_TAX
1900002270Ersatzteile4040001
1900002264Ersatzteile4040000
1900003236Verbrauch: Verpackungs-
material
4050001
1900002351Verbrauch: Verpackungs-
material
4050001
1900002249Verbrauch: Handelsware4100001
1900002182Verbrauch: Handelsware4100001
1900002273Verbrauch: Handelsware4100001

Hier sieht man einzelne Belege, die jeweils auf drei verschiedene GuV-Konten gebucht haben (Ersatzteile, Verbrauch: Verpackungsmaterial, Verbrauch: Handelsware).

In der Spalte „WITH_INPUT_TAX“ sieht man, dass die erste Buchung mit Steuerzeile gebucht wurde, die zweite aber nicht, obwohl es sich um dasselbe GuV-Konto handelt. Dies ist ein Verstoß gegen unsere Erwartung und deshalb verdächtig. Das sollte man sich also mal genauer ansehen!

Oben ist nur ein Ausschnitt gezeigt. Natürlich kommen Unmengen mehr an Belegen aus dem Query heraus. Deshalb verdichten wir jetzt auf alle verwendeten GuV-Konten und lassen uns dann nur die GuV-Konten ausgeben, auf denen solche Mischfälle vorkommen (einige mit Steuerzeile und einige ohne Steuerzeile):

SELECT EXPENSE_ACCOUNT, EXPENSE_ACCOUNT_TXT, COUNT(DISTINCT WITH_INPUT_TAX)
FROM (
SELECT BSEG.MANDT, BSEG.BUKRS, BSEG.GJAHR, BSEG.BELNR, COUNT(DISTINCT CASE WHEN BSEG.SHKZG = 'S' AND BSEG.XBILK = '' THEN BSEG.HKONT ELSE null END) EXPENSE_ACCOUNTS, STRING_AGG(CASE WHEN BSEG.SHKZG = 'S' AND BSEG.XBILK = '' THEN SKAT.TXT50 ELSE null END, ',') EXPENSE_ACCOUNT_TXT, STRING_AGG(CASE WHEN BSEG.SHKZG = 'S' AND BSEG.XBILK = '' THEN HKONT ELSE null END, ',') EXPENSE_ACCOUNT, COUNT(DISTINCT CASE WHEN BSEG.SHKZG = 'S' AND BSEG.MWART != '' THEN 1 ELSE null END) WITH_INPUT_TAX
FROM BSEG
LEFT JOIN T001 ON (
T001.MANDT = BSEG.MANDT AND T001.BUKRS = BSEG.BUKRS) LEFT JOIN SKAT ON (
SKAT.MANDT = BSEG.MANDT AND SKAT.KTOPL = T001.KTOPL AND SKAT.SAKNR = BSEG.HKONT AND SKAT.SPRAS = 'D')
WHERE BSEG.MANDT = '800' AND BSEG.BUKRS = '1000' AND BSEG.GJAHR = 1997 AND NOT EXISTS (
SELECT B1.BUZEI FROM BSEG B1 WHERE B1.MANDT = BSEG.MANDT AND B1.BUKRS = BSEG.BUKRS AND B1.GJAHR = BSEG.GJAHR AND B1.BELNR = BSEG.BELNR AND B1.SHKZG = 'H' AND KOART != 'K') AND NOT EXISTS (
SELECT B1.BUZEI
FROM BSEG B1
WHERE B1.MANDT = BSEG.MANDT AND B1.BUKRS = BSEG.BUKRS AND B1.GJAHR = BSEG.GJAHR AND B1.BELNR = BSEG.BELNR AND B1.SHKZG = 'S' AND B1.XBILK = 'X' AND B1.MWART = '') GROUP BY BSEG.MANDT, BSEG.BUKRS, BSEG.GJAHR, BSEG.BELNR
HAVING COUNT(DISTINCT CASE WHEN BSEG.SHKZG = 'S' AND BSEG.XBILK = '' THEN BSEG.HKONT ELSE null END) = 1
ORDER BY EXPENSE_ACCOUNT)
GROUP BY EXPENSE_ACCOUNT, EXPENSE_ACCOUNT_TXT
HAVING COUNT(DISTINCT WITH_INPUT_TAX)>1

Das Query ermittelt im Testdatensatz folgendes Ergebnis:

EXPENSE_
ACCOUNT
EXPENSE_
ACCOUNT_TXT
COUNT(DISTINCT WITH_INPUT_TAX)
404000Ersatzteile2

Das Ergebnis ist folgelogisch, da das GuV-Konto „Ersatzteile“ ja schon oben als Verdachtsfall identifiziert wurde. Weitere verdächtige GuV-Konten wurden demnach nicht gefunden.

Fazit

Sicherlich ist es nicht leicht, alle Fälle von „vergessener“ Vorsteuer aufzuspüren. Und der vorgestellte Ansatz findet auch nicht alle Fälle. Aber im Anbetracht der relativ einfachen Logik ist er schon mal ein erster Ansatzpunkt.

Artikel teilen

Facebook
Twitter
XING
LinkedIn