OSS-Steuerzonen in JTL-Wawi per SQL einrichten

OSS-Steuerzonen in JTL-Wawi manuell anzulegen kostet Stunden. Mit einem gezielten SQL-Script erledigt man alle 27 EU-Länder in einem Rutsch — sauber, nachvollziehbar und ohne Klickarbeit.

March 2026 8 Min. Lesezeit Feinwerk Software

Das Problem

Wer in JTL-Wawi das OSS-Verfahren (One-Stop-Shop) korrekt abbilden möchte, steht vor einer bekannten Herausforderung: JTL liefert keine fertige OSS-Vorkonfiguration. Die bestehende Zone-EU muss in 27 einzelne Länderzonen aufgeteilt werden — jede mit eigenem Steuersatz, eigenem Steuerschlüssel und eigenem Buchungskonto für den DATEV-Export.

Das händische Anlegen über die JTL-Oberfläche ist möglich, aber zeitaufwändig. Pro Land sind mindestens diese Schritte nötig:

  • Steuerzone anlegen
  • Land zuweisen
  • Land aus Zone-EU entfernen
  • Steuersätze für Standard, Ermäßigt und Stark ermäßigt hinterlegen
  • Steuerschlüssel mit Buchungskonto verknüpfen
  • Versandarten pro Steuersatz zuweisen
  • OSS-Verfahren auf „Firmensitz” setzen

Mal 27 Länder ergibt das mehrere Stunden Klickarbeit — mit entsprechendem Fehlerpotenzial.

Die Voraussetzungen

Bevor das Script ausgeführt werden kann, müssen in JTL-Wawi einige Vorarbeiten erledigt sein.

Steuerschlüssel anlegen: Für jedes OSS-Land wird ein eigener Steuerschlüssel mit dem vom Steuerberater vorgegebenen Buchungskonto benötigt. Der Weg dazu ist Admin → Steuern → Steuerschlüssel. In unserem Fall wurden die Schlüssel nach folgendem Schema benannt:

Steuerschlüssel Buchungskonto
OSS BE 4000
OSS BG 4001
OSS DK 4002
OSS CY 4026

Die konkreten Kontonummern werden vom Steuerberater vorgegeben — sie hängen vom verwendeten DATEV-Kontenrahmen (SKR03 oder SKR04) und der gewünschten Granularität der Buchung ab.

Wichtig: Bei den Steuerschlüsseln darf die Checkbox „Automatikkonto” nicht aktiviert sein — sonst wird der Schlüssel beim DATEV-Export nicht übermittelt.

Die Datenbankstruktur

Bevor wir das Script schreiben, lohnt ein kurzer Blick auf die relevanten Tabellen:

  • tSteuerzone — enthält die Steuerzonen. Relevant: kFirma, cName, cLandISO. Das Feld cLandISO bestimmt die Firmenzugehörigkeit — für alle deutschen Zonen muss hier DE stehen, nicht der ISO-Code des Lieferlandes.
  • tSteuerzoneLand — verknüpft Länder mit Zonen. Das eigentliche Lieferland wird hier über cISO hinterlegt.
  • tSteuersatz — enthält die Steuersätze pro Zone und Steuerklasse, inklusive der Steuerschlüssel-Verknüpfungen.
  • tSteuersatzschluessel — enthält die Zuordnung von Steuersätzen zu Versandarten und Warengruppen.

Eine wichtige Erkenntnis aus der Praxis: cLandISO in tSteuerzone hat nichts mit dem Lieferland zu tun — es steuert die Firmenzugehörigkeit. Wer hier den Länder-ISO-Code einträgt, bekommt für jedes Land eine separate Firma in der JTL-Oberfläche angezeigt.

Das Script

Das Script arbeitet in einer Transaktion und legt pro Land folgende Datensätze an:

  1. tSteuerzone — neue Zone mit kFirma = 1 und cLandISO = 'DE'
  2. tSteuerzoneLand — Verknüpfung des Lieferlandes
  3. tSteuersatz — drei Einträge für Standard-, Ermäßigt- und Stark-ermäßigt-Satz
  4. tSteuersatzschluessel — Versandarten-Zuordnung für alle drei Steuersätze, kopiert aus der bestehenden Zone-EU (kSteuersatz = 12)

Ein Ausschnitt für Belgien:

BEGIN TRANSACTION;

INSERT INTO tSteuerzone (kFirma, cName, cLandISO)
VALUES (1, 'Belgien BE', 'DE');
DECLARE @Z_BE INT = SCOPE_IDENTITY();

INSERT INTO tSteuerzoneLand (kSteuerzone, cISO, cKuerzelBundesland)
VALUES (@Z_BE, 'BE', '');

INSERT INTO tSteuersatz (kSteuerzone, kSteuerklasse, fSteuersatz,
                         kStSchl, kStSchlIGL, kStSchlUStIGL, kStSchlReverse)
VALUES (@Z_BE, 1, 21.0, 14, 14, 1, 1);
DECLARE @kSS_BE_Std INT = SCOPE_IDENTITY();

-- Versandarten aus Zone-EU als Vorlage kopieren
INSERT INTO tSteuersatzschluessel (kSteuersatz, kWarengruppe, kVersandart,
                                   nPositionstyp, kSteuerschluessel,
                                   kStSchlIGL, kStSchlUStIGL, kStSchlReverse)
