Wer aus der JTL-Wawi in die Schweiz, nach Großbritannien oder in die USA liefert, braucht auf der Rechnung meist mehr als Bezeichnung, Menge und Preis. Zolltarifnummer, Ursprungsland und Gewicht werden dann oft von Hand nachgetragen oder auf einem Extrablatt mitgeschickt. Das ist fehleranfällig und kostet bei jeder Sendung Zeit.
Einfacher geht es direkt in der Rechnungsvorlage. Die Zollangaben werden nur bei Empfängern außerhalb der EU an die Artikelbezeichnung angehängt. Innerhalb der EU sieht die Rechnung aus wie bisher. Dazu zeigen wir die passende EU/Drittland-Prüfung für Workflows.
Dieser Artikel beschreibt die technische Umsetzung in der JTL-Wawi. Welche Angaben eine Rechnung für eine bestimmte Ausfuhr tatsächlich braucht, hängt vom Zielland, der Ware und dem Versandweg ab. Das ist keine Rechtsberatung. Klären Sie Zoll- und Steuerfragen mit Ihrem Steuerberater, Ihrem Spediteur oder dem Zoll.
Was Sie brauchen
- Eine Kopie Ihrer Rechnungsvorlage (Druck-/E-Mail-/Exportvorlagen → Rechnung). Bearbeiten Sie nie direkt die Standardvorlage.
- Gepflegte Stammdaten: TARIC-Code, Ursprungsland und Artikelgewicht am Artikel.
- Optional ein eigenes Feld (freies Attribut) „Warenbezeichnung“, wenn Sie für den Zoll eine andere Bezeichnung als den Artikelnamen drucken möchten.
Was auf der Rechnung erscheint
| Angabe | Wird gedruckt, wenn … |
|---|---|
| TARIC-Code | Empfänger außerhalb der EU und Feld gefüllt |
| Ursprungsland | Empfänger außerhalb der EU und Feld gefüllt |
| Einzel- und Gesamtgewicht | Empfänger außerhalb der EU und Gewicht größer als 0 |
| Warenbezeichnung | Empfänger außerhalb der EU und eigenes Feld gefüllt |
Das Gesamtgewicht wird aus Einzelgewicht × Menge berechnet und auf zwei Nachkommastellen ausgegeben.
Schritt 1: Benutzervariable für das Gewicht anlegen
Das Einzelgewicht wird in dieser Vorlage über eine eigene Variable aus der Datenbank gelesen. Legen Sie im Rechnungslayout eine Benutzervariable @IndividualWeight an:
Fstr$(JTL_DirectQuery("SELECT fArtGewicht FROM dbo.tArtikel WHERE cArtNr = '"+InvoicePosition.SKU+"'"),"?&.##")
Die Abfrage liest das Feld fArtGewicht des Artikels mit der passenden Artikelnummer und formatiert es mit zwei Nachkommastellen.
Achtung: Die Artikelnummer wird in das SQL eingesetzt
Der Ausdruck baut den SQL-Befehl als Text zusammen. Die Artikelnummer steht dabei direkt zwischen zwei Hochkommas. Das ist unkritisch, solange Ihre Artikelnummern sauber sind und nur aus Ihren eigenen Stammdaten kommen. Enthält eine Artikelnummer aber ein Hochkomma (zum Beispiel 12'5-ZOLL), ist der SQL-Befehl ungültig. Die Abfrage liefert dann kein Gewicht, und die Gewichtszeile fehlt auf der Rechnung.
Artikelnummern werden häufig per Import oder vom Marktplatz übernommen. Prüfen Sie vor dem Einsatz, ob Hochkommas vorkommen:
SELECT cArtNr FROM dbo.tArtikel WHERE cArtNr LIKE '%''%';
Robuster wird der Ausdruck, wenn Sie Hochkommas vor dem Einsetzen verdoppeln – so bleibt der SQL-Befehl auch bei solchen Artikelnummern gültig:
Fstr$(JTL_DirectQuery("SELECT fArtGewicht FROM dbo.tArtikel WHERE cArtNr = '"+StrSubst$(InvoicePosition.SKU,"'","''")+"'"),"?&.##")
Testen Sie den Ausdruck in der Vorschau mit einer echten Rechnung, bevor Sie die Vorlage produktiv schalten.
Schritt 2: Die Artikelbezeichnung erweitern
Ersetzen Sie in der Positionstabelle den Ausdruck für die Artikelbezeichnung durch diesen:
InvoicePosition.Name+
cond(not Contains(",DE,AT,BE,BG,HR,CY,CZ,DK,EE,FI,FR,EL,GR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,RO,SK,SI,ES,SE,", ","+Report.InvoiceBillToAddress.CountryISO+","),
cond(IsNullOrEmpty(InvoicePosition.TARIC),"","¶Taric: "+InvoicePosition.TARIC)+
cond(IsNullOrEmpty(InvoicePosition.OriginCountry),"","¶Ursprungsland: "+InvoicePosition.OriginCountry)+
cond(@IndividualWeight="0,00" or IsNullOrEmpty(@IndividualWeight),
"",
"¶Gewicht: " + @IndividualWeight + " kg" +
" / Gesamtgewicht: " + LocNumber$(Val(@IndividualWeight) * Val(InvoicePosition.Quantity), "%.2f") + " kg"
)+
cond(IsNullOrEmpty(JTL_GetProductCustomField("Warenbezeichnung", InvoicePosition.ProductInternalId)),
"",
"¶Warenbezeichnung: " + JTL_GetProductCustomField("Warenbezeichnung", InvoicePosition.ProductInternalId)),
""
)
So funktioniert der Ausdruck:
- EU-Prüfung: Der ISO-Code des Landes wird mit Kommas umschlossen (
,CH,) und in einer Liste aller 27 EU-Länder gesucht. Die Kommas verhindern Teiltreffer. Griechenland steht sowohl alsELals auch alsGRin der Liste. - Leere Felder: Jede Zusatzzeile wird nur gedruckt, wenn das Feld gefüllt ist. Fehlende Daten erzeugen also keine halben Zeilen wie „Taric: “.
- Umbruch: Das Zeichen
¶(Alt+0182) erzeugt in List & Label einen Zeilenumbruch. Die Zollangaben stehen dadurch untereinander unter der Bezeichnung.
Der Ausdruck prüft die Rechnungsadresse (Report.InvoiceBillToAddress.CountryISO). Bei abweichender Lieferadresse – Rechnung an die deutsche Zentrale, Lieferung in die Schweiz – erscheinen die Zollangaben dann nicht. Wenn das bei Ihnen vorkommt, prüfen Sie im Variablenbaum Ihrer Vorlage, ob ein Ländercode der Lieferadresse zur Verfügung steht, und verwenden Sie diesen.
Schritt 3: Dieselbe Prüfung im Workflow
Oft soll nicht nur die Rechnung anders aussehen. Drittland-Aufträge sollen auch markiert, einem anderen Versandweg zugewiesen oder mit einem Hinweis an den Versand versehen werden. Dafür gibt es in den JTL-Workflows dieselbe Prüfung in Liquid:
{% assign euCountries = ",DE,AT,BE,BG,HR,CY,CZ,DK,EE,FI,FR,EL,GR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,RO,SK,SI,ES,SE," %}\
{% capture countryKey %},{{ Vorgang.Lieferung.Lieferadresse.LandISO }},{% endcapture %}\
{% if euCountries contains countryKey %}\
EU-Lieferung\
{% else %}\
Nicht-EU-Lieferung (Drittland)\
{% endif %}\
Wichtig sind zwei Details:
- Der Backslash am Zeilenende unterdrückt den Zeilenumbruch. Ohne ihn gibt der Workflow Leerzeilen aus, und ein Vergleich wie „ist gleich EU-Lieferung“ schlägt fehl.
- Der Pfad zur Adresse hängt vom Workflow-Objekt ab.
Vorgang.Lieferung.Lieferadresse.LandISOgilt für Workflows auf Ebene der Lieferung bzw. des Versands. Auf Auftragsebene verwenden SieVorgang.Lieferadresse.LandISOoder – wenn Sie bewusst wie die Rechnungsvorlage prüfen wollen –Vorgang.Rechnungsadresse.LandISO.
Im Workflow prüft das Snippet die Lieferadresse, die Rechnungsvorlage die Rechnungsadresse. Entscheiden Sie sich bewusst für eine Adresse und verwenden Sie sie in Vorlage und Workflow einheitlich. Sonst kann ein Auftrag im Workflow als Drittland gelten, während auf der Rechnung keine Zollangaben stehen.
Stolperfallen aus der Praxis
| Symptom | Ursache | Lösung |
|---|---|---|
| Keine Zollangaben, obwohl Lieferung ins Drittland | Rechnungsadresse liegt in der EU | Ländercode der Lieferadresse verwenden (Hinweis in Schritt 2) |
| Gewichtszeile fehlt bei einzelnen Artikeln | Hochkomma in der Artikelnummer bricht die SQL-Abfrage | Hochkomma verdoppeln (Schritt 1) |
| Gewichtszeile fehlt bei allen Artikeln | Artikelgewicht nicht gepflegt oder Variable @IndividualWeight nicht angelegt |
Stammdaten und Benutzervariable prüfen |
| Gesamtgewicht falsch oder 0 | Dezimaltrennzeichen passt nicht zur Formatierung | Ausgabe von @IndividualWeight in der Vorschau prüfen, Formatierung anpassen |
| Workflow-Bedingung greift nie | Leerzeilen in der Liquid-Ausgabe | Backslash am Ende jeder Zeile setzen |
| Leere Ausgabe im Workflow | Falscher Adresspfad für das Workflow-Objekt | Pfad passend zu Auftrag oder Lieferung wählen |
| Warenbezeichnung erscheint nie | Eigenes Feld fehlt oder heißt anders | Feld exakt „Warenbezeichnung“ anlegen und pflegen |
Stammdaten sind der eigentliche Hebel
Die Vorlage druckt nur, was am Artikel gepflegt ist. Ein fehlender TARIC-Code fällt auf der Rechnung nicht als Fehler auf – die Zeile bleibt einfach leer. Prüfen Sie deshalb vor dem Start, welche Artikel, die Sie ins Drittland verkaufen, noch ohne Zolltarifnummer, Ursprungsland oder Gewicht sind. Das lässt sich gut über eine Artikelsuche in der Wawi oder einen Ameise-Export erledigen.
Druckvorlagen, Workflows und Datenbankabfragen greifen in der JTL-Wawi eng ineinander. Wenn Sie die Drittland-Rechnung an Ihre Abläufe anpassen oder die Stammdaten dafür prüfen lassen möchten, unterstützt PC-Mixx Sie als JTL-Servicepartner dabei.
Häufige Fragen
Warum erscheinen TARIC und Ursprungsland bei EU-Kunden nicht?
Der Ausdruck prüft den Ländercode gegen eine Liste der EU-Länder. Nur wenn das Land nicht darin steht, werden die Zollangaben angehängt. Innerhalb der EU bleibt die Artikelbezeichnung unverändert.
Woher kommen TARIC-Code und Ursprungsland?
Aus den Artikelstammdaten der JTL-Wawi. In der Rechnungsvorlage stehen sie als InvoicePosition.TARIC und InvoicePosition.OriginCountry zur Verfügung. Ist ein Feld leer, wird die Zeile einfach weggelassen.
Ist die Abfrage per JTL_DirectQuery gefährlich?
Sie liest nur. Weil die Artikelnummer aber per Text in das SQL eingesetzt wird, bricht die Abfrage bei einem Hochkomma in der Artikelnummer. Besser ist es, über die interne Artikel-ID abzufragen oder das Hochkomma zu verdoppeln.
Ersetzt die Vorlage eine Zollberatung?
Nein. Die Vorlage druckt nur die Daten, die in Ihren Stammdaten stehen. Welche Angaben Ihre Sendungen tatsächlich brauchen, klären Sie mit Ihrem Steuerberater, Spediteur oder dem Zoll.