Workflow-Sammelstelle: Teilt eure erfolgreich erstellten Workflows mit anderen JTLern

Rico Giesler

Offizieller Servicepartner
SPBanner
10. Mai 2017
13.243
1.513
Wie Shopsitters richtig schreibt ist es derzeit nur über Umwege möglich.
Wir hatten die Anfrage aber schon ein paar mal und auch auf dem Schirm.
Allerdings müssen da diverse Sachen beachtet und geklärt werden, damit dann auch alles reibungslos laufen kann.
 

gnarx

Sehr aktives Mitglied
18. Januar 2018
3.848
530
Für Leute die nicht so gut mit SQL umgehen können habe ich mal folgenden WF gebaut. Ich meine das die Anweisungen verständlich sind und jeder seine eigenen Parameter eintragen kann.
Das ganze wird noch erweitert auf die Länder (grad in Arbeit) und mehrere verschiedene Artikel wo die höchsten Versandkosten genommen werden (da brauche ich wohl Hilfe).
Aber das Prinzip sollte so klar sein.

Der WF macht folgendes unter "Erweiterten Eigenschaften":
Wenn ein Auftrag erstellt wurde weist der WF die eigenen Versandkosten, mit den eigenen Preisen beim Dienstleister, zu ohne die von der Plattform gesendeten zu überschreiben.
Es wird abgefragt:
1. Welche Warengruppe hat der Auftrag
2. Kommt der Kunde aus Deutschland, der EU (ohne Deutschland), Europa (ohne EU) und Russland.
3. Wie viele gleiche Artikel kauft der Kunde
4. Wie hoch ist der Preis

Mit Punkt 3 bestimme ich z:B. wenn der Kunde mehr als 4 Artikel kauft dann nimm ein Paket statt eines Postbriefes.
Mit Punkt 4 bestimme ich z:B. wenn der Artikel mehr als z.B. 30,00 Euro kostet dann nimm ein Paket statt eines Postbriefes. Oder nimm versicherten Versand.

Am Ende jeder Bedingung (if, elsif) setze ich einen Begriff mit dem ich im Workflow über Versandart ändern, unsere Versandart zuweise.
Das heißt wenn z.B. in der Erweiterten Eigenschaft eine Bedingung zutrifft die z.B. POST145 heißt dann ändere die Versandart auf "Postbrief 1,45 Euro".

Ganz am Ende kommt NIXALL (else) das heißt wenn keine Bedingung zutrifft dann halte den Auftrag zurück und ein Mitarbeiter kann den bearbeiten.

VERSION 2 für kürze Abarbeitungszeiten:
Da ich ja sowie so für jede unsere Versandarten einen WF anlegen muss, habe ich jeweils die Abfrage aufgeteilt, so das nicht mehr alle Möglichkeiten abgefragt werden müssen.

Hier der Beispielcode aus den Erweiterten Eigenschaften:

Code:
{% for Item in Vorgang.AuftragsPositionen.ArtikelPositionen %}\
{% if Vorgang.Lieferung.Lieferadresse.LandISO != 'RU' and Vorgang.Lieferung.Lieferadresse.LandISO != 'DE' %}{% assign landINT = true %}{% endif %}\
{% assign preis=Vorgang.Zahlungen.GesamtbruttopreisOhneVersandart %}\
{% assign menge=Vorgang.AuftragsPositionen.Positionen.ErstesObjekt.Menge %}\
{% assign waren=Item.Artikel.Warengruppe.Name %}\
{% if waren == "Retentionmodul" and landINT =="true" and menge == 1 %}GB370
    {% elsif waren == "SLI-Brücke" and landINT =="true" and menge == 1 %}GB370
    {% elsif waren == "Zubehör Sets" and landINT =="true" and menge == 1 %}GB370
    {% elsif waren == "Kabel / Adapter" and landDE =="true" and menge == 1 %}GB370
{% endif %}
{% endfor %}