SELECT @kSS_BE_Std, 0, kVersandart, 0, 14, 1, 1, 1
FROM tSteuersatzschluessel
WHERE kSteuersatz = 12 AND kWarengruppe = 0 AND nPositionstyp = 0;

-- COMMIT TRANSACTION;
-- ROLLBACK TRANSACTION;

Das vollständige Script umfasst alle 27 Länder und folgt exakt diesem Muster — lediglich Zonenname, ISO-Code, Steuersatz und Steuerschlüssel-ID variieren pro Land.

Steuersätze aller 27 Länder

Zur Referenz — die aktuellen Steuersätze (Stand März 2026) die im Script hinterlegt sind:

Land Kürzel Standard Ermäßigt Stark ermäßigt
Belgien BE 21% 6% 0%
Bulgarien BG 20% 9% 0%
Dänemark DK 25% 0% 0%
Estland EE 22% 9% 0%
Finnland FI 25,5% 14% 0%
Frankreich FR 20% 5,5% 2,1%
Griechenland GR 24% 13% 6%
Irland IE 23% 13,5% 4,8%
Italien IT 22% 10% 4%
Kroatien HR 25% 13% 5%
Lettland LV 21% 12% 0%
Litauen LT 21% 9% 0%
Luxemburg LU 17% 8% 3%
Malta MT 18% 7% 0%
Niederlande NL 21% 9% 0%
Österreich AT 20% 10% 13%
Polen PL 23% 8% 5%
Portugal PT 23% 13% 6%
Rumänien RO 19% 9% 5%
Schweden SE 25% 12% 6%
Slowakei SK 23% 10% 0%
Slowenien SI 22% 9,5% 5%
Spanien ES 21% 10% 4%
Tschechien CZ 21% 12% 0%
Ungarn HU 27% 18% 5%
Nordirland XI 20% 5% 0%
Zypern CY 19% 9% 0%

Hinweis: Steuersätze ändern sich gelegentlich. Vor der Ausführung des Scripts sollte der Steuerberater die Werte bestätigen.

Fallstricke aus der Praxis

Beim Entwickeln und Testen des Scripts sind einige Punkte aufgefallen, die es zu beachten gilt.

cLandISO in tSteuerzone ist nicht das Lieferland. Wer hier den ISO-Code des Lieferlandes einträgt, bekommt für jedes Land eine separate Firma in der JTL-Oberfläche. Der korrekte Wert für eine deutsche JTL-Installation ist DE.

Stark ermäßigter Satz: Vorlage aus Zone-EU verwenden. Die originale Zone-EU hat für den stark ermäßigten Satz (kSteuersatz = 14) nur wenige Versandart-Einträge — weil dort historisch kaum ermäßigte Waren konfiguriert wurden. Für die OSS-Zonen empfiehlt es sich, die Versandarten aus dem Standard-Satz (kSteuersatz = 12) als Vorlage zu verwenden, damit alle Versandarten vollständig gesetzt sind.

Belgien-Zone war bereits vorhanden. In unserem Fall existierte Zone ID 9 bereits als manuell angelegter Testdatensatz. Das Script löscht diese Zone am Anfang und legt sie neu an — damit ist der Ablauf für alle 27 Länder einheitlich.

Positionstypen bleiben offen. Das Script setzt bewusst keine Positionstypen (Mehrzweckgutschein, Versandposition, Coupon etc.) — diese Zuordnung hängt von der individuellen Konfiguration des Mandanten ab und sollte mit dem Steuerberater abgestimmt werden.

Vorgehen bei der Ausführung

Das Script sollte nie direkt mit COMMIT ausgeführt werden. Das empfohlene Vorgehen:

  1. Datenbankbackup erstellen
  2. Script mit ROLLBACK am Ende ausführen — prüfen ob Fehler auftreten
  3. Bei Erfolg ROLLBACK durch COMMIT ersetzen und erneut ausführen
  4. JTL-Wawi neu starten — der Cache muss neu aufgebaut werden
  5. Länder händisch aus Zone-EU herausnehmen
  6. OSS-Verfahren pro Zone auf „Firmensitz” setzen
  7. Positionstypen mit dem Steuerberater abstimmen und nachpflegen

Ergebnis

Nach der Ausführung des Scripts sind alle 27 OSS-Länderzonen vollständig in JTL-Wawi angelegt — mit korrekten Steuersätzen, Buchungskonten und Versandart-Zuordnungen. Der DATEV-Export kann anschließend sauber nach Lieferland differenziert werden.

Was manuell mehrere Stunden Klickarbeit gekostet hätte, erledigt das Script in Sekunden — reproduzierbar, dokumentiert und bei Bedarf einfach anpassbar.

Fazit: JTL-Wawi bietet keine native OSS-Vorkonfiguration — aber die Datenbankstruktur ist gut dokumentierbar und per SQL vollständig automatisierbar. Wer die Tabellen einmal verstanden hat, kann nicht nur OSS-Zonen anlegen, sondern beliebige Steuerszenarien effizient umsetzen. Der Schlüssel liegt im Verständnis von cLandISO als Firmenzugehörigkeit, nicht als Lieferland.

Haben Sie eine Idee, die Software braucht?

Erzählen Sie uns davon. Gemeinsam finden wir heraus, wie wir Ihre Anforderung in eine funktionierende Lösung übersetzen.