Workflow für Benachrichtigung bei Stammkunden

TobiasN82

Aktives Mitglied
25. Januar 2019
42
3
Hi,
folgendes Problem:
Wir verkaufen auf Amazon-Business an B2B Kunden. Dort steht als Rechnungsempfänger Amazon und die Lieferadresse ist immer die unseres Endkunden.
Also wir haben eine Kundennummer K1000 (Amazon) und unter der sind sehr viele Lieferanschriften der eigentlichen Kunden.

Leider bekomme ich es nicht hin mir einen Workflow zu bauen, der die Lieferadresse mit der von früheren Bestellungen vergleicht um mir dann eine Nachricht schicken zu lassen.
Sobald der Workflow bei einer neuen Bestellung die Lieferadresse bei einer alten Bestellung wieder findet, will ich eine Nachricht bekommen.
Bei einer Erstbestellung möchte ich das nicht.

Was muss ich einstellen?

Ich freue mich auf eure Kommentare und Lösungsvorschläge. Mit ChatGPT bin ich komplett am verzweifeln.

VG
Tobias
 

wawi-dl

Sehr aktives Mitglied
29. April 2008
6.593
782
Auf welche Weise hast du es denn versucht per Workflow?

RA ist also immer gleich, geprüft werden muss aktuelle LA mit allen LA's im Kundenstamm?
Was passiert, wenn LA's im Kundenstamm bereinigt werden, sprich Dubletten gelöscht werden wenn jemand 2x bestellt?

Das Konstrukt / Datenmodell ist mir nicht ganz klar und mit Boardmittel eher schwer zu lösen, da muss man SQL Abfragen bauen.
 

TobiasN82

Aktives Mitglied
25. Januar 2019
42
3
Aktuell habe ich unter Aufträge -> Auftrag -> Erstellt -> Bedingungen -> Erweiterte Eigenschaften -> Größer als 0

SQL:
{% capture query %}
SELECT COUNT(*)
FROM dbo.tAuftrag a
JOIN dbo.tLieferadresse la   ON la.kLieferAdresse = a.kLieferAdresse
JOIN dbo.tAuftrag a0         ON a0.kAuftrag = {{ Vorgang.Stammdaten.InterneAuftragsnummer }}
JOIN dbo.tLieferadresse la0  ON la0.kLieferAdresse = a0.kLieferAdresse
WHERE a.kAuftrag <> a0.kAuftrag
  AND (
       a.dErstellt < a0.dErstellt
       OR (a.dErstellt = a0.dErstellt AND a.kAuftrag < a0.kAuftrag)
      )
  AND REPLACE(UPPER(LTRIM(RTRIM(la.cPLZ)))    , ' ', '') = REPLACE(UPPER(LTRIM(RTRIM(la0.cPLZ)))    , ' ', '')
  AND REPLACE(UPPER(LTRIM(RTRIM(la.cOrt)))    , ' ', '') = REPLACE(UPPER(LTRIM(RTRIM(la0.cOrt)))    , ' ', '')
  AND REPLACE(UPPER(LTRIM(RTRIM(la.cStrasse))), ' ', '') = REPLACE(UPPER(LTRIM(RTRIM(la0.cStrasse))), ' ', '')
{% endcapture %}

{% assign cnt = query | DirectQueryScalar | plus: 0 %}
{% if cnt > 0 %}{{ cnt }}{% endif %}

UND ZUSÄTZLICH
Auftrag\Stammdaten\Kunde\Kundennummer | Gleich | "Kundennummer des Amazon B2B Kunden"


Aktuell bekomme ich bei jeder Bestellung des Kunden eine Nachricht. Und bei der Simulation die folgende Meldung.
 

Anhänge

  • Simulation.png
    Simulation.png
    30,8 KB · Aufrufe: 5

TobiasN82

Aktives Mitglied
25. Januar 2019
42
3
Evtl. habe ich jetzt was passendes.

