Kontaktinformationen

Korngasse 13, 35753 Greifenstein

Fragen? Rufen Sie uns gerne an. +49 (0) 6478 4329860 kontakt@aventux.com
Folgen Sie uns

Unsere Ausgangslage:

In einer zunehmend digitalisierten Welt ist es für Händler und Verkäufer essentiell, ihre Geschäftsprozesse zu optimieren und zu vereinfachen. Die Ausgangslage für unser Projekt war die Erkenntnis, dass die JTL-Wawi, eine weit verbreitete Warenwirtschaftssoftware, in Bezug auf die Abwicklung von Pfandartikeln Optimierungspotential bot. Viele Händler und Verkäufer möchten ihren Kunden Pfandartikel anbieten, stehen jedoch vor Herausforderungen bei der Integration dieses Prozesses in ihre bestehenden Systeme. Um dies zu erleichtern, haben wir uns das Ziel gesetzt, die JTL-WaWi mit einem Workflow für Pfandpositionen zu ergänzen und somit den Workflow für alle beteiligten Parteien zu optimieren.

Vorraussetzungen:

Die erforderlichen Voraussetzungen umfassen die JTL WaWi Version 1.6.

Einrichtung & Installation:

Zunächst ist es erforderlich, zwei Funktionsattribute anzulegen. Diese Attribute sind wesentliche Elemente, die benötigt werden, um bestimmte Funktionen oder Eigenschaften eines Artikels oder einer Dienstleistung zu definieren. Die korrekte Definition dieser Attribute ist entscheidend für die spätere Verwendung der JTL-WaWi, da sie die Grundlage für die Steuerung verschiedener Aspekte des Workflows bilden. Bitte stellen Sie sicher, dass diese Schritte sorgfältig durchgeführt werden, um die optimale Funktionalität des Systems zu gewährleisten.

Hierzu navigieren Sie zu Artikel -> Attribute und legen hier 2 Funktionsattribute an. In unserem Fall haben wir diese Pfand und Pfand_Name genannt

Hierbei sollte Pfand_Name ein Kurztext- und Pfand eine Dezimalzahl-Feld sein.

Im Anschluss öffnen Sie das SQL-Managementstudio und stellen eine Verbindung zur Datenbank her, wobei Sie sicherstellen, dass Sie im betroffenen Mandanten arbeiten. Innerhalb dieses Mandantenbereichs führen Sie dann den nachfolgenden SQL-Code aus. Es ist wichtig, dass Sie in dem spezifischen Mandanten arbeiten, für den die Änderungen vorgenommen werden sollen, um sicherzustellen, dass die Änderungen korrekt angewendet werden und keine unbeabsichtigten Auswirkungen auf andere Bereiche der Datenbank haben.

Bitte beachten Sie jedoch, dass Sie den folgenden Abschnitt anpassen müssen, bevor Sie den SQL-Befehl ausführen:

DECLARE @DBDepositName VARCHAR(155) = 'Pfand_Name';
DECLARE @DBDepositValueName VARCHAR(155) = 'Pfand';

DECLARE @DBDepositValueIsNet INT = 0;
--Copyright (c) 2023 Tobias Poeschl (Aventux)
--Jede Person, die eine Kopie der Software und der dazugehörigen Dokumente (im Folgenden "Software" genannt) bekommt, wird hierdurch gratis die Berechtigung gewährt, mit der Software in jeglicher Weise zu verfahren, das beinhaltet unter anderem das Recht zur Nutzung, Vervielfältigung, Abwandlung, Vereinigung, Veröffentlichung, Verbreitung, Unterlizensierung und/oder Verkauf von Kopien der Software, sowie das Recht, solche Handlungen anderen zu erlauben, unter den nachstehenden Konditionen:
--Der obige Hinweis zum Urheberrecht sowie der Hinweis zur Genehmigung müssen in allen Kopien oder signifikanten Anteilen der Software vorhanden sein.
IF EXISTS(SELECT 1 FROM sys.procedures WHERE Name = 'spPfandpositionenErstellen')
DROP PROCEDURE CustomWorkflows.spPfandpositionenErstellen
GO
CREATE PROCEDURE CustomWorkflows.spPfandpositionenErstellen @kAuftrag INT AS
BEGIN
	DECLARE @DBDepositName VARCHAR(155) = 'Pfand_Name'; -- Mit den korrekten Attribut-Namen für den Pfandnamen ersetzen
	DECLARE @DBDepositValueName VARCHAR(155) = 'Pfand'; -- Mit den korrekten Attribut-Namen für den Pfandwert ersetzen
	DECLARE @DBDepositValueIsNet INT = 0; -- 0 = Falsch; 1 = Wahr - Setzen ob die Preise in dem Pfandwert Netto sind

	DECLARE @CurrentID INT;
    DECLARE @MaxID INT;
    DECLARE @CurrentArtikelID INT;
	DECLARE @HasDeposit INT;

    SELECT 
        @CurrentID = MIN(kAuftragPosition),
        @MaxID = MAX(kAuftragPosition) 
    FROM Verkauf.tAuftragPosition 
    WHERE kAuftrag = @kAuftrag;
	
    WHILE @CurrentID <= @MaxID
		BEGIN
    	DECLARE @DepositName VARCHAR(155);
		DECLARE @MwSt DECIMAL(10, 2);
		DECLARE @HasDepositPosition INT;
		DECLARE @DepositPositionCount INT;
		DECLARE @Quantity DECIMAL(15, 0);
		DECLARE @PositionType INT;
		DECLARE @HighestSort INT;
		DECLARE @cArtNr VARCHAR(155);
				
    	SET @cArtNr = (SELECT cArtNr 
                         FROM Verkauf.tAuftragPosition
                         WHERE kAuftragPosition = @CurrentID AND kAuftrag = @kAuftrag);

    	SET @CurrentArtikelID = (SELECT kArtikel 
                         FROM Verkauf.tAuftragPosition
                         WHERE kAuftragPosition = @CurrentID AND kAuftrag = @kAuftrag);

    	SET @Quantity = (SELECT fAnzahl 
                         FROM Verkauf.tAuftragPosition
                         WHERE kAuftragPosition = @CurrentID AND kAuftrag = @kAuftrag); 

    	SET @PositionType = (SELECT nType 
                         FROM Verkauf.tAuftragPosition
                         WHERE kAuftragPosition = @CurrentID AND kAuftrag = @kAuftrag);

		SET @HighestSort = (SELECT MAX(nSort) + 1 as highest_nSort
						 FROM Verkauf.tAuftragPosition
					     WHERE kAuftrag = @kAuftrag)
		
		-- Prüfen, ob ArtNr nicht leer ist
		IF @cArtNr IS NOT NULL
		BEGIN
			-- Prüfen, ob die Position ein Produkt ist
			IF @PositionType = 1
			BEGIN
				SET @DepositName = (SELECT cWertVarchar FROM tArtikelAttributSprache
								JOIN tArtikelAttribut on tArtikelAttribut.kArtikelAttribut = tArtikelAttributSprache.kArtikelAttribut
								JOIN tattribut on tattribut.kAttribut = tArtikelAttribut.kAttribut
								JOIN tAttributSprache on tAttributSprache.kAttribut = tattribut.kAttribut
								WHERE tArtikelAttribut.kArtikel = @CurrentArtikelID
								AND tAttributSprache.cName = @DBDepositName); 

				-- Prüfen, ob DepositName nicht leer ist
				IF @DepositName IS NOT NULL
	        	BEGIN
					DECLARE @DepositAmount DECIMAL(15, 2);
			
					SET @DepositAmount = (SELECT fWertDecimal FROM tArtikelAttributSprache
							JOIN tArtikelAttribut on tArtikelAttribut.kArtikelAttribut = tArtikelAttributSprache.kArtikelAttribut
							JOIN tattribut on tattribut.kAttribut = tArtikelAttribut.kAttribut
							JOIN tAttributSprache on tAttributSprache.kAttribut = tattribut.kAttribut
							WHERE tArtikelAttribut.kArtikel = @CurrentArtikelID
							AND tAttributSprache.cName = @DBDepositValueName);

					-- Den MwSt. Satz für das aktuelle Produkte setzen
					SET @MwSt = (SELECT fMwSt FROM Verkauf.tAuftragPosition 
                         WHERE kAuftragPosition = @CurrentID AND kAuftrag = @kAuftrag)
	        	
	        		SET @DepositPositionCount = (SELECT COUNT(kAuftragPosition) FROM Verkauf.tAuftragPosition WHERE cName = @DepositName AND kAuftrag = @kAuftrag AND fMwSt = @MwSt);
	     
					-- Prüfen ob der Pfandwert bereits in Netto hinterlegt wurde und ob ein MwSt. Satz vorhanden ist
					IF @DBDepositValueIsNet = 0 AND @MwSt != 0
					BEGIN
						SET @DepositAmount = @DepositAmount / ((@MwSt / 100) + 1);
					END;

					-- Prüfen, ob bereits eine Pfandposition mit demselben Namen und demselben Betrag existiert
	        		IF @DepositPositionCount = 1
	        		BEGIN
	        			UPDATE Verkauf.tAuftragPosition
        				SET fAnzahl = fAnzahl + @Quantity, nSort = @HighestSort
	        			WHERE cName = @DepositName
						AND kAuftrag = @kAuftrag
	        			AND nType = 0;
	        		END
	        		ELSE
	        		BEGIN
						INSERT INTO Verkauf.tAuftragPosition (kArtikel, kAuftrag, fVkNetto, fAnzahl, cName, nType, fMwSt, nSort) VALUES (0, @kAuftrag, @DepositAmount, @Quantity, @DepositName, 0, @MwSt, @HighestSort)
	        		END;

					-- Stored Procedure [Verkauf].[TYPE_spAuftragEckdatenBerechnen] ausführen
					DECLARE @Auftrag [Verkauf].[TYPE_spAuftragEckdatenBerechnen]

					INSERT INTO @Auftrag(kAuftrag)
					SELECT tAuftrag.kAuftrag
					FROM Verkauf.tAuftrag
					WHERE tAuftrag.kAuftrag = @kAuftrag

					EXEC [Verkauf].[spAuftragEckdatenBerechnen] @Auftrag
	        	END;
			END;
		END;
       
        SET @CurrentID = @CurrentID + 1;
    END;
END
GO
EXEC CustomWorkflows._CheckAction 'spPfandpositionenErstellen'
GO
EXEC CustomWorkflows._SetActionDisplayName 'spPfandpositionenErstellen', 'Pfandpositionen kalkulieren'

GO

Sie haben nun die Möglichkeit, die erstellte Aktion wie gewohnt direkt als Ereignis im Workflow auszuwählen:


Abschließend möchten wir betonen, dass wir nicht nur bei der Integration von Workflows, sondern auch bei weiteren individuellen Lösungen im Zusammenhang mit der JTL-WaWi gerne zur Verfügung stehen. Unser Expertenteam ist stets bereit, Sie bei der Optimierung Ihrer Geschäftsprozesse zu unterstützen und maßgeschneiderte Lösungen für Ihr Unternehmen zu entwickeln. Zögern Sie nicht, uns zu kontaktieren, wir freuen uns darauf, Sie bei Ihren Herausforderungen zu unterstützen.

Sie haben eine Idee für ein Projekt?

Lassen Sie uns zusammenarbeiten

Kostenfreies Erstgespräch anfordern
  • right image
  • Left Image