Workflow für Benachrichtigung bei Stammkunden

TobiasN82

Aktives Mitglied
25. Januar 2019
44
4
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.615
794
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
44
4
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
44
4
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
44
4
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.567
784
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
44
4
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
Artikelpuffer Email Workflow JTL-Wawi 1.11 2
Neu Workflow Ereignis "Position hinzufügen" bei Angebote User helfen Usern - Fragen zu JTL-Wawi 0
Neu Workflow - Bedingung Lieferstatus User helfen Usern - Fragen zu JTL-Wawi 4
Workflow: Artikel geändert -> bat-script ausführen JTL-Wawi 1.11 2
Neu Workflow funktioniert nicht so wie gewollt :) User helfen Usern - Fragen zu JTL-Wawi 1
In Diskussion Workflow Abweichung Preise > Emailreport JTL-Workflows - Ideen, Lob und Kritik 3
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 Paypal Checkout Modul für Gambio bis GX 26.x Gambio-Connector 0
Neu Verlinkungen richtig setzen für mehrere Sprachen Allgemeine Fragen zu JTL-Shop 10
Neu JTW Wawi hängt beim Bearbeiten der Druckvorlage für Mahnungen User helfen Usern - Fragen zu JTL-Wawi 0
Neu Wero für den JTL Shop? Plugins für JTL-Shop 21
Neu Bilder von Plattform A auch für Plattform B aktivieren Arbeitsabläufe in JTL-Wawi 1
Neu Exchange Konto kann nicht eingerichtet werden für E-Mail Versand User helfen Usern - Fragen zu JTL-Wawi 1
weitere Angaben für eBay JTL-Wawi 1.11 1
Neu Versandklassen für Kategorien / Unterkategorien bzw. Artikel im Warenkorb User helfen Usern - Fragen zu JTL-Wawi 0
Neu Freelancer gesucht für Artikelpflege ( Herstellerkataloge / Preisänderungen einspielen) Dienstleistung, Jobs und Ähnliches 3
JTL-WAWI Datenbankprofil für neue Windows Benutzer JTL-Wawi 1.11 2
Neu Für die Weiterentwicklung und Betreuung unserer bestehenden Systemlandschaft suchen wir einen erfahrenen Freelancer (m/w/d) mit fundierten Kenntnissen JTL-Wawi App 1
Neu Platzhalter für OPC-Portlets in Seitentext einbauen Allgemeine Fragen zu JTL-Shop 1
Neu kann man JTL POS alleine nutzen für 29 Euro? Einrichtung / Updates von JTL-POS 0
Neu OSS aktiv – Ausnahme für Eventtickets mit deutschem Leistungsort möglich? Allgemeine Fragen zu JTL-Shop 6
Neu Lösung nötig für JTL 1.11+ !!! Fragen rund um LS-POS 3
Neu Widerrufsformular als kostenloses Plugin für Shops ab 5.1.5 Plugins für JTL-Shop 9
Aktuelles Update 1.11.7: Anmeldedialog merkt sich den letzten User immer noch nicht & falsche Warnung für angeblich fehlendes SQL Server Update JTL-Wawi 1.11 3
Neu Artikelmerkmale für eigenes Exportformat auslesen Betrieb / Pflege von JTL-Shop 1
Gesamtübersicht für Minusbuchen (Lagerbuchungstext) JTL-Wawi 1.10 2
Teilbare Artikel NICHT für Kunden, nur für intern teilbar JTL-Wawi 1.11 5
Neu Neue Preiserhöhung JTL April +~20% für Monatstarife, eingeschränkte "Funktionalitäten" User helfen Usern - Fragen zu JTL-Wawi 279
Neu Jecke Anfrage für Rosenmontag 🎉 – Kamelle & Werbegeschenke gesucht Smalltalk 0
Neu Suche DirectQuery für Kundenkommentar (Rechnung) & Hinweis (Lieferschein) Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 2
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

Ähnliche Themen