Die Standardansichten der JTL-Wawi decken vieles ab – aber oft fehlt genau die eine Information, die Sie beim Bearbeiten eines Auftrags oder Artikels brauchen: die USt-IdNr. des Kunden, der verfügbare Bestand je Lager oder die Sendungsverfolgung auf einen Blick. Für solche Fälle gibt es eigene Übersichten: zusätzliche Reiter, deren Inhalt eine SQL-Abfrage liefert, die Sie selbst festlegen.
Was eigene Übersichten sind
Eigene Übersichten (JTL nennt sie auch ListView Extensions) sind Reiter im unteren Bereich von Artikelverwaltung, Verkauf, Kunden und weiteren Bereichen. Sobald Sie einen Datensatz markieren, führt die Wawi die hinterlegte Abfrage live aus und zeigt das Ergebnis als Tabelle an.
Typische Einsätze:
- Zusatzinformationen zum markierten Auftrag, die in der Standardansicht fehlen
- Kennzahlen zum markierten Artikel (Bestand, Zulauf, Verkäufe pro Plattform)
- kundenindividuelle Preise zum markierten Kunden
Anlegen: wo und wie
Laut JTL-Guide ist der Ablauf in allen Bereichen gleich:
- Bereich öffnen (z. B. Artikelverwaltung) und den Reiter Eigene Übersichten wählen.
- Auf das +-Symbol klicken – der Dialog Eigene Übersicht konfigurieren öffnet sich.
- Einen kurzen Namen eingeben – er wird zum Reitertitel.
- Die Abfrage in das Feld SQL eintragen.
- Unter Berechtigungen die Benutzergruppen wählen, die die Übersicht sehen dürfen. Ohne Auswahl sehen sie alle.
- Speichern.
Zum Ändern markieren Sie den Reiter und klicken auf Bearbeiten, zum Entfernen auf Übersicht löschen.
Voraussetzung ist das Benutzerrecht JTL-Wawi > Allgemein > Listen mit dynamischen SQLs erweitern (Admin > Benutzer/Rechte). Außerdem muss Ihre JTL-Edition die Funktion enthalten – die Zahl der möglichen Übersichten kann je nach Edition begrenzt sein.
Platzhalter: @Key und @Keys
Damit die Abfrage weiß, welcher Datensatz gemeint ist, verwenden Sie den Platzhalter @Key. Er steht für den Schlüssel des markierten Datensatzes. In den Beispielen des JTL-Guides heißt das konkret:
| Bereich | @Key entspricht |
|---|---|
| Artikelverwaltung | kArtikel |
| Verkauf | kAuftrag (in Verkauf.tAuftrag) |
| Kunden | kKunde |
Für erweiterte Übersichten über mehrere markierte Datensätze ersetzen Sie jedes = @Key durch IN (@Keys). Bei langen Abfragen empfiehlt JTL, das SQL in einen Texteditor zu kopieren und mit der Suchfunktion alle Stellen zu finden – eine vergessene Stelle reicht, damit das Ergebnis nicht stimmt.
Grundregeln, bevor Sie loslegen
Nur lesen. Eine Übersicht zeigt an, sie ändert nichts. Schreiben Sie ausschließlich SELECT-Abfragen. Datenänderungen gehören in die Wawi-Oberfläche oder in geprüfte Workflows – nicht in einen Reiter, der bei jedem Klick ausgeführt wird.
Immer filtern. Die Abfrage läuft bei jedem Markieren eines Datensatzes. Ohne WHERE ... = @Key liest sie die ganze Tabelle – das kostet Zeit und liefert die falschen Daten.
Spalten benennen. Vergeben Sie mit AS "Name" lesbare Spaltenüberschriften. Interne Namen wie cKundeUstId versteht später niemand.
LEFT JOIN, wo Daten fehlen dürfen. Ein einfacher JOIN entfernt Zeilen, zu denen es keinen Partner gibt – etwa einen Lieferschein ohne Versanddatensatz. Wo etwas fehlen kann, nehmen Sie LEFT JOIN.
Testen Sie neue Abfragen zuerst in SQL Server Management Studio mit einem festen Schlüsselwert statt @Key – dort sehen Sie Fehlermeldungen direkt. Erst wenn das Ergebnis stimmt, setzen Sie @Key ein und übernehmen das SQL in die Wawi.
Beispiel 1: USt-IdNr. des Kunden zum Auftrag
Für innergemeinschaftliche Lieferungen braucht man die USt-IdNr. des Kunden schnell im Blick. In Verkauf.tAuftrag gibt es dafür zwei Spalten, die leicht verwechselt werden:
| Spalte | Inhalt |
|---|---|
cKundeUstId |
USt-IdNr. des Kunden – die gesuchte |
cUstId |
eigene USt-IdNr. Ihrer Firma |
Die USt-IdNr. im Kundenstamm (dbo.tAdresse.cUSTID) kann vom Wert im Auftrag abweichen. Maßgeblich für den Beleg ist der Wert im Auftrag – nehmen Sie deshalb cKundeUstId.
Als eigene Übersicht im Bereich Verkauf:
SELECT
a.cAuftragsNr AS "Auftragsnummer",
ISNULL(a.cKundeUstId, '') AS "USt-IdNr. Kunde",
ISNULL(a.cUstId, '') AS "Eigene USt-IdNr."
FROM Verkauf.tAuftrag a
WHERE a.kAuftrag = @Key;
Für mehrere markierte Aufträge (erweiterte Übersicht) lautet die letzte Zeile:
WHERE a.kAuftrag IN (@Keys);
Bei Marktplatz-B2B-Aufträgen (z. B. Amazon) bleibt cKundeUstId häufig leer, obwohl es sich um einen Geschäftskunden handelt: Der Marktplatz übermittelt die USt-IdNr. nur bei einem Teil der Bestellungen. Eine leere Spalte ist dann kein Fehler der Abfrage.
Beispiel 2: Versand und Sendungsverfolgung zum Auftrag
Der JTL-Guide liefert für den Verkauf ein Beispiel, das Lieferscheine, Versanddaten und Trackinglink zum markierten Auftrag zeigt. Leicht gekürzt – und mit LEFT JOIN zum Benutzer, damit Lieferscheine ohne Versanddatensatz nicht verschwinden:
SELECT
ls.cLieferscheinNr AS "Lieferscheinnummer",
FORMAT(v.dVersendet, 'dd.MM.yyyy') AS "Versendet am",
va.cName AS "Versandart",
v.cIdentCode AS "Tracking-ID",
REPLACE(va.cTrackingUrlTemplate, '#IdentCode#', v.cIdentCode) AS "Trackinglink",
b.cName AS "Benutzer"
FROM Verkauf.tAuftrag a
JOIN dbo.tLieferschein ls ON ls.kBestellung = a.kAuftrag
LEFT JOIN dbo.tVersand v ON v.kLieferschein = ls.kLieferschein
LEFT JOIN dbo.tVersandart va ON va.kVersandart = v.kVersandArt
LEFT JOIN dbo.tBenutzer b ON b.kBenutzer = v.kBenutzer
WHERE a.kAuftrag = @Key;
Beispiel 3: verfügbarer Bestand zum Artikel
In der Artikelverwaltung zeigt diese Übersicht, was vom Bestand wirklich noch verkauft werden kann: eigener Bestand minus reservierte minus gesperrte Menge. Negative Werte werden auf 0 gesetzt.
SELECT
a.cArtNr AS "Artikelnummer",
CAST(ISNULL(lb.fEigenerBestand, 0) AS DECIMAL(18,2)) AS "Eigener Bestand",
CAST(ISNULL(lb.fReserviert, 0) AS DECIMAL(18,2)) AS "Reserviert",
CAST(ISNULL(lb.fVerfuegbarGesperrt, 0) AS DECIMAL(18,2)) AS "Gesperrt",
CAST(CASE
WHEN ISNULL(lb.fEigenerBestand, 0) - ISNULL(lb.fReserviert, 0)
- ISNULL(lb.fVerfuegbarGesperrt, 0) < 0 THEN 0
ELSE ISNULL(lb.fEigenerBestand, 0) - ISNULL(lb.fReserviert, 0)
- ISNULL(lb.fVerfuegbarGesperrt, 0)
END AS DECIMAL(18,2)) AS "Verfügbar"
FROM dbo.tArtikel a
LEFT JOIN dbo.vLagerbestandEx lb ON lb.kArtikel = a.kArtikel
WHERE a.kArtikel = @Key;
Beispiel 4: Bestand je Warenlager zum Artikel
Wie viel liegt in welchem Lager? Die Wawi führt jede Lagerbewegung in dbo.tWarenLagerEingang und dbo.tWarenLagerAusgang. Eingänge minus Ausgänge ergeben den physischen Bestand je Lager – dasselbe Prinzip wie in unserem Artikel zum Lagerbestand zu einem Stichtag, hier ohne Datumsgrenze und nur für den markierten Artikel:
;WITH Bewegungen AS (
SELECT wp.kWarenLager, e.fAnzahl AS Menge
FROM dbo.tWarenLagerEingang e
JOIN dbo.tWarenLagerPlatz wp ON wp.kWarenLagerPlatz = e.kWarenLagerPlatz
WHERE e.kArtikel = @Key
UNION ALL
SELECT wp.kWarenLager, -x.fAnzahl
FROM dbo.tWarenLagerAusgang x
JOIN dbo.tWarenLagerPlatz wp ON wp.kWarenLagerPlatz = x.kWarenLagerPlatz
WHERE x.kArtikel = @Key
)
SELECT
wl.cName AS "Warenlager",
CAST(SUM(m.Menge) AS DECIMAL(18,2)) AS "Bestand"
FROM Bewegungen m
JOIN dbo.tWarenLager wl ON wl.kWarenLager = m.kWarenLager
GROUP BY wl.cName
HAVING SUM(m.Menge) <> 0
ORDER BY wl.cName;
Diese Liste zeigt den physischen Bestand je Lager. Reservierungen für offene Aufträge sind darin nicht abgezogen – dafür ist Beispiel 3 da. Vaterartikel und Stücklisten haben keinen eigenen Bestand im Lagerjournal; bei ihnen bleibt die Liste leer.
Typische Fehlerbilder
| Symptom | Ursache | Lösung |
|---|---|---|
| Reiter Eigene Übersichten fehlt oder bleibt gesperrt | Benutzerrecht fehlt oder Edition enthält die Funktion nicht | Recht „Listen mit dynamischen SQLs erweitern“ vergeben, Edition prüfen |
| Ein Kollege sieht die Übersicht nicht | Unter Berechtigungen ist seine Benutzergruppe nicht ausgewählt | Gruppe in der Übersicht ergänzen |
| Übersicht zeigt eigene statt Kunden-USt-IdNr. | cUstId statt cKundeUstId verwendet |
Spalte tauschen |
| Bei Mehrfachauswahl falsche oder leere Werte | Nicht jedes = @Key wurde durch IN (@Keys) ersetzt |
Alle Stellen per Suchen prüfen |
| Zeilen fehlen, obwohl Daten da sind | JOIN statt LEFT JOIN bei optionalen Daten |
LEFT JOIN verwenden |
| Artikelname bleibt leer | Join auf dbo.tArtikelBeschreibung mit einer Sprache, für die keine Texte gepflegt sind |
Sprache (kSprache) im Datenbestand prüfen und gezielt setzen |
| Wawi reagiert träge beim Durchklicken | Abfrage ohne @Key-Filter oder mit aufwendigen Unterabfragen |
Auf den markierten Datensatz filtern, Abfrage vorher in SSMS messen |
Achten Sie besonders auf den Artikelnamen: Die naheliegende Unterabfrage auf die Standardsprache der Wawi liefert auf manchen Installationen eine Sprach-ID, für die keine Artikeltexte existieren. Die Spalte bleibt dann leer, ohne dass eine Fehlermeldung erscheint.
Fazit
Mit eigenen Übersichten holen Sie genau die Information in die Wawi, die Ihnen im Alltag fehlt – direkt am markierten Auftrag, Artikel oder Kunden. Entscheidend sind drei Dinge: nur lesende Abfragen, ein sauberer Filter auf @Key und die richtigen Spalten. Wenn Sie eine Übersicht brauchen, aber die passenden Tabellen nicht kennen, unterstützt Sie PC-Mixx als JTL-Servicepartner beim Aufbau.
Häufige Fragen
Was sind eigene Übersichten in JTL-Wawi?
Zusätzliche Reiter in Bereichen wie Artikel, Verkauf oder Kunden, deren Inhalt eine selbst geschriebene SQL-Abfrage liefert. Die Abfrage läuft live, sobald Sie einen Datensatz markieren.
Welches Recht brauche ich, um eigene Übersichten anzulegen?
Laut JTL-Guide das Benutzerrecht „Listen mit dynamischen SQLs erweitern“ unter JTL-Wawi > Allgemein. Zusätzlich muss Ihre JTL-Edition die Funktion enthalten; die Anzahl der Übersichten kann je nach Edition begrenzt sein.
Was bedeutet @Key in der Abfrage?
@Key steht für den Schlüssel des aktuell markierten Datensatzes – in der Artikelverwaltung für kArtikel, im Verkauf für kAuftrag, bei Kunden für kKunde. Für mehrere markierte Datensätze ersetzen Sie = @Key durch IN (@Keys).
Warum ist die USt-IdNr. in meiner Übersicht die eigene statt die des Kunden?
In Verkauf.tAuftrag gibt es zwei Spalten: cKundeUstId ist die USt-IdNr. des Kunden, cUstId die eigene USt-IdNr. Ihrer Firma. Für den Kunden immer cKundeUstId verwenden.
Können eigene Übersichten Daten verändern?
Eine eigene Übersicht soll nur anzeigen. Verwenden Sie ausschließlich SELECT-Abfragen – UPDATE, DELETE oder INSERT haben in einer Übersicht nichts zu suchen.
Quellen
- JTL-Guide: Eigene Übersichten erstellen
- JTL-Guide: Beispiele für Eigene Übersichten für Artikel
- JTL-Guide: Beispiel für Eigene Übersichten für Verkauf
- JTL-Guide: Beispiele für Eigene Übersichten für Kunden
- JTL-Guide: Benutzerrechte zuweisen
- PC-Mixx Wissen: Lagerbestand zu jedem Zeitpunkt ermitteln