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

Manuel Pietzsch

JTL-Wawi
Mitarbeiter
2. Januar 2012
2.895
1.074
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.111
321
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.895
1.074
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
69
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.
 

frankell

Sehr aktives Mitglied
9. September 2019
2.685
840
Flensburg
Wie im anderen Thread schon geschrieben:

Die Umbuchungen landen auch in den Warenlagereingangs- bzw. -ausgangstabllen, also tWarenLagerEingang und tWarenLagerAusgang. Ein Zustandsartikel kann als eigenständiger Artikel mit eigenem Lagerbestand geführt werden, wenn das Häkchen dafür bei den Einstellungen dieses Artikelzustands gesetzt ist. Der Zustandsartikel erhält dann eine eigene kArtikel, nach der Du wiederum in tWarenLagerAusgang filtern kannst und dann die Summe von fAnzahl ziehst.
 
  • Gefällt mir
Reaktionen: Manuel Pietzsch
Ähnliche Themen
Titel Forum Antworten Datum
Neu Biete: KI-gestützte Produktdatenoptimierung für JTL-Wawi (Zero-Touch, mit Faktencheck) Dienstleistung, Jobs und Ähnliches 2
Neu POS mit 1.8.12.4 Einrichtung / Updates von JTL-POS 1
Neu Ringscanner mit Akku zu verkaufen (für das WMS) Smalltalk 1
Neu Bondrucker mit TSE JTL-POS - Fragen zu Hardware 1
Neu Erfahrungen mit DHL Paket International Premium Tarife in der JTL-Shipping-Cloud ? JTL-ShippingLabels - Ideen, Lob und Kritik 1
REST API (eazybusiness): POST/PATCH /items/{id}/suppliers lehnt jeden Payload mit HTTP 400 ab JTL-Wawi 2.0 2
[PowerShell] USt-IdNr. (VAT-ID) Massenprüfung gegen VIES – mit Auto-Retry, HTML-Report, Mailversand JTL-Wawi 1.11 3
Mehrere Probleme mit Update auf 2.0.5 JTL-Wawi 2.0 6
Neu onpage SEO auf SW - Was ist mit der Wawi? Shopware-Connector 1
Neu Shipping 2.0 ist ein Grund für kleine Shops JTL zu verlassen bzw. gar nicht erst mit JTL anzufangen JTL-ShippingLabels - Ideen, Lob und Kritik 24
Neu Stücklistenartikel mit Differenzbesteuerung + 19 % USt. – Komponenten getrennt auf Rechnung ausweisen? User helfen Usern - Fragen zu JTL-Wawi 3
Neu Shop rechnet Sa+So bei Lieferzeit mit ein Betrieb / Pflege von JTL-Shop 0
Neu Amazon Rechnungen aus v1.9x können nicht gedruckt gemailt oder sonnst noch was mit gemacht werden. Amazon-Anbindung - Fehler und Bugs 2
Weiter gehts....Kein Anlegen von Artikel mit Fotos mehr möglich, seit Update auf 2.06 JTL-Wawi 2.0 14
Mehrere Probleme mit JTL-Wawi und JTL-POS – hängen diese zusammen? JTL-Wawi 2.0 1
Neu Fehler Datenbank auf neuem Server mit Wawi 2.0.6 JTL-Wawi - Fehler und Bugs 5
Neu Stripe plugin mit JTL SHOP Error 500 Plugins für JTL-Shop 2
JTL-Wawi 2.0.6.0 sendet fehlerhafte multipart/form-data-Requests – ModSecurity blockt Datenabgleich mit 403 (scheinbar hosterabhängig) JTL-Wawi 2.0 20
Neu Variationen (Deutsch) mit Ameise aktualisieren JTL-Ameise - Ideen, Lob und Kritik 1
Neu Preise im Shop mit 4 Stellen hintern dem Komma Allgemeine Fragen zu JTL-Shop 5
Neu Erfahrungen mit Amazon Pay Smalltalk 0
Neu Amazon Artikel ist mit Vaterartikel verknüpft Amazon-Anbindung - Fehler und Bugs 1
Verbesserungsvorschlag: JTL-POS – Artikel mit Preisabfrage und vollständiger Wawi-Statistik JTL-Wawi 2.0 4
Neu Google Pay und Konfiguration mit Freiposition stürzt ab *Hotfix* Technische Fragen zu Plugins und Templates 0
Wawi 1.11.11 Shopabgleich mit 5.72 JTL-Wawi 1.11 17
Neu Sicherheitslücke, geprüft mit EcomSec Allgemeine Fragen zu JTL-Shop 3
Neu POS Server crashed mit Wawi Version 1.11.10 JTL-POS - Fehler und Bugs 0
Neu Plugin trotz Hinweis Kompatibel mit JTL-Shop bis 5.6.* auch unter 5.7.2 nutzen Plugins für JTL-Shop 2
Webinar am 04.08. eBay Live: So startest du mit Live Commerce Messen, Stammtische und interessante Events 0
Neu Mail mit Plugin zum testen der Sicherheitslücke echt? Allgemeine Fragen zu JTL-Shop 47
Neu Nettopreis mit rabbatt Allgemeine Fragen zu JTL-Shop 1
Neu Canonical-Tag bei Merkmalwert-URLs mit Parameter "m" Betrieb / Pflege von JTL-Shop 11
Neu Übertragung an AMAZON (versendet) - Probleme mit Großbriefen JTL-ShippingLabels - Fehler und Bugs 1
Neu Gesucht: JTL-Systempartner/Freelancer mit Erfahrung in Personalisierungs-/Gravur-Fulfillment Dienstleistung, Jobs und Ähnliches 2
Neu Wird irgendwo in der Datenbank geloggt welcher WMS-Mobile Benutzer mit dem MDE-Gerät einen Auftrag, bzw. Pickliste gepickt hat? User helfen Usern - Fragen zu JTL-Wawi 1
Rechnung mit CC verschicken Vorlagen 2.0 JTL-Wawi 1.11 12
Neu JTL Shop Plugin - BD Automatisierter Widerruf (Von Händler für Händler - Schluss mit Mail-Chaos & Spam-Sorgen!) Plugins für JTL-Shop 0
Neu Versanddatenimport in Packtisch nicht automatisch (DPD Österreich mit WEB.omat) JTL-WMS / JTL-Packtisch+ - Fehler und Bugs 2
Neu Anzeige Alle Artikel mit Kategorieanzeige linke Menüleiste Allgemeine Fragen zu JTL-Shop 9
Neu GLS Privatlabels mit Packtisch verknüpfen JTL-ShippingLabels - Ideen, Lob und Kritik 0
Neu oAuth Credentials Login mit JTL .. WO? User helfen Usern 1
Neu kostenlos: DHL Sendungsverfolgung für JTL-Wawi – Web-Dashboard mit Frühwarnsystem Schnittstellen Import / Export 0
Neu Konfigurationsgruppe mit Auslesen Arbeitsabläufe in JTL-Wawi 1
Neu Ist es ohne Probleme möglich Cloudflare in der Free Version mit JTL zu nutzen? Allgemeine Fragen zu JTL-Shop 7
Neu Nach Wawi Update Probleme mit Rechnungsdrucker JTL-POS - Fehler und Bugs 4
Neu Mariadb 12 mit 5.7.1 Allgemeine Fragen zu JTL-Shop 0
Neu Pickliste mit maximaler SKU-Anzahl – gibt es eine Lösung? Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 4
Neu Mit Fehlern beendet - Object reference not set to an instance of an object. JTL-Track&Trace - Fehler und Bugs 2
ändern von Servernamen nach Neuinstallation von SQL und Verbindung mit neuem Server in der Wawi JTL-Wawi 2.0 2
Probleme mit Artikelansicht oder Verkauf, etc. JTL-Wawi 2.0 0

Ähnliche Themen