Hier der Beispielcode aus den Erweiterten Eigenschaften:
Code:
{% if Vorgang.AuftragsPositionen.ArtikelPositionen.Anzahl == 1 %}
{% for Item in Vorgang.AuftragsPositionen.ArtikelPositionen %}
    {% if Vorgang.Lieferung.Lieferadresse.LandISO == 'DE' %}{% assign landDE = true %}{% endif %}
    {% if Vorgang.Lieferung.Lieferadresse.Land.IstEU == 'true' and Vorgang.Lieferung.Lieferadresse.LandISO != 'DE' %}{% assign landEU = true %}{% endif %}
    {% if Vorgang.Lieferung.Lieferadresse.Land.Kontinent == 'Europa' and Vorgang.Lieferung.Lieferadresse.LandISO != 'DE' %}{% assign landEU_NONEU = true %}{% endif %}
    {% if Vorgang.Lieferung.Lieferadresse.Land.Kontinent == 'Europa' and Vorgang.Lieferung.Lieferadresse.Land.IstEU != 'true' %}{% assign landNONEU = true %}{% endif %}
    {% if Vorgang.Lieferung.Lieferadresse.LandISO == 'RU' %}{% assign landRU = true %}{% endif %}    
 
    {% assign preis=Vorgang.Zahlungen.GesamtbruttopreisOhneVersandart %}
    {% assign menge=Vorgang.AuftragsPositionen.Positionen.ErstesObjekt.Menge %}
    {% assign waren=Item.Artikel.Warengruppe.Name %}
    {% assign marke=Vorgang.AuftragsPositionen.Positionen.ErstesObjekt.Marke %}

       {% comment %} Post 1,45 Euro {% endcomment %}
        {% if waren == "MAC" and landDE =="true" and menge == 1 %}POST145
        {% elsif waren == "Arbeitsspeicher (RAM)" and landDE =="true" and menge == 1 and preis <= 30,00 %}POST145
        {% elsif waren == "Controller" and landDE =="true" and menge == 1 and preis <= 30,00 %}POST145
        {% elsif waren == "Prozessor (CPU)" and marke == "Intel" and landDE =="true" and menge == 1 and preis <= 30,00 %}POST145
        {% elsif waren == "Gehäuselüfter" and landDE =="true" and menge == 1 %}POST145
        {% elsif waren == "Kabel / Adapter" and landDE =="true" and menge == 1 %}POST145
        {% elsif waren == "Lüftersteuerung" and landDE =="true" and menge == 1 preis <= 10,00 %}POST145
        {% elsif waren == "Blende" and landEU =="true" and menge == 1 %}POST145
        {% elsif waren == "Zubehör Sets" and landEU =="true" and menge == 1 %}POST145    
        {% elsif waren == "Retentionmodul" and landDE =="true" and menge == 1 %}POST145
        {% elsif waren == "SLI-Brücke" and landDE =="true" and menge == 1 %}POST145
        {% elsif waren == "Soundkarte" and landDE =="true" and menge == 1 and preis <= 20,00 %}POST145
        {% elsif waren == "TV-Karte" and landDE =="true" and menge == 1 and preis <= 20,00 %}POST145

       {% comment %} Post 1,90 Euro {% endcomment %}
        {% elsif waren == "Prozessor (CPU)" and marke != "Intel" and landDE =="true" and menge == 1 and preis <= 30,00 %}POST190
        {% elsif waren == "Blende" and landDE =="true" and menge == 1 %}POST190
        {% elsif waren == "Zubehör Sets" and landDE =="true" and menge == 1 %}POST190    


       {% comment %} Paket 5,00 Euro bis 1kg {% endcomment %}        
        {% elsif waren == "Arbeitsspeicher (RAM)" and landDE =="true" and menge == 1 and preis > 30,00 %}PAKET501
        {% elsif waren == "Bundle" and landDE =="true" menge == 1 %}PAKET501
        {% elsif waren == "Betriebssystem" and landDE =="true" and menge == 1 %}PAKET501
        {% elsif waren == "Controller" and landDE =="true" and menge == 1 and preis > 30,00 %}PAKET501
        {% elsif waren == "CPU-Kühler" and landDE =="true" and menge == 1 %}PAKET501
        {% elsif waren == "Prozessor (CPU)" and landDE =="true" and menge == 1 and preis > 30,00 %}PAKET501
        {% elsif waren == "Tastatur / Maus" and landDE =="true" and menge == 1 %}PAKET501
        {% elsif waren == "Festplatte" and landDE =="true" and menge == 1 %}PAKET501
        {% elsif waren == "Gehäuselüfter" and landDE =="true" and menge > 1 %}PAKET501
        {% elsif waren == "Grafikkarte" and landDE =="true" and menge > 1 %}PAKET501
        {% elsif waren == "Sonstige Kühler" and landDE =="true" and menge == 1 %}PAKET501    
        {% elsif waren == "Laufwerk" and landDE =="true" and menge == 1 %}PAKET501
        {% elsif waren == "Lüftersteuerung" and landDE =="true" and menge == 1 preis > 10,00 %}PAKET501
        {% elsif waren == "Mainboard" and landDE =="true"" and menge == 1 %}PAKET501
        {% elsif waren == "Netzteil" and landDE =="true" and menge == 1 %}PAKET501
        {% elsif waren == "Software" and landDE =="true" and menge == 1 %}PAKET501
        {% elsif waren == "Soundkarte" and landDE =="true" and menge == 1 and preis > 20,00 %}PAKET501
        {% elsif waren == "TV-Karte" and landDE =="true" and menge == 1 and preis > 20,00 %}PAKET501
        {% elsif waren == "CPU-Wasserkühlung" and landDE =="true" and menge == 1 %}PAKET501
         
       {% comment %} Paket 10,00 Euro bis 10kg {% endcomment %}
        {% elsif waren == "Gehäuse" and landDE =="true" and menge == 1 %}PAKET100
        {% elsif waren == "Monitor" and landDE =="true" and menge == 1 %}PAKET100
        {% elsif waren == "PC / Server" and landDE =="true" and menge == 1 %}PAKET100
        {% elsif waren == "Bundle-PC" and landDE =="true" and menge == 1 %}PAKET100
        {% elsif waren == "Komplett-PC´s" and landDE =="true" and menge == 1 %}PAKET100
        {% elsif waren == "Komplett-PC" and landDE =="true" and menge == 1" %}PAKET100
     
        {% else %}NIXALL
        {% endif %}
       
{% endfor %}
{% endif %}

Im Workflow selber kann es dann so aussehen:
WF_Versand.jpg

ACHTUNG: Hier hat JTL einen kleinen Fehler, sobald man Versandart ändern auswählt und man keinen Hacken rechts setzt, meldet JTL einen Fehler.
Das kann man umgehen in dem man einmal einen Hacken setzt und den wieder rausnimmt.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Shopküche.de

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
7.103
1.861
Berlin
Was besser wäre, wenn du das ganze in einem capture Block machen würdest und so wie ich es gezeigt habe das nach einem if, mit einem assign einer Variable zuzuordnen, die du dann am ende ausgibst.

Du siehst das ganz gut wenn du das anhand eines Aufteages testest, dann gast du haufenweise returns und leerzeichen drin und musst deshalb auch auf enthält prüfen.

Du könntest das auch mit einem \ am Ende umgehen und alle Leerzeichen weglassen aber schöner wäre es mit einem capture Block.
 

elevennerds.de

Sehr aktives Mitglied
23. September 2015
1.214
187
Problem: Bei einem Kunden setzen wir die Versandarten mittels Workflows anhand der Artikelpositionen im Auftrag. Nun kann ja in einem Auftrag jeweils ein Artikel mit Briefversand und einer mit Paketversand enthalten sein. Um so etwas abzufangen, habe ich folgenden Workflow entwickelt. Dieser prüft auf unterschiedliche Versandklassen aller Artikelpositionen eines Auftrages außer Stücklistenkomponenten (dafür die Stückliste selber) und entfernt dann die Versandart. Diese wird dann einfach am Packtisch neu ausgewählt.

Auftrag > Erstellt > Neue Bedingung > Erweiterte Eigenschaften verwalten > Hinzufügen > Code einfügen
Code:
{% capture countquery %}
SELECT COUNT(DISTINCT a.kVersandklasse) FROM dbo.tArtikel AS a \
JOIN dbo.tbestellpos AS bp ON tArtikel_kArtikel = a.kArtikel \
JOIN dbo.tBestellung AS b ON bp.tBestellung_kBestellung = b.kBestellung \
LEFT JOIN dbo.tStueckliste AS s ON s.kStueckliste = a.kStueckliste \
WHERE a.kArtikel NOT IN \
    (SELECT kArtikel FROM dbo.tStueckliste \
    WHERE a.kStueckliste != 0 AND kStueckliste = a.kStueckliste) \
AND b.cBestellNr = '{{ Vorgang.Stammdaten.Auftragsnummer | SqlEscape}}'
{% endcapture -%}
{% assign result = countquery | DirectQueryScalar -%}
{{ result }}

Dieser Snippet gibt die Anzahl unterschiedlicher Versandklassen eines Auftrages zurück. Danach einfach prüfen, ob die zurückgegebene Anzahl größer als 1 ist und die entsprechende Aktion ausführen.

Hier kann natürlich als Aktion auch gleich Paketversand gesetzt werden.
 
Zuletzt bearbeitet:

elevennerds.de

Sehr aktives Mitglied
23. September 2015
1.214
187
Query Update:
Code:
{% capture countquery %}
SELECT COUNT(DISTINCT kVersandklasse) FROM dbo.tArtikel \
WHERE kArtikel IN ( \
    SELECT bp.tArtikel_kArtikel FROM dbo.tbestellpos AS bp \
        JOIN dbo.tBestellung AS b ON bp.tBestellung_kBestellung = b.kBestellung \
        WHERE b.cBestellNr = '{{ Vorgang.Stammdaten.Auftragsnummer | SqlEscape}}' AND bp.kBestellStueckliste = 0 \
    UNION \
    SELECT bp.tArtikel_kArtikel FROM dbo.tbestellpos AS bp \
        JOIN dbo.tBestellung AS b ON bp.tBestellung_kBestellung = b.kBestellung \
        JOIN dbo.tArtikel AS a ON a.kArtikel = bp.tArtikel_kArtikel \
        JOIN dbo.tStueckliste AS s ON s.kStueckliste = a.kStueckliste \
        WHERE b.cBestellNr = '{{ Vorgang.Stammdaten.Auftragsnummer | SqlEscape}}' \
);
{% endcapture -%}
{% assign result = countquery | DirectQueryScalar -%}
{{ result }}
  • Es wird jetzt nur noch die Versandklasse der Stückliste und nicht die der Stücklistenkomponenten in der Auswertung berücksichtigt.
 
  • Gefällt mir
Reaktionen: gnarx und _simone_

gnarx

Sehr aktives Mitglied
18. Januar 2018
3.848
530
Moin, ich habe das nun mal getestet, Rückgabe wert ist 4 (4 Artikel enthalten). Muss ich jetzt als Aktion erstmal die Versandarten löschen, können ja mehrere drinne sein? Und dann eine Versandart setzen als 2. Aktion?
 

JuergenSaenger

Sehr aktives Mitglied
19. August 2013
462
59
Genthin
Query Update:
Code:
{% capture countquery %}
SELECT COUNT(DISTINCT kVersandklasse) FROM dbo.tArtikel \
WHERE kArtikel IN ( \
    SELECT bp.tArtikel_kArtikel FROM dbo.tbestellpos AS bp \
        JOIN dbo.tBestellung AS b ON bp.tBestellung_kBestellung = b.kBestellung \
        WHERE b.cBestellNr = '{{ Vorgang.Stammdaten.Auftragsnummer | SqlEscape}}' AND bp.kBestellStueckliste = 0 \
    UNION \
    SELECT bp.tArtikel_kArtikel FROM dbo.tbestellpos AS bp \
        JOIN dbo.tBestellung AS b ON bp.tBestellung_kBestellung = b.kBestellung \
        JOIN dbo.tArtikel AS a ON a.kArtikel = bp.tArtikel_kArtikel \
        JOIN dbo.tStueckliste AS s ON s.kStueckliste = a.kStueckliste \
        WHERE b.cBestellNr = '{{ Vorgang.Stammdaten.Auftragsnummer | SqlEscape}}' \
);
{% endcapture -%}
{% assign result = countquery | DirectQueryScalar -%}
{{ result }}
  • Es wird jetzt nur noch die Versandklasse der Stückliste und nicht die der Stücklistenkomponenten in der Auswertung berücksichtigt.


Wo kann man sich belesen was es für Befehle gibt?
 

vapish

Aktives Mitglied
11. März 2018
46
2
Damit hier mal wieder etwas aktuelles reinkommt teile ich gerne meine Workflows mit euch:

Automatische Zahlungserinnerung versenden für unbezahlte Aufträge:
https://shopkueche.de/tutorials-jtl...ungserinnerung-ueber-jtl-workflows-versenden/

Viele Grüße,
René

Hallo shopküche.de und alle andere Board-Mitglieder,

ich habe den Workflow bezüglich der Zahlungserinnerung genauso eingerichtet wie es in der Anleitung von shopküche beschrieben ist.

Letztens hatte ich einen Kunden der seine Bestellung storniert, wie es auch im Guide von JTL beschrieben ist.
Der Kunde hat sich gemeldet und gesagt das er trotz Stornierung eine Zahlungserinnerung erhalten hat.
Diese Mail habe ich auch erhalten als CC.

Meine Frage an euch, habt ihr dieses Problem auch gehabt?
Wie konntet Ihr das Lösen?
Hat hierbei einer, einen Lösungsansatz für mich?

Viele Grüße
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Per WMS Workflow API Call ausführen Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 1
In Diskussion Fragen zur Rechnungserstellung via Workflow JTL-Workflows - Ideen, Lob und Kritik 2
In Diskussion Manueller Workflow zeitgestuert JTL-Workflows - Ideen, Lob und Kritik 17
Neu Workflow Adresse prüfen auf deutsche Kunden eingrenzen Gelöste Themen in diesem Bereich 6
Neu Brauche Hilfe bei einen Workflow in Sachen Versand Eigene Übersichten in der JTL-Wawi 6
Neu Permanenten Excel-Log über Workflow führen User helfen Usern - Fragen zu JTL-Wawi 2
Workflow DotLiquid: KomplettLieferbarAusLager zeigt FFN Lager an obwohl nicht komplett lieferbar aus diesem Lager JTL-Wawi 1.9 1
In Diskussion Workflow für eBays neues "Kaufabbruch"-Feature JTL-Workflows - Ideen, Lob und Kritik 2
In Diskussion Workflow zum Drucken von Shipping Labels JTL-Workflows - Ideen, Lob und Kritik 3
Neu Workflow für Warenpost nur wenn bestimmte Artikel in Bestellung User helfen Usern - Fragen zu JTL-Wawi 1
Workflow - Vorbestellung ausschließen von Storno JTL-Wawi 1.9 1
Neu Manueller Workflow/ automatischer Workflow Gelöste Themen in diesem Bereich 8
Rechnungsadresse Email Workflow Bedingungen für Rechnung erstellt fehlt JTL-Wawi 1.8 0
In Diskussion Flexible Eingabemaske um Werte/ Parameter an Workflow zu übergeben JTL-Workflows - Ideen, Lob und Kritik 5
In Diskussion Idee für Workflow - Lagerbewertung zum Monatsende an das Steuerbüro JTL-Workflows - Ideen, Lob und Kritik 2
Neu Workflow nur wenn bestimmte Artikel nicht vorhanden User helfen Usern - Fragen zu JTL-Wawi 2
Neu Workflow Zahlung setzen bei Rechnungskorreturen bzw. Retouren User helfen Usern - Fragen zu JTL-Wawi 0
Neu Workflow: Artikel aus Kategorie löschen, wenn Sonderpreis abgelaufen Arbeitsabläufe in JTL-Wawi 0
Problem bei Workflow-Erstellung: Lieferzeit erhöhung" funktioniert nicht JTL-Wawi 1.8 16
Neu Custom Workflow: Lieferschein (Paket) Anmerkung setzen User helfen Usern - Fragen zu JTL-Wawi 0
Gelöst [ERLEDIGT] Hilfe bei workflow: Reiter Auftrag, Rechnung drucken und ausliefern. Gelöste Themen in diesem Bereich 3
Workflow braucht evig :-D JTL-Wawi 1.8 3
In Diskussion Workflow manuell funktioniert, automatisch nicht JTL-Workflows - Ideen, Lob und Kritik 7
Neu [Workaround] Auftrag: Bearbeiter über Workflow wechselen JTL-Wawi 1.9 User helfen Usern - Fragen zu JTL-Wawi 0
Neu CustomWorkflow zum Setzen von einem Hinweis für Auftragspositionen (Wert aus Eigene Felder per Workflow) Dienstleistung, Jobs und Ähnliches 13
Neu Workflow testen --> Auftrag auswählen --> Wawi hängt (keine Rückmeldung) JTL-Wawi - Fehler und Bugs 2
Neu CustomWorkflow zum SPERREN von Kunden (Auswahl eines Kunden/Auftrages/Rechnung per Workflow) Dienstleistung, Jobs und Ähnliches 0
[Bug] JTL-Wawi 1.9 | Auftrag: Statustext in Workflow Variablen leer | gelöst: [SQL] JTL-Wawi 1.9 0
Neu Merkmale & Cross Selling Artikel auf Kindartikel übertragen - Mit manuellen Workflow Ereignis auslösen möglich? User helfen Usern - Fragen zu JTL-Wawi 0
In Bearbeitung Workflow-Management Optimierung/Filterung JTL-Workflows - Ideen, Lob und Kritik 4
Beantwortet Workflow wie für verschiedene Druckausgaben? JTL-Workflows - Ideen, Lob und Kritik 1
Neu Workflow für Coupon Rabatt User helfen Usern - Fragen zu JTL-Wawi 0
Neu Custom Workflow Aufträge nach Artikelnummer sortieren User helfen Usern 6
Neu Workflow Retouren Position User helfen Usern - Fragen zu JTL-Wawi 2
Beantwortet Fehler im Workflow Bei Speichern Lieferschein JTL-Workflows - Fehler und Bugs 1
Neu Workflow = Lieferstatus Lieferschein erstellt = Automail User helfen Usern 2
Neu Workflow - Einkaufsliste bestücken User helfen Usern - Fragen zu JTL-Wawi 2
Workflow Aufträge Versandart JTL-Wawi 1.8 0
Neu Fällige Abos unter WAWI 1.6. mittels Workflow automatisiert ausliefern Arbeitsabläufe in JTL-Wawi 7
Workflow Rechnung erstellen und Verschicken nach WMS Versandbestätigung JTL-Wawi 1.9 4

Ähnliche Themen