Mit Custom Workflows in JTL-Wawi 1.6+ lassen sich individuelle Preisregeln und Sonderpreise automatisiert pflegen – auch gestaffelt pro Kundengruppe, Shop und ab definierter Menge. Dieser Artikel erklärt, wie das technisch funktioniert, wie Sie dies per Workflow lösen und welche Vorteile das hat.
Was ist das Ziel?
- Preise für Artikel automatisiert (z.B. beim Import, nach bestimmten Aktionen oder auf Knopfdruck) als Kundengruppenpreis in JTL setzen.
- Die Zuordnung des Shops erfolgt nicht mehr über die interne Shop-ID, sondern bequem über den Shopnamen.
- Die Funktion arbeitet für globale Preise (alle Shops) und für gezielte Shop-Preise.
So geht’s: Technischer Hintergrund
- Im Hintergrund wird eine eigene gespeicherte Prozedur (SQL) genutzt, die von JTL-Workflows aufgerufen werden kann.
- Preis, Menge-ab, Kundengruppe und Shopname werden als Parameter (z.B. per DotLiquid im Workflow) übergeben.
- Die Prozedur sucht intern den zugehörigen Datensatz (bzw. legt ihn an) und setzt dort den Preis.
Sie brauchen dafür:
- Die CustomWorkflows-Funktion in Ihrer JTL-Datenbank (ab Wawi 1.6).
- Einen eigenen SQL-„Custom Workflow“, wie unten dargestellt (kann von Ihrem IT Ansprechpartner eingespielt werden).
- Ein Workflow-Event (z.B. „Nach dem Speichern eines Artikels“), das über entsprechende DotLiquid-Parameter die gewünschten Werte übergibt.
Anforderungen
- JTL-Wawi 1.6 oder neuer
- JTL Pro Lizenz
- Datenbankzugriff und das Recht, Prozeduren anzulegen
- Idealerweise einen technischen Ansprechpartner
Beispiel: Prozedur zum Setzen von Kundengruppenpreisen
Folgende Prozedur kann Ihr IT/Partner in der JTL Datenbank einrichten (Ausschnitt, für Entwickler):
/*
MIT License
Copyright (c) 2025 T4DT GmbH
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
IF NOT EXISTS (SELECT 1 FROM sys.types WHERE name = 'Parameter_Shopname')
CREATE TYPE CustomWorkflows.Parameter_Shopname FROM NVARCHAR(255);
GO
IF NOT EXISTS (SELECT 1 FROM sys.types WHERE name = 'Parameter_Kundengruppe')
CREATE TYPE CustomWorkflows.Parameter_Kundengruppe FROM NVARCHAR(255);
GO
IF NOT EXISTS (SELECT 1 FROM sys.types WHERE name = 'Parameter_PreisString')
CREATE TYPE CustomWorkflows.Parameter_PreisString FROM NVARCHAR(50);
GO
IF NOT EXISTS (SELECT 1 FROM sys.types WHERE name = 'Parameter_nAnzahlAb')
CREATE TYPE CustomWorkflows.Parameter_nAnzahlAb FROM INT;
GO
-- Falls die Prozedur schon existiert, droppe sie
IF EXISTS(SELECT 1 FROM sys.procedures WHERE name = 'spSetKundengruppenpreis')
DROP PROCEDURE CustomWorkflows.spSetKundengruppenpreis;
GO
/*
MIT License
Copyright (c) 2025 T4DT GmbH
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
CREATE PROCEDURE CustomWorkflows.spSetKundengruppenpreis
@kArtikel INT,
@cKundengruppe CustomWorkflows.Parameter_Kundengruppe,
@PreisString CustomWorkflows.Parameter_PreisString,
@Shopname CustomWorkflows.Parameter_Shopname,
@nAnzahlAb CustomWorkflows.Parameter_nAnzahlAb = 1 -- Standard: ab 1 Stück
AS
BEGIN
SET NOCOUNT ON;
DECLARE @fNettoPreis DECIMAL(25, 13);
DECLARE @errMsg VARCHAR(255);
SET @nAnzahlAb = ISNULL(@nAnzahlAb,0)
SET @fNettoPreis = TRY_CAST(REPLACE(@PreisString, ',', '.') AS DECIMAL(25,13));
IF ISNULL(@fNettoPreis,0) = 0
THROW 50001, '0 Preise sind mit dieser Prozedur verboten', 1;
DECLARE @kKundengruppe INT = (SELECT TOP 1 kKundengruppe FROM dbo.tKundengruppe WHERE cName = @cKundengruppe);
IF ISNULL(@kKundengruppe,0) = 0
THROW 50001, 'Keine passende Kundengruppe gefunden.', 1;
DECLARE @kShop INT;
IF @Shopname IS NULL OR @Shopname = ''
SET @kShop = 0;
ELSE
SELECT @kShop = kShop FROM dbo.tShop WHERE cName = @Shopname;
IF @kShop IS NULL
BEGIN
SET @errMsg = CONCAT('Kein Shop mit Namen "', @Shopname, '" gefunden.');
THROW 50001, @errMsg, 1;
END
DECLARE @kPreis INT;
-- Ermittle oder lege den tPreis-Eintrag an (ohne kKunde, also global, z.B. kKunde=0)
SELECT @kPreis = kPreis FROM dbo.tPreis
WHERE kArtikel = @kArtikel AND kKundenGruppe = @kKundengruppe AND kShop=@kShop AND kKunde=0;
IF @kPreis IS NULL
BEGIN
INSERT INTO dbo.tPreis (kArtikel, kKundenGruppe, kShop, kKunde)
VALUES (@kArtikel, @kKundengruppe, @kShop, 0);
SET @kPreis = SCOPE_IDENTITY();
END
IF ISNULL(@kPreis,0) = 0
THROW 50001, 'Es konnte kein Preiseintrag erstellt werden.', 1;
-- tPreisDetail: Update (falls vorhanden) sonst Insert
IF EXISTS (SELECT 1 FROM dbo.tPreisDetail WHERE kPreis = @kPreis AND nAnzahlAb = @nAnzahlAb)
BEGIN
UPDATE dbo.tPreisDetail
SET fNettoPreis = @fNettoPreis
WHERE kPreis = @kPreis AND nAnzahlAb = @nAnzahlAb;
END
ELSE
BEGIN
INSERT INTO dbo.tPreisDetail (kPreis, nAnzahlAb, fNettoPreis, fProzent)
VALUES (@kPreis, @nAnzahlAb, @fNettoPreis, 0.0);
END
END
GO
-- Parameteranzeige für den Workflow
EXEC CustomWorkflows._SetActionParameterDisplayName 'Parameter_Kundengruppe', 'Kundengruppe';
EXEC CustomWorkflows._SetActionParameterDisplayName 'Parameter_PreisString', 'Preis';
EXEC CustomWorkflows._SetActionParameterDisplayName 'Parameter_Shopname', 'Shopname';
EXEC CustomWorkflows._SetActionParameterDisplayName 'Parameter_nAnzahlAb', 'Menge ab';
EXEC CustomWorkflows._SetActionDisplayName 'spSetKundengruppenpreis', 'Kundengruppenpreis setzen';
GODotLiquid Beispiel für den Workflow-Aufruf
Bei den Action-Parametern im Workflow tragen Sie beispielsweise Folgendes ein:
Erläuterung
- Kundengruppe
- Preis
- Shopname (wie in JTL Wawi angezeigt)
- Für globale Preiszuweisung Shopname leer lassen oder explizit 0 übergeben
- Staffelmenge ab
Vorteile für Sie
- Preise inkl. Staffeln können per dotliquid automatisiert berechnet und gepflegt werden.
- Shops können einfach per Namen angesprochen werden
- Je Staffelmenge kann man eigene Regeln hinterlegen
- Auch nachträgliche (Massen-)Korrekturen an Preisen via Ameise-Import und Workflow möglich
- Fehlermeldungen im Workflow helfen, Tippfehler bei Kundengruppen- oder Shopnamen sofort zu erkennen
FAQ
Wie finde ich den Shopnamen?
Im Adminbereich von JTL unter „Onlineshops“ – dort steht der genaue Name, wie er auch als Parameter angegeben werden muss.
Müssen die Preise immer netto sein?
Die Übergabe per Workflow muss zwingend Netto erfolgen – wichtig ist die einheitliche Umrechnung vor dem Eintrag.
Wer hilft bei der Einrichtung?
Die Anlage der SQL-Prozedur macht Ihr Systemadministrator oder zertifizierter JTL-Servicepartner.
Kann ich damit auch Staffelpreise anlegen?
Ja! Über den Parameter „Menge ab“ steuern Sie, ab welcher Stückzahl der Preis gilt.
Support
Für Fragen oder die professionelle Umsetzung wenden Sie sich gerne jederzeit an unser Support-Team – wir helfen und richten bei Bedarf alles für Sie ein.
Tipp
- Testen Sie Anpassungen immer an einem Testartikel, bevor Sie alle Preise global pflegen lassen!
- Sie können auch automatisch den Preisabgleich in die gewünschte Shopqueue auslösen lassen
Folgt dazu der Anleitung hier
Kommentare
0 Kommentare
Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.