Workflow für Benachrichtigung bei Stammkunden

TobiasN82

Aktives Mitglied
25. Januar 2019
47
5
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.758
825
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
47
5
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
47
5
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
168
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
47
5
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.685
840
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
47
5
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
In Diskussion Workflow für Erinnerungen an bevorstehende Lieferungen JTL-Workflows - Ideen, Lob und Kritik 0
Neu JTL-Shop 5.5 – „Rechnung nicht beilegen“ per Workflow anhand der Auftragsposition erkennen User helfen Usern - Fragen zu JTL-Wawi 0
In Diskussion Kundengruppe nach Umsatz (SQL in Workflow) JTL-Workflows - Ideen, Lob und Kritik 5
In Diskussion Workflow bei fehlerhaften Bankabgleich JTL-Workflows - Ideen, Lob und Kritik 4
Neu Lagerkommentar 1 per Workflow füllen User helfen Usern - Fragen zu JTL-Wawi 6
Neu Suche Workflow: Erstbestellung Shop auf Rechnung -> Auftrag Zurückhalten JTL-Wawi - Ideen, Lob und Kritik 1
1.11.7 Workflow versendet soll Rechnung 1x drucken, druckt aber 2x JTL-Wawi 1.11 1
Neu Plugin: Infinite Scroll / „Mehr laden“ für JTL-Shop 5 – einmalige Lizenz, kein Abo Plugins für JTL-Shop 0
Exportvorlage ZUGFeRD für Deutsche Bahn JTL-Wawi 1.11 1
Neu System für Ebay Artikelmerkmale - warum ist das so wichtig? User helfen Usern - Fragen zu JTL-Wawi 0
Neu Kapazitäten für anstehenden Auftragsspitzen Dienstleistung, Jobs und Ähnliches 1
Neu Ebay.com: Mehrfaches Dropdown-Menü für den Artikelzustand eBay-Anbindung - Fehler und Bugs 0
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
Wawi nur für ebay JTL-Wawi 2.0 2
Neu Exportvorlage für Shopify Schnittstellen Import / Export 1
Versandmail für Kaufland abstellen kaufland.de - Anbindung (SCX) 5
Neu 💚 Plugin: DZM Bonus Plus - das Treueprogramm für deinen JTL-Shop Plugins für JTL-Shop 8
Neu Stücklisten auf Vorlagen für Picklisten formatieren User helfen Usern - Fragen zu JTL-Wawi 0
Neu 🔥 𝐍𝐮𝐫 𝟓× verfügbar 𝟓𝟎% 𝐑𝐚𝐛𝐚𝐭𝐭 auf dein Besucherticket für die kommende JTL-Connect am 02.10.2026 in Köln Dienstleistung, Jobs und Ähnliches 0
Neu 💚 Plugin: DZM Agentic Plus - dein Shop wird für KI-Agenten lesbar und abfragbar Plugins für JTL-Shop 0
Neu Abgleiche für zweiten Mandanten bei Worker-Neustart deaktiviert JTL-Wawi - Fehler und Bugs 0
Neu Eigenen JTL-SCX-Marktplatzkanal für Multi-Vendor-Marktplatz erstellen – Erfahrungen gesucht Einrichtung und Installation von JTL-eazyAuction 3
Neu PPWR für Importeure aus dem Nicht-EU-Ausland Business Jungle 2
Neu 🚨 Sicherheitswarnung für JTL-Shop-Betreiber: Manipulation des Checkout-Prozesses durch externes JavaScript (Magecart- / Payment-Skimmer) Betrieb / Pflege von JTL-Shop 11
Neu Abschaltung Bewertungserinnerung für spezifische Kunden Allgemeine Fragen zu JTL-Shop 0
Neu Suche 10–15 JTL-Shops für kostenlose JTL-Shop-Analyse (verschiedene Branchen) Dienstleistung, Jobs und Ähnliches 0
Neu Wir suchen Mitstreiter für ein gemeinsames Konfigurator-Projekt Dienstleistung, Jobs und Ähnliches 0
Neu Wir suchen Mitstreiter für ein gemeinsames Konfigurator-Projekt User helfen Usern - Fragen zu JTL-Wawi 7
Neu Wie stelle ich Retouren in JTL für DPD ein? JTL-ShippingLabels - Ideen, Lob und Kritik 1
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
Wroker macht keinen abgleich für Kaufland JTL-Wawi 2.0 8
Neu Beta-Tester gesucht: Produktdaten aus Artikelfotos schneller für JTL/CSV vorbereiten Dienstleistung, Jobs und Ähnliches 0
Neu Kundengruppeneinstellungen für Mindestabnahme und Abnahmeintervall löschen User helfen Usern - Fragen zu JTL-Wawi 1
Neu Installationsdatei für JTL‑Wawi 1.9.6.5 Installation von JTL-Wawi 2
Wie lange braucht ihr aktuell für die Anlage eines neuen Artikels? JTL-Wawi App 3
Neu kostenlos: DHL Sendungsverfolgung für JTL-Wawi – Web-Dashboard mit Frühwarnsystem Schnittstellen Import / Export 0
In Diskussion Tool für Abrechnung von Fulfillment Dienstleistungen Arbeitsabläufe im Fulfillment Network 0
Neu Widerrufsbutton für JTL-Shop 4 Allgemeine Fragen zu JTL-Shop 17
Neu Keine Labels für Warenpost international über Packtisch JTL-ShippingLabels - Fehler und Bugs 8
Neu Laut Backend Shop Update für Shop 5.71 - Download nicht zu finden? Betrieb / Pflege von JTL-Shop 3
Neu Meta Shop seit September 2025: JTL-Lösung für neue Checkout-URL gesucht Allgemeine Fragen zu JTL-Shop 0
Angebliche externe Aufträge "für Rechnungserstellung freigeben" und Rechnungen erstellen. Gibt es dazu eine akzeptable Erklärung von JTL? JTL-Wawi 1.11 1
Neu Artikelname & Beschreibung angepasst für jeweiligen Marktplatz Arbeitsabläufe in JTL-Wawi 1
Neu OnFinds: KI-Suche für JTL-Shop mit fairer Abrechnung nach Artikelanzahl. 30 Tage kostenlos testen Plugins für JTL-Shop 11
API 2.1 für OnPrem? JTL-Wawi 2.0 6
Neu Dummy-ID oder Freiposition für Angebot mit mehrzeiliger Beschreibung JTL-Wawi - Ideen, Lob und Kritik 7
Neu Neue Kennzeichnungspflicht für Elektrogeräte (Altgeräterücknahme) Betrieb / Pflege von JTL-Shop 4
Neu Freelancer für JTL-Wawi, Shop & Prozessautomatisierung Dienstleistung, Jobs und Ähnliches 2
Neu Exportgenehmigung / Ausfuhrgenehmigung automatisch für Auslandskunden als Aufpreis Allgemeine Fragen zu JTL-Shop 2
Für Ihren SQL-Server wurde ein Service Pack zur Verfügung gestellt - nö, gelogen, wie kriege ich die Meldung weg? JTL-Wawi 1.11 15

Ähnliche Themen