Neu Wiederkehrende Aufgaben mit rekursivem Workflow automatisieren {JTL-Automation} (Video)

Manuel Pietzsch

JTL-Wawi
Mitarbeiter
2. Januar 2012
2.870
1.040
Hückelhoven
Hi Freunde,

hier erkläre ich wie man einen Workflow baut, der regelmäßig zur gleichen Zeit ausgeführt wird.


Und hier die verwendeten Inhalte:

Erweiterte Eigenschaft "BewegungenHeute":


1615285210629.png

{% capture query -%}
DECLARE @kKunde AS INT = {{ Vorgang.InterneKundennummer }};
SELECT SUM(Anzahl)
FROM
(
SELECT COUNT(*) AS Anzahl FROM FulfillmentNetwork.ifReportLieferantenbestellungen(@kKunde)
UNION ALL
SELECT COUNT(*) AS Anzahl
FROM dbo.tRMRetoure
JOIN dbo.tSpracheUsed ON nStandard = 1
JOIN dbo.tRMRetourePos ON tRMRetoure.kRMRetoure = tRMRetourePos.kRMRetoure
JOIN FulfillmentNetwork.tFulfillerEinstellungen ON tRMRetoure.kKunde = tFulfillerEinstellungen.kKunde
LEFT JOIN dbo.tArtikel ON tRMRetourePos.kArtikel = tArtikel.kArtikel
LEFT JOIN dbo.tliefartikel ON tArtikel.kArtikel = tliefartikel.tArtikel_kArtikel
AND tFulfillerEinstellungen.kLieferant = tliefartikel.tLieferant_kLieferant
JOIN dbo.tRMGrundSprache ON tRMRetourePos.kRMGrund = tRMGrundSprache.kRMGrund
AND tSpracheUsed.kSprache = tRMGrundSprache.kSprache
LEFT JOIN dbo.tZustandSprache ON tRMRetourePos.kZustand = tZustandSprache.kZustand
AND tSpracheUsed.kSprache = tZustandSprache.kSprache
JOIN dbo.tBestellung ON tRMRetoure.kBestellung = tBestellung.kBestellung
WHERE DAY(tRMRetoure.dErstellt) = DAY(GETDATE())
AND MONTH(tRMRetoure.dErstellt) = MONTH(GETDATE())
AND YEAR(tRMRetoure.dErstellt) = YEAR(GETDATE())
AND tRMRetoure.kKunde = @kKunde
) AS U1
{% endcapture -%}
{{ query | DirectQueryScalar }}

Und hier der Code für die HTML Mail:

1615285468600.png