SQL:
{% capture query %}
SELECT CASE WHEN EXISTS (
  SELECT 1
  FROM (
    SELECT b.kBestellung,
           MIN(b.dErstellt) AS dErstellt,
           REPLACE(UPPER(LTRIM(RTRIM(la.cPLZ)))    ,' ','') AS p,
           REPLACE(UPPER(LTRIM(RTRIM(la.cOrt)))    ,' ','') AS o,
           REPLACE(UPPER(LTRIM(RTRIM(la.cStrasse))),' ','') AS s
    FROM dbo.tBestellung b
    JOIN dbo.tAdresse la ON la.kAdresse = b.kLieferadresse
    GROUP BY b.kBestellung,
             REPLACE(UPPER(LTRIM(RTRIM(la.cPLZ)))    ,' ',''),
             REPLACE(UPPER(LTRIM(RTRIM(la.cOrt)))    ,' ',''),
             REPLACE(UPPER(LTRIM(RTRIM(la.cStrasse))),' ','')
  ) B
  JOIN (
    SELECT b0.kBestellung,
           MIN(b0.dErstellt) AS dErstellt,
           REPLACE(UPPER(LTRIM(RTRIM(la0.cPLZ)))    ,' ','') AS p,
           REPLACE(UPPER(LTRIM(RTRIM(la0.cOrt)))    ,' ','') AS o,
           REPLACE(UPPER(LTRIM(RTRIM(la0.cStrasse))),' ','') AS s
    FROM dbo.tBestellung b0
    JOIN dbo.tAdresse la0 ON la0.kAdresse = b0.kLieferadresse
    WHERE b0.kBestellung = {{ Vorgang.Stammdaten.InterneAuftragsnummer }}
    GROUP BY b0.kBestellung,
             REPLACE(UPPER(LTRIM(RTRIM(la0.cPLZ)))    ,' ',''),
             REPLACE(UPPER(LTRIM(RTRIM(la0.cOrt)))    ,' ',''),
             REPLACE(UPPER(LTRIM(RTRIM(la0.cStrasse))),' ','')
  ) B0
    ON B.p=B0.p AND B.o=B0.o AND B.s=B0.s
  WHERE (B.dErstellt < B0.dErstellt
     OR (B.dErstellt = B0.dErstellt AND B.kBestellung < B0.kBestellung))
) THEN 1 ELSE NULL END
{% endcapture %}
{{ query | DirectQueryScalar }}

Ist nicht leer -> gibt mir die passende Ausgabe. Ich teste es mal damit
 

kelvin.

Sehr aktives Mitglied
15. Februar 2023
166
65
Frankfurt
Mit ChatGPT bin ich komplett am verzweifeln.
Es gibt ein CustomGPT. Ich selber habe es nicht getestet, aber vielleicht hilft es: https://forum.jtl-software.de/threa...id-erstellen-mit-chatgpt.238902/#post-1300386

Aktuell bekomme ich bei jeder Bestellung des Kunden eine Nachricht. Und bei der Simulation die folgende Meldung.
Bei der Meldung hast du eine Fehlermeldung. Trotz des Fehlers, trifft deine Bedingung zu. Deswegen bekommst du bei jeder Bestellung eine Nachricht. Der Fehler ist, dass die Tabellen dbo.tAuftrag und dbo.tLieferadresse gar nicht existieren.

Nein, weil kLieferadresse kein Schlüssel ist für dbo.tAdresse, sondern eins für dbo.tlieferadresse oder DEPRECATED.vLieferadresse.

Bei der Tabelle dbo.tAdresse solltest du noch bestimmen, dass du nur die Lieferadresse haben möchstest. Derzeit bekommst du die Rechnungs- und Lieferadresse.
Zu dem solltest du stornierte Aufträge ausschließen. Es sei denn es ist gewollt.
Und zudem solltest du dir überlegen, ob ein Kunde ein Stammkunde ist, wenn ein Kunde zwei Bestellungen macht und beide noch nicht ausgeliefert worden sind.
PLZ, Ort und Straße würde mir nicht aussreichen. Es kann nämlich sein, dass es mehrere Unternehmen gibt im gleichen Standort.

Die Herangehensweise ist kompliziert gedacht. Ich würde nur die Anzahl der Aufträge, die nicht storniert und ausgeliefert sind zählen, dessen Firmenname, PLZ, Ort, Straße gleich sind, zählen. Und wenn es größer 1 ist, ist der Kunde ein Stammkunde. Vorrausgesetzt ist, dass der Fimenname mit übergeben wird bei der Amazon Bestellung. Ich habe bei Amazon keine Ahnung, welche Daten übergeben werden.

REPLACE(UPPER(LTRIM(RTRIM(la.cPLZ))) ,' ',''),
Statt LTRIM und RTRIM zu nutzen, kannst du auch nur TRIM nutzen: https://learn.microsoft.com/de-de/sql/t-sql/functions/trim-transact-sql?view=sql-server-ver17
 

TobiasN82

Aktives Mitglied
25. Januar 2019
42
3
Vielen Dank für die Unterstützung, aber ich komme einfach nicht weiter. Gefühlt versucht chatgpt oder das CustomGPT (Danke für den Hinweis hab ich mir gleich gespeichert) immer noch mehr zu vereinfachen und die Adressen zu Verallgemeinern, aber nie mit einem passenden Ergebnis.
Wenn ich in der Simulation einen Auftrag wähle der eindeutig die gleiche Straße, PLZ und Ort hat (ohne irgendwelche Abweichungen) findet es die zweite Bestellung nicht.
Ich glaube es ist ein grundlegender Fehler beim Suchen in der vllt. falschen Tabelle oder ähnliches und weniger am Code zum Vergleichen der beiden Adressen.

Das ist mein aktueller Stand: (Ich habe bewusst nicht den Firmennamen mit einbezogen, weil ich da häufig das Problem habe, dass Amazon den nicht an JTL übermittelt. s. https://forum.jtl-software.de/threa...radresse-firma-nicht-vollstaendig-fbm.223765/)

SQL:
{% capture q %}
SELECT CASE WHEN (
  SELECT COUNT(*)
  FROM dbo.tBestellung b
  JOIN dbo.tLieferAdresse la ON la.kLieferAdresse = b.kLieferAdresse
  JOIN dbo.tBestellung b0     ON b0.kBestellung     = {{ Vorgang.Stammdaten.InterneAuftragsnummer }}
  JOIN dbo.tLieferAdresse la0 ON la0.kLieferAdresse = b0.kLieferAdresse
  WHERE b.nStorno = 0
    -- optional streng: nur bereits ausgelieferte Aufträge zählen
    -- AND EXISTS (SELECT 1 FROM dbo.tLieferschein ls WHERE ls.tBestellung_kBestellung = b.kBestellung AND ls.nStorno = 0)

    AND REPLACE(UPPER(TRIM(la.cPLZ))    ,' ','') = REPLACE(UPPER(TRIM(la0.cPLZ))    ,' ','')
    AND REPLACE(UPPER(TRIM(la.cOrt))    ,' ','') = REPLACE(UPPER(TRIM(la0.cOrt))    ,' ','')
    AND REPLACE(UPPER(TRIM(la.cStrasse)),' ','') = REPLACE(UPPER(TRIM(la0.cStrasse)),' ','')
    AND b.kBestellung <> b0.kBestellung   -- aktuellen Auftrag ausschließen
) > 0 THEN 1 ELSE 0 END
{% endcapture %}
{% assign cnt = q | DirectQueryScalar | ToDouble %}
{% if cnt > 0 %}true{% else %}false{% endif %}
 

frankell

Sehr aktives Mitglied
9. September 2019
2.454
745
Flensburg
Hallo @TobiasN82,

eigentlich widerstrebt es mir, das auszubügeln, was eine KI so von sich gibt. Und ich rate auch keinesfalls dazu zu glauben, dass man weiß, was man tut, nur weil man weiß, wie man einer KI eine Frage stellt. Aber mal so eben aus der Hüfte geschossen, könnte man es rein codetechnisch so machen:

SQL:
WITH CTE AS(
    SELECT
        REPLACE(UPPER(TRIM(cPLZ)),' ','') + '|' + REPLACE(UPPER(TRIM(cStrasse)),' ','') + '|' + REPLACE(UPPER(TRIM(cOrt)),' ','') AS 'Auftragsadresse'
    FROM
        Verkauf.tAuftragAdresse
    WHERE
        kAuftrag = {{ Vorgang.Stammdaten.InterneAuftragsnummer }}
        AND nTyp = 0
)
SELECT
    CASE WHEN EXISTS (
        SELECT
            1
        FROM
            Verkauf.tAuftragAdresse
        WHERE
            kAuftrag <> {{ Vorgang.Stammdaten.InterneAuftragsnummer }}
            AND nTyp = 0
            AND (REPLACE(UPPER(TRIM(cPLZ)),' ','') + '|' + REPLACE(UPPER(TRIM(cStrasse)),' ','') + '|' + REPLACE(UPPER(TRIM(cOrt)),' ','')) = (
                SELECT
                    Auftragsadresse
                FROM
                    CTE
            )
    )
    THEN 1
    ELSE 0
    END;

Gibt natürlich auch andere Wege.
 

TobiasN82

Aktives Mitglied
25. Januar 2019
42
3
Hallo @TobiasN82,

eigentlich widerstrebt es mir, das auszubügeln, was eine KI so von sich gibt. Und ich rate auch keinesfalls dazu zu glauben, dass man weiß, was man tut, nur weil man weiß, wie man einer KI eine Frage stellt. Aber mal so eben aus der Hüfte geschossen, könnte man es rein codetechnisch so machen:

SQL:
WITH CTE AS(
    SELECT
        REPLACE(UPPER(TRIM(cPLZ)),' ','') + '|' + REPLACE(UPPER(TRIM(cStrasse)),' ','') + '|' + REPLACE(UPPER(TRIM(cOrt)),' ','') AS 'Auftragsadresse'
    FROM
        Verkauf.tAuftragAdresse
    WHERE
        kAuftrag = {{ Vorgang.Stammdaten.InterneAuftragsnummer }}
        AND nTyp = 0
)
SELECT
    CASE WHEN EXISTS (
        SELECT
            1
        FROM
            Verkauf.tAuftragAdresse
        WHERE
            kAuftrag <> {{ Vorgang.Stammdaten.InterneAuftragsnummer }}
            AND nTyp = 0
            AND (REPLACE(UPPER(TRIM(cPLZ)),' ','') + '|' + REPLACE(UPPER(TRIM(cStrasse)),' ','') + '|' + REPLACE(UPPER(TRIM(cOrt)),' ','')) = (
                SELECT
                    Auftragsadresse
                FROM
                    CTE
            )
    )
    THEN 1
    ELSE 0
    END;

Gibt natürlich auch andere Wege.
Vielen Dank für deine Hilfe.
Ich habe das so umschreiben lassen, damit ich es in JTL in Erweiterte Eigenschaften eingeben kann:

SQL:
{% capture q %}
WITH CTE AS (
    SELECT
        REPLACE(UPPER(TRIM(cPLZ)),' ','') + '|' +
        REPLACE(UPPER(TRIM(cStrasse)),' ','') + '|' +
        REPLACE(UPPER(TRIM(cOrt)),' ','') AS Auftragsadresse
    FROM Verkauf.tAuftragAdresse
    WHERE kAuftrag = {{ Vorgang.Stammdaten.InterneAuftragsnummer }}
      AND nTyp = 0   -- 0 = Lieferadresse
)
SELECT CASE WHEN EXISTS (
    SELECT 1
    FROM Verkauf.tAuftragAdresse
    WHERE kAuftrag <> {{ Vorgang.Stammdaten.InterneAuftragsnummer }}
      AND nTyp = 0
      AND (
        REPLACE(UPPER(TRIM(cPLZ)),' ','') + '|' +
        REPLACE(UPPER(TRIM(cStrasse)),' ','') + '|' +
        REPLACE(UPPER(TRIM(cOrt)),' ','')
      ) = (SELECT Auftragsadresse FROM CTE)
) THEN 1 ELSE 0 END
{% endcapture %}

{% assign hit = q | DirectQueryScalar | ToDouble %}
{% if hit > 0 %}true{% else %}false{% endif %}

Leider kommt jetzt folgender Fehler:
Liquid error: Das Objekt mit dem Typ "System.Int32" kann nicht in den Typ "System.String" konvertiert werden.
Und ich komme schon wieder nicht weiter =(
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Retouren Variablen in Workflow für Rechnungskorrektur Wert & Korrekturbetrag JTL-Workflows - Ideen, Lob und Kritik 0
Seit Update auf 1.11.4 Workflow für Kartonauswahl gibt error JTL Das Objekt mit Nullwert muss einen Wert haben. BrowsePk: 152325 WorkflowAktionId: 155 JTL-Wawi 1.11 1
In Diskussion Workflow für voraussichtlichen Liefertag erstellen JTL-Workflows - Ideen, Lob und Kritik 6
Neu Workflow für voraussichtlichen Liefertag erstellen User helfen Usern - Fragen zu JTL-Wawi 1
Neu Workflow Abweichung Preise > Emailreport JTL-Workflows - Ideen, Lob und Kritik 0
Neu Workflow Auslöser: Artikel gelöscht User helfen Usern - Fragen zu JTL-Wawi 0
Neu Mahnwesen per Workflow automatisieren User helfen Usern 0
Neu Ebay-Artikelimport triggert Workflow "Artikel geändert" nicht JTL-Wawi - Fehler und Bugs 0
Neu Workflow Überfällige Mahnung an Inkassoanwalt übergeben JTL-Workflows - Ideen, Lob und Kritik 0
JTL Workflow - Email addresse von Rechnungsadresse JTL-Wawi 1.9 5
Neu JTL REST API einen Workflow ausführen und benutzerspezifischen Drucker ansteuern User helfen Usern 0
Neu JTL-Wawi 1.11.5: Sequenzieller Kundenexport mit Workflow und SQL-Queue Schnittstellen Import / Export 2
Workflow Druckvorlage personalisierte Artikel JTL-Wawi 1.11 2
Seit dem Update auf JTL Wawi 1.11.4 funktioniert der Workflow "Datei Schreiben" nicht JTL-Wawi 1.11 1
Workflow - Werte setzen JTL-Wawi 1.11 0
Neu Workflow Artkel bereits bestellt Arbeitsabläufe in JTL-Wawi 1
Neu Workflow bei Zahlungseingang User helfen Usern - Fragen zu JTL-Wawi 1
Neu Workflow LandISO User helfen Usern - Fragen zu JTL-Wawi 3
Workflow zum abrufen der Upload-Datei aus dem Shop-Auftrag JTL-Wawi 1.11 0
Beantwortet Workflow Datei schreiben Dateiname per Dotliquid Fehler Illegales Zeichen im Pfad. callerMemberName : WriteFile JTL-Workflows - Fehler und Bugs 1
Neu Workflow zum automatischen Stornieren einer Rechnung nach Versand User helfen Usern - Fragen zu JTL-Wawi 4
Neu Artikel KinderArtikel anlegen: Workflow "Artikel erstellt und Artikel geändert" werden NUR beim Vaterartikel gestartet User helfen Usern - Fragen zu JTL-Wawi 0
Stornobeleg als Workflow-Trigger JTL-Wawi 1.10 6
Issue angelegt [WAWI-86213] Kartonagen nicht mehr über Workflow auswählbar nach Update auf 1.11.3 JTL-Workflows - Ideen, Lob und Kritik 1
Lieferantenbestellung per Workflow bestätigen JTL-Wawi 1.11 0
In Diskussion Workflow: Straße enthält Postfiliale oder Paketshop JTL-Workflows - Fehler und Bugs 3
Neu Workflow 4 Wochen vor vorraus. Lieferdatum Arbeitsabläufe in JTL-Wawi 1
Neu Suche DirectQuery für Kundenkommentar (Rechnung) & Hinweis (Lieferschein) Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Neu Coupon für Oberkategorie aktivieren User helfen Usern - Fragen zu JTL-Wawi 0
Neu vollständige Liste/Definition aller Importfelder für die JTL-Ameise JTL-Ameise - Fehler und Bugs 7
Neu Mehrere Label für GLS Retoure nicht möglich? JTL-ShippingLabels - Fehler und Bugs 0
Beantwortet Downloadfunktion für pdf dateien Allgemeine Fragen zu JTL-Shop 10
Neu Im- und Export-Vorlage für eBay Bestandsabgleich JTL-Ameise - Ideen, Lob und Kritik 0
Neu Neues Plugin: Sauberes Meta-Tracking für JTL-Shop 5 (Pixel + CAPI + Consent) Plugins für JTL-Shop 0
Neu 📢 Plugin "Kreditlimit Plugin für JTL-Shop 5 " von CIN GmbH Plugins für JTL-Shop 0
Zweiter Shop an gleichem Mandanten nur für USA JTL-Wawi 1.11 1
Neu Suche Servicepartner für SQL-Abfrage Dienstleistung, Jobs und Ähnliches 2
Neu Bestimmte 2 Artikel im Warenkorb sorgen für falsche/geringere Versandkosten JTL-Shop - Fehler und Bugs 0
Übersicht für das Lager JTL-Wawi 1.11 1
Hersteller für Verkaufskanal mappen geht nicht JTL-Wawi 1.11 0
Abweichende Attributwerte für POS-Kasse via Ameise importieren JTL-Wawi 1.11 5
Neu eBay Webinar: Dein Business ist bereit für die Weltbühne? News, Events und Umfragen 0
Neu Es werden nicht die gesamter Menge einer Bestellung für die Produktion übernommen; die Bestellung bleibt teilgeliefert. JTL-Plan&Produce - Fehler und Bugs 0
Neu Smarty für "im Zulauf" und "auf Einkaufsliste"? Allgemeine Fragen zu JTL-Shop 7
Neu Betatester gesucht – Hood-Schnittstelle für JTL-Shop 5 Plugins für JTL-Shop 3
Neu askJan | Neuer KI-Assistent für JTL-Wawi - schnelle, effiziente und transparente KI-Datenanalyse - ohne SQL! Dienstleistung, Jobs und Ähnliches 34
Neu FHX One für JTL - Analytics, Monitoring, KI-Texte, Helpdesk uvm. (Otto, Amazon, Shopify, eBay) Dienstleistung, Jobs und Ähnliches 1
Webinar: Verkaufe über die Landesgrenzen hinaus – ist dein Business bereit für die Weltbühne? Messen, Stammtische und interessante Events 0
Neu Platzhalter für Bestellnummer Allgemeine Fragen zu JTL-Shop 3
Neu Für jeden Artikel Bild1 löschen mit der Ameise JTL-Ameise - Ideen, Lob und Kritik 3

Ähnliche Themen