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