<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;border-color:#aaa;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:0px;overflow:hidden;word-break:normal;border-top-width:1px;border-bottom-width:1px;border-color:#aaa;color:#333;background-color:#fff;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:0px;overflow:hidden;word-break:normal;border-top-width:1px;border-bottom-width:1px;border-color:#aaa;color:#fff;background-color:#f38630;}
.tg .tg-0lax{text-align:left;vertical-align:top}
.tg .tg-dg7a{background-color:#FCFBE3;text-align:left;vertical-align:top}
.tg .tg-open{background-color:#ff8181;text-align:left;vertical-align:top}
.tg .tg-part{background-color:#fffe65;text-align:left;vertical-align:top}
</style>

<h3>Täglicher Wareneingangs- und Retourenbericht</h3>

<p>Wir senden Ihnen hiermit, die Tagesübersicht zu den gebuchten Wareneingängen und Retouren.</p>

{% capture query -%}
DECLARE @kKunde AS INT = {{ Vorgang.InterneKundennummer }};
SELECT cBezugsAuftragsNummer, kLieferantenBestellung FROM FulfillmentNetwork.ifReportLieferantenbestellungen(@kKunde) GROUP BY cBezugsAuftragsNummer, kLieferantenBestellung
{% endcapture -%}
{% assign Lieferantenbestellungen = query | DirectQuery %}
{% for item in Lieferantenbestellungen.Daten %}
<h5>Auftragsnummer: {{ item.cBezugsAuftragsNummer }}</h5>
<table class="tg">
{% capture query -%}
DECLARE @kKunde AS INT = {{ Vorgang.InterneKundennummer }};
SELECT kLieferantenBestellung,
cBezugsAuftragsNummer,
kLieferantenBestellungPos,
fMenge,
fMengeGeliefert,
fAnzahl,
cName,
cLieferantenArtNr,
cHinweis,
fMenge - fMengeGeliefert as fMengeOffen
FROM FulfillmentNetwork.ifReportLieferantenbestellungen(@kKunde) WHERE kLieferantenBestellung = {{item.kLieferantenBestellung}}
ORDER BY CASE WHEN fAnzahl > 0 THEN 3 WHEN fMengeGeliefert = 0 THEN 2 WHEN fMenge - fMengeGeliefert > 0 THEN 1 ELSE 0 END DESC
{% endcapture -%}
{% assign Positionen = query | DirectQuery -%}
<tr>
<th class="tg-0lax">ArtNr</th>
<th class="tg-0lax">Name</th>
<th class="tg-0lax">Bestellt</th>
<th class="tg-0lax">Insg. gebucht</th>
<th class="tg-0lax">Heute </th>
</tr>
{% assign tdClass = "tg-dg7a" -%}
{% for pos in Positionen.Daten -%}
<tr>
{% assign currentClass = tdClass %}
{% if pos.fMengeGeliefert == 0 -%}
{% assign currentClass = "tg-open" %}
{% elseif pos.fMengeOffen > 0 %}
{% assign currentClass = "tg-part" %}
{% endif -%}
<td class="{{currentClass}}">{{pos.cLieferantenArtNr}}</td>
<td class="{{currentClass}}">{{pos.cName}}</td>
<td class="{{currentClass}}">{{pos.fMenge | FormatNumber: 'N0', 'de-DE' }}</td>
<td class="{{currentClass}}">{{pos.fMengeGeliefert | FormatNumber: 'N0', 'de-DE'}}</td>
<td class="{{currentClass}}">{{pos.fAnzahl | FormatNumber: 'N0', 'de-DE'}}</td>
{% if tdClass == "tg-dg7a" -%}
{% assign tdClass = "tg-0lax" -%}
{% else -%}
{% assign tdClass = "tg-dg7a" -%}
{% endif -%}
</tr>
{% endfor -%}
</table>
{% endfor -%}

<table class="tg">
{% capture query -%}
DECLARE @kKunde AS INT = {{ Vorgang.InterneKundennummer }};
SELECT ROW_NUMBER() OVER (ORDER BY tRMRetoure.cRetoureNr) AS Nummer,
ISNULL(ISNULL(tliefartikel.cLiefArtNr, tArtikel.cArtNr), '') AS cArtikelnummer,
tRMRetoure.cRetoureNr AS cRetourennummer,
ISNULL(tBestellung.cInetBestellNr, tRMRetoure.cExternalNumber) AS cExterneAuftragsnummer,
tRMGrundSprache.cName AS cRueckgabegrund,
tZustandSprache.cName AS cArtikelzustand,
CASE WHEN LEN(ISNULL(tRMRetourePos.cGrundKommentar, '')) > 0
THEN tRMRetourePos.cGrundKommentar + CHAR(13) + CHAR(10)
ELSE ''
END
+ ISNULL(tRMRetourePos.cZustandKommentar, '') AS cKommentar,
tRMRetourePos.fAnzahl AS Menge
FROM dbo.tRMRetoure
JOIN dbo.tSpracheUsed ON nStandard = 1
JOIN dbo.tRMRetourePos ON tRMRetoure.kRMRetoure = tRMRetourePos.kRMRetoure
JOIN FulfillmentNetwork.tFulfillerEinstellungen ON tRMRetoure.kKunde = tFulfillerEinstellungen.kKunde
LEFT JOIN dbo.tArtikel ON tRMRetourePos.kArtikel = tArtikel.kArtikel
LEFT JOIN dbo.tliefartikel ON tArtikel.kArtikel = tliefartikel.tArtikel_kArtikel
AND tFulfillerEinstellungen.kLieferant = tliefartikel.tLieferant_kLieferant
JOIN dbo.tRMGrundSprache ON tRMRetourePos.kRMGrund = tRMGrundSprache.kRMGrund
AND tSpracheUsed.kSprache = tRMGrundSprache.kSprache
LEFT JOIN dbo.tZustandSprache ON tRMRetourePos.kZustand = tZustandSprache.kZustand
AND tSpracheUsed.kSprache = tZustandSprache.kSprache
JOIN dbo.tBestellung ON tRMRetoure.kBestellung = tBestellung.kBestellung
WHERE DAY(tRMRetoure.dErstellt) = DAY(GETDATE())
AND MONTH(tRMRetoure.dErstellt) = MONTH(GETDATE())
AND YEAR(tRMRetoure.dErstellt) = YEAR(GETDATE())
AND tRMRetoure.kKunde = @kKunde
{% endcapture -%}
{% assign Positionen = query | DirectQuery -%}
{% for pos in Positionen.Daten -%}
{% if pos.Nummer == 1 -%}
<tr>
<th class="tg-0lax">Artikelnummer</th>
<th class="tg-0lax">Menge</th>
<th class="tg-0lax">Retourennummer</th>
<th class="tg-0lax">Auftragsnummer</th>
<th class="tg-0lax">Rückgabegrund</th>
<th class="tg-0lax">Artikelzustand</th>
<th class="tg-0lax">Kommentar</th>
</tr>
{% endif -%}
<tr>
<td class="{{tg-part}}">{{pos.cArtikelnummer}}</td>
<td class="{{tg-part}}">{{pos.Menge | FormatNumber: 'N0', 'de-DE'}}</td>
<td class="{{tg-part}}">{{pos.cRetourennummer}}</td>
<td class="{{tg-part}}">{{pos.cExterneAuftragsnummer }}</td>
<td class="{{tg-part}}">{{pos.cRueckgabegrund }}</td>
<td class="{{tg-part}}">{{pos.cArtikelzustand }}</td>
<td class="{{tg-part}}">{{pos.cKommentar }}</td>
</tr>
{% endfor -%}
</table>

Gruß

Euer Manuel
 
  • Gefällt mir
Reaktionen: Shopküche.de

NewBuy

Sehr aktives Mitglied
29. August 2016
2.059
315
Erst einmal bei mir war der Ton OK

Dann kann man die Abfrage auch so ändern, dass eine eigener Bericht für die Bewegungshistorie geschickt wird, dieses ist ja nur FFN interessant. ;)
 

nieruf

Aktives Mitglied
10. September 2016
48
8
Ich hätte eine Frage dazu, das geht Quasi nur mit den Eigenen Felder? Wenn ich z.B. einen WF aufbauen möchte, der täglich prüft ob die Lieferantenbestellung bestätigt ist, wenn Nein -> Mail an Lieferanten / Wenn Ja dann keine Aktion. Wie müsste ich das aufbauen?
 

Manuel Pietzsch

JTL-Wawi
Mitarbeiter
2. Januar 2012
2.870
1.040
Hückelhoven
Ich hätte eine Frage dazu, das geht Quasi nur mit den Eigenen Felder? Wenn ich z.B. einen WF aufbauen möchte, der täglich prüft ob die Lieferantenbestellung bestätigt ist, wenn Nein -> Mail an Lieferanten / Wenn Ja dann keine Aktion. Wie müsste ich das aufbauen?

Hi,

das notier ich mir mal für ein weiteres Video.

Danke Gruß

Manuel
 
  • Gefällt mir
Reaktionen: nieruf

JuergenSaenger

Sehr aktives Mitglied
19. August 2013
462
59
Genthin
Hat jemand bereits ein Script, was über die erweiterten Eigenschaften alle (!) netto Umsätze zusammenrechnet und den Gesamtwert ausgibt?
  • Alle Plattformen (Amazon, JTL, LS-POS, Unicorn2 usw.)
  • Kein Berücksichtung von Rechnungskorrekturen, Rabatten o. ä.
 

Shopküche.de

Offizieller Servicepartner
SPBanner

z0mbi3

Aktives Mitglied
22. Oktober 2018
66
17
Nutzen teilweise externe Skript um uns eigene Reports zu bauen. Teilweise nutzen wir auch die .NET Workflow Test App mit leichten Anpassungen um Workflowereignisse extern auszulösen.
z.B. um einen Versandienstleister die Paketanzahl Voranzukündigen die abgeholt werden muss.

@Manuel Pietzsch Ihr müsstet unbedingt die JTL-Wawi.exe noch mit weiteren Parametern bestücken, das man, ohne ein Extra Programm schreiben zu müssen, gezielt Workflowereignisse für Kunden, Aufträge etc. auslösen kann. Unteranderem auch manuelle Workflows. Dann wäre die Wiederholung und die Zeitplanung über den Windows Aufgabenplaner möglich.
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Welche Bank ist 100 % kompatibel mit JTL Zahlungsmodul? Schnittstellen Import / Export 0
Automatische Lagerbuchung mit verschiedenen Barcodes für ein und dasselbe Produkt JTL-Wawi 1.9 1
Neu Shopify FE im Vergleich mit JTL Shop Allgemeine Fragen zu JTL-Shop 0
Neu Amazon Prime durch Verkäufer mit JTL-Wawi verknüpfen Amazon-Anbindung - Fehler und Bugs 0
Neu Problem mit einer VCS lite-Rechnung Amazon-Anbindung - Fehler und Bugs 0
Einen Artikel nur Teilweise gutschreiben, dabei mit Versandkosten verrechnen JTL-Wawi 1.7 0
Kundenkategorien ändern mit Ameise JTL-Wawi 1.9 3
Neu Gastkunde registriert sich bei zweiter Bestellung - und die Wawi bekommt es nicht mit! Shopware-Connector 0
Neu FEHLER mit JTL Shipping und DHL - Empfängerunterschrift wird nicht gebucht JTL-ShippingLabels - Fehler und Bugs 0
Beantwortet Bei "Paket hinzufügen" sofortiger Labeldruck mit neuer Sendungsnummer Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 0
Neu Benutzer Rechte - Versand Mitarbeiter soll Menge von Freipositionen mit der Lieferscheinerstellung ändern dürfen Arbeitsabläufe in JTL-Wawi 4
Chatbot mit JTL verwenden JTL-Wawi 1.9 3
Keine Verbindung Mit JTL Shop 5 obwohl sync PW und Sync Benutzer in php identisch mit Wawi Einrichtung JTL-Shop5 5
Neu Übernahme JTL Wawi mit Onlineshop und JTL-POS Starten mit JTL: Projektabwicklung & Migration 3
Neu Problem mit der Anleitung bei der Vergabe der Rechte. Installation / Updates von JTL-Shop 1
Rechnungen an ausländischen Lieferanten werden mit 19 % Mwst erstellt JTL-Wawi 1.9 5
Neu Probleme mit Klarna und PayPal Plugins für JTL-Shop 0
Neu ++ Ebay Artikel mit Menge 1 und versch. Variationen ++ Arbeitsabläufe in JTL-Wawi 0
Neu Einrichtung von Versandarten in JTL-Shop und Verknüpfung mit JTL-Wawi Installation / Updates von JTL-Shop 12
Neu Fehlermeldung: Dein Gerät ist nicht mit dieser Version kompatibel Einrichtung / Updates von JTL-POS 0
In Diskussion Übersetzungen mit DeepL JTL-Workflows - Ideen, Lob und Kritik 0
Neu SOFORT Überweisung Classic mit JTL Shop 5.4 - Kompatible? Plugins für JTL-Shop 0
Neu Nachlieferungen des Kunden mit neuem Auftrag automatisch versenden Arbeitsabläufe in JTL-Wawi 0
Neu Mollie mit 2 Monaten Guthabeneinbehalt bis zur Auszahlung Smalltalk 2
Neu Artikel erstellen mit einem Lagerplatz User helfen Usern - Fragen zu JTL-Wawi 3
Neu Track&Trace Abgleich funktioniert nicht mit Worker als Dienst? JTL-Track&Trace - Fehler und Bugs 0
Neu Trackingdaten nicht mit Advanced shipment tracking PRO plugin synchronisiert WooCommerce-Connector 3
Neu Retourenübersicht mit Seriennummern über Ameise "Eigene Exporte" erstellen JTL Ameise - Eigene Exporte 4
Neu Sprachauswahl mit Flaggen Shop 5.4 Nova Template Templates für JTL-Shop 10
Neu Ausliefern in WAWI mit Seriennummern JTL-Wawi - Fehler und Bugs 2
Neu Seit JTL Update verbindet sich MDE Gerät nicht mehr mit WMS-Mobile Server User helfen Usern - Fragen zu JTL-Wawi 1
Neu Eigenes Plugin erstellen (Versandkostenfrei mit Optionen) Plugins für JTL-Shop 1
Neu JTL Ameise-Import – Problem mit Datumsformat JTL-Ameise - Fehler und Bugs 2
Neu Tracking Daten werden erst mit LINK und dann gar nicht mehr überrtragen Shopware-Connector 0
Neu Lange Stücklisten mit der Ameise einspielen dauert lange. User helfen Usern - Fragen zu JTL-Wawi 2
Neu Artikelseite mit Variation, direktes zurück nicht möglich? Allgemeine Fragen zu JTL-Shop 0
Wawi auf Notebook mit 4k Display JTL-Wawi 1.9 4
Neu Bestellbestätigung aus JTL SHOP mit Lieferadresse Dienstleistung, Jobs und Ähnliches 0
Neu Preis mit Steuern zur Anzeige Amazon-Lister - Fehler und Bugs 2
In Diskussion SKU / EAN - Code Scan in JTL-WMS Mobile – Artikelpreis anzeigen mit Workflows JTL-Workflows - Ideen, Lob und Kritik 0
Neu Bilder Komplettabgleich mit 100'000 Bildern Onlineshop-Anbindung 0
Onlineshop Suchbegriffe Such-Schlagwörter mit Shopware 6 JTL-Wawi 1.9 0
Neu Mitarbeiter mit schlechten Kundenumgang Starten mit JTL: Projektabwicklung & Migration 9
Neu Falsche Preisübermittlung von Brutto/Netto Preisen mit JTL Connector zu Shopify Onlineshop-Anbindung 0
Neu Mehrere DHL Versenden 3.0 Instanzen mit unterschiedlichen Accounts möglich? JTL-ShippingLabels - Ideen, Lob und Kritik 3
Neu Einem Kunden eine Rechnung mit individuellem Betreff per E-Mail zusenden User helfen Usern - Fragen zu JTL-Wawi 2
Artikelzustand wird doppelt und mit doppeltem Suffix erzeugt JTL-Wawi 1.9 3
Neu Abgleich Probleme mit Woocommerce und Jtl-Conncetor WooCommerce-Connector 1
Neu Google Search Console: 5xx-Fehler für nicht indexierte Seiten mit URL-Parametern – Warum? Betrieb / Pflege von JTL-Shop 3
Neu Megamenü mit Bilder der eigenen Seiten Technische Fragen zu Plugins und Templates 2

Ähnliche Themen