In Diskussion Abfrage auf Wert bei allen Artikelpositionen nicht möglich?

ongnamo

Sehr aktives Mitglied
31. März 2013
1.147
106
Hallo,

Ziel des WF ist, das Eigene Feld "Warenpost Nation fähig" abzufragen. Nur wenn alle Artikel der Bestellung Warenpost National fähig sind, soll die Versandart neu gesetzt werden.

Bedingung ist: Auftrag\Auftragspositionen\ArtikelPositionen.enthält\Artikel\ Eigene Felder\Versand\Warenpost_National_fähig Gleich Wahr

Nun habe ich durch Testen bemerkt, dass das Ergebnis bereits dann WAHR ist, wenn nur ein Artikel der Positionsliste Wahr ist.

Keine Ahnung, ob das ein Bug oder Feature ist. Mein Verdacht ist, das hier das Wörtchen "enthält" ausschlaggebend ist.

Die Frage ist, wie erreicht man es, dass die Bedingung insgesamt nur dann WAHR ist, wenn sie für alle Positionen WAHR ist?
 

frankell

Sehr aktives Mitglied
9. September 2019
2.676
840
Flensburg
Hallo,

Ziel des WF ist, das Eigene Feld "Warenpost Nation fähig" abzufragen. Nur wenn alle Artikel der Bestellung Warenpost National fähig sind, soll die Versandart neu gesetzt werden.

Bedingung ist: Auftrag\Auftragspositionen\ArtikelPositionen.enthält\Artikel\ Eigene Felder\Versand\Warenpost_National_fähig Gleich Wahr

Nun habe ich durch Testen bemerkt, dass das Ergebnis bereits dann WAHR ist, wenn nur ein Artikel der Positionsliste Wahr ist.

Keine Ahnung, ob das ein Bug oder Feature ist. Mein Verdacht ist, das hier das Wörtchen "enthält" ausschlaggebend ist.

Die Frage ist, wie erreicht man es, dass die Bedingung insgesamt nur dann WAHR ist, wenn sie für alle Positionen WAHR ist?
Hast Du es mal mit der umgekehrten Logik probiert, also "Keine Bedingung erfüllt" und enthält ... gleich FALSCH?
Die doppelte Verneinung ist eine starke Bejahung, also genau das, was Du brauchst.
Da uns aber die Negierungen schwerer fallen als die positiven Ausdrücke, kann man das auch mit einer selbstdefinierten Erweiteren Eigenschaft erledigen. Es ist nur einfacher mit der doppelten Verneinung. Es sei denn, ich bin jetzt einem Logikfehler aufgesessen. 😂
 

ongnamo

Sehr aktives Mitglied
31. März 2013
1.147
106
Das Problem ist, dass ich nicht nur eine Bedingung habe. Wenn es nur eine Bedingung gäbe, könnte man tatsächlich so arbeiten.
 

ongnamo

Sehr aktives Mitglied
31. März 2013
1.147
106
Erweiterte Bedingungen kenne ich. Wir haben einige im Einsatz. Doch das Ausformulieren dieser Dotliquid-Abfragen ist nicht so mein Ding. Habe heute nach einer halben Stunde aufgegeben. Da fehlt mir einfach immer wieder das Detailwissen. ChatGPT war auch nicht hilfreich ^^
 

frankell

Sehr aktives Mitglied
9. September 2019
2.676
840
Flensburg
Erweiterte Bedingungen kenne ich. Wir haben einige im Einsatz. Doch das Ausformulieren dieser Dotliquid-Abfragen ist nicht so mein Ding. Habe heute nach einer halben Stunde aufgegeben. Da fehlt mir einfach immer wieder das Detailwissen. ChatGPT war auch nicht hilfreich ^^
Das ist auch nicht ganz so profan, weil das, soweit ich es erkennen kann, nicht ohne den Einsatz von SQL geht. Unter der Annahme, dass das Eigene Feld die Bezeichnung Warenpost_National_fähig hat, könntest Du folgende Erweiterte Eigenschaft anlegen:

Code:
{% for Artikelbeschreibungen in Vorgang.AuftragsPositionen -%}
{% assign PTyp = Artikelbeschreibungen.Positionstyp | abs -%}
{% if PTyp == 1 -%}
{% capture SQL -%}
SELECT nWertInt FROM tArtikelAttributSprache AS ARTATTS
LEFT JOIN tArtikelAttribut AS ARTATT ON ARTATTS.kArtikelAttribut = ARTATT.kArtikelAttribut
LEFT JOIN tAttributSprache AS ATTS ON ARTATT.kAttribut = ATTS.kAttribut
WHERE ATTS.cName = 'Warenpost_National_fähig' AND ATTS.kSprache = 0 AND ARTATTS.kSprache = 0 AND ARTATT.kArtikel = {{ Artikelbeschreibungen.InterneArtikelnummer | SqlEsacape }}
{% endcapture -%}
{% assign EF = SQL | DirectQueryScalar -%}
{% if EF == 1 -%}y{% else %}n{% endif -%}
{% endif -%}
{% endfor -%}

Diese müsste dann als Bedingung "enhält nicht" und "n" definiert werden.

Der Code geht alle Auftragspositionen durch und filtert zunächst einmal nach Standardpositionen (Artikel), also so etwas wie Gebühren, Versandkosten, Finanzierungskosten etc. werden nicht beachtet. Dann wird geprüft, ob der Wert für das Eigene Feld 1 ist (= WAHR bei Checkbox als Datentyp) . Wann immer das der Fall ist, wird ein y geschrieben. Ist das nicht der Fall, wird ein n geschrieben. Enthält also das Ergebnis n, ist das Eigene Feld bei mindestens einer Position nicht WAHR.

Das sollte dem Gewünschten entsprechen.

Hinweise:
  • Man könnte sich den zweiten JOIN sparen, wenn man den Wert kAttribut für das Eigene Feld kennt.
  • Die Verwendung von Unterstrichen in Bezeichnungen ist in SQL kann unglücklich sein, da der Unterstrich eine bestimmte Bedeutung bei der Suche nach einem String hat, wenn man keine exakte Suche verwendet. Er ist dann eine Wildcard für exakt ein beliebiges Zeichen. Wenn es also neben "Warenpost_National_fähig" auch "Warenpost National fähig" oder auch "Warenpost-National-fähig", würden alle diese Werte bei einer Sucher über LIKE gefunden. Wenn man eine exakte Suche benutzt wie oben bei WHERE ATTS.cName = 'Warenpost_National_fähig', wird der Unterstrich auch als Unterstrich verstanden, daher kommt es hier nicht drauf an. Daher ist das hier nur als Hinweis zu verstehen, dass der Unterstrich auch mal Probleme bereiten kann.
  • Theoretisch bedarf es der Erweiterten Eigenschaft nicht, Du könntest auch einfach die Prüfung auf das Eigene Feld in einen weiteren Workflow auslagern, bspw. als ersten Workflow, der nur diese Bedingung prüft (ohne die Notwendigkeit einer Erweiterten Eigenschaft) und als Aktion den Aufruf des jetzigen Workflows hat. Ich persönlich bin aber kein großer Fan davon, mehr Workflows als notwendig anzulegen. Und das generell, nicht nur, weil die manuellen Workflows unterhalb von Pro begrenzt oder gar nicht vorhanden sind. Und es ist auch einfach übersichtlicher. :) Aber nur der Vollständigkeit halber: Es ist auch eine Möglichkeit.
 
  • Gefällt mir
Reaktionen: ongnamo

ongnamo

Sehr aktives Mitglied
31. März 2013
1.147
106
Was für eine geniale, kollegiale Antwort! Vielen Dank schon allein für diesen Einsatz!

Den Code kann ich gedanklich nachvollziehen. Validieren kann ich ihn nur durch testen, weil mir ja wie gesagt der Tiefgang dafür fehlt. Ich habe dafür meinen Auftrag 4156692 genommen, der 1 nicht WP-fähige und 2 WP-fähige Artikelpositionen enthält. Ergebnis:
nnn
Doch auch wenn alle 3 oder keine der Artikelpositionen WP-fähig ist, es kommt immer "nnn" heraus. Irgendetwas passt da noch nicht. Hast du ein Idee, woran das liegt?
 

frankell

Sehr aktives Mitglied
9. September 2019
2.676
840
Flensburg
Was für eine geniale, kollegiale Antwort! Vielen Dank schon allein für diesen Einsatz!

Den Code kann ich gedanklich nachvollziehen. Validieren kann ich ihn nur durch testen, weil mir ja wie gesagt der Tiefgang dafür fehlt. Ich habe dafür meinen Auftrag 4156692 genommen, der 1 nicht WP-fähige und 2 WP-fähige Artikelpositionen enthält. Ergebnis:
nnn
Doch auch wenn alle 3 oder keine der Artikelpositionen WP-fähig ist, es kommt immer "nnn" heraus. Irgendetwas passt da noch nicht. Hast du ein Idee, woran das liegt?
Gern geschehen! :thumbsup:

Ich habe das bei uns mit einem Eigenen Feld getestet, da ging es.

Kannst Du einmal einen Screenshot der Einstellungen des Eigenen Feldes machen, also in Admin - Eigene Felder?
 

ongnamo

Sehr aktives Mitglied
31. März 2013
1.147
106
Na klar: Screenshot anbei.

Es ist ein Flag-Feld und in allen Warengruppen gültig.
 

Anhänge

  • Snap106.jpg
    Snap106.jpg
    88 KB · Aufrufe: 3

frankell

Sehr aktives Mitglied
9. September 2019
2.676
840
Flensburg
Na klar: Screenshot anbei.

Es ist ein Flag-Feld und in allen Warengruppen gültig.

Ok, dann kann das auch nicht klappen. Ich schrieb ja:

Unter der Annahme, dass das Eigene Feld die Bezeichnung Warenpost_National_fähig hat, könntest Du folgende Erweiterte Eigenschaft anlegen:

Wenn Du im Code

'Warenpost_National_fähig'

durch

'Warenpost National fähig'

ersetzt, sollte es klappen. Ich war davon ausgegangen, dass die Unterstriche Teil der Bezeichnung sind, aber die sind bei den Feldern automatisch hinzugefügt worden.
 

frankell

Sehr aktives Mitglied
9. September 2019
2.676
840
Flensburg
Das ist auch nicht ganz so profan, weil das, soweit ich es erkennen kann, nicht ohne den Einsatz von SQL geht. Unter der Annahme, dass das Eigene Feld die Bezeichnung Warenpost_National_fähig hat, könntest Du folgende Erweiterte Eigenschaft anlegen:

Code:
{% for Artikelbeschreibungen in Vorgang.AuftragsPositionen -%}
{% assign PTyp = Artikelbeschreibungen.Positionstyp | abs -%}
{% if PTyp == 1 -%}
{% capture SQL -%}
SELECT nWertInt FROM tArtikelAttributSprache AS ARTATTS
LEFT JOIN tArtikelAttribut AS ARTATT ON ARTATTS.kArtikelAttribut = ARTATT.kArtikelAttribut
LEFT JOIN tAttributSprache AS ATTS ON ARTATT.kAttribut = ATTS.kAttribut
WHERE ATTS.cName = 'Warenpost_National_fähig' AND ATTS.kSprache = 0 AND ARTATTS.kSprache = 0 AND ARTATT.kArtikel = {{ Artikelbeschreibungen.InterneArtikelnummer | SqlEsacape }}
{% endcapture -%}
{% assign EF = SQL | DirectQueryScalar -%}
{% if EF == 1 -%}y{% else %}n{% endif -%}
{% endif -%}
{% endfor -%}

Diese müsste dann als Bedingung "enhält nicht" und "n" definiert werden.

Der Code geht alle Auftragspositionen durch und filtert zunächst einmal nach Standardpositionen (Artikel), also so etwas wie Gebühren, Versandkosten, Finanzierungskosten etc. werden nicht beachtet. Dann wird geprüft, ob der Wert für das Eigene Feld 1 ist (= WAHR bei Checkbox als Datentyp) . Wann immer das der Fall ist, wird ein y geschrieben. Ist das nicht der Fall, wird ein n geschrieben. Enthält also das Ergebnis n, ist das Eigene Feld bei mindestens einer Position nicht WAHR.

Das sollte dem Gewünschten entsprechen.

Hinweise:
  • Man könnte sich den zweiten JOIN sparen, wenn man den Wert kAttribut für das Eigene Feld kennt.
  • Die Verwendung von Unterstrichen in Bezeichnungen ist in SQL kann unglücklich sein, da der Unterstrich eine bestimmte Bedeutung bei der Suche nach einem String hat, wenn man keine exakte Suche verwendet. Er ist dann eine Wildcard für exakt ein beliebiges Zeichen. Wenn es also neben "Warenpost_National_fähig" auch "Warenpost National fähig" oder auch "Warenpost-National-fähig", würden alle diese Werte bei einer Sucher über LIKE gefunden. Wenn man eine exakte Suche benutzt wie oben bei WHERE ATTS.cName = 'Warenpost_National_fähig', wird der Unterstrich auch als Unterstrich verstanden, daher kommt es hier nicht drauf an. Daher ist das hier nur als Hinweis zu verstehen, dass der Unterstrich auch mal Probleme bereiten kann.
  • Theoretisch bedarf es der Erweiterten Eigenschaft nicht, Du könntest auch einfach die Prüfung auf das Eigene Feld in einen weiteren Workflow auslagern, bspw. als ersten Workflow, der nur diese Bedingung prüft (ohne die Notwendigkeit einer Erweiterten Eigenschaft) und als Aktion den Aufruf des jetzigen Workflows hat. Ich persönlich bin aber kein großer Fan davon, mehr Workflows als notwendig anzulegen. Und das generell, nicht nur, weil die manuellen Workflows unterhalb von Pro begrenzt oder gar nicht vorhanden sind. Und es ist auch einfach übersichtlicher. :) Aber nur der Vollständigkeit halber: Es ist auch eine Möglichkeit.
Und ein Tippfehler ist da noch im Code von mir: Da steht leider SqlEsacape anstelle von SqlEscape. Warum der Code dann bei mir trotzdem funktioniert hat, weiß ich nicht. :D
 

ongnamo

Sehr aktives Mitglied
31. März 2013
1.147
106
Ah, cool: Bei 2 WPN-fähigen und 1 nicht-WPN-fähigem Artikel erhalte ich nun das gewünschte Ergebnis: yyn

Und im Workflow:

Snap110.jpg
Mit deiner Hilfe hat das geklappt :D 1000 Dank dafür 🙏
 
Ähnliche Themen
Titel Forum Antworten Datum
CSV Exportvorlage - SQL Abfrage Eigenes Feld JTL-Wawi 2.0 4
Neu Dringend: USA DHL Versand Umstellung ab 24.07. auf HTSUS Zolltarifnummern JTL-ShippingLabels - Ideen, Lob und Kritik 6
Neu Update auf 5.7.2 - kein DB Update Installation / Updates von JTL-Shop 10
Neu Feld "Informationen" auf Smartphone immer ausklappen Allgemeine Fragen zu JTL-Shop 2
Neu Update von 1.8.12.4 auf 2.0.5 - Kostenfreie Version - Registrierung erforderlich? User helfen Usern - Fragen zu JTL-Wawi 1
JTL Update auf 1.9 , danach Import Kundenspezifrische Preise velerhaft JTL-Wawi 1.9 0
Neu Rechte-Fehler im J10n Modul und Auswirkung auf base.mo.php in div. Plugins (Shop 5.7.1) JTL-Shop - Fehler und Bugs 0
nach Update von 5.3 auf 5.7 neue Position im Warenkorb "Gebühr" die auch in den Auftrag übernommen werden Einrichtung JTL-Shop5 2
Beantwortet Shop Abgleich nach Update auf 5.7.2 nicht mehr möglich JTL-Shop - Fehler und Bugs 4
Neu Amazon: Artikel-Highlight / Produkttitel auf 75 Zeichen begrenzt Amazon-Anbindung - Fehler und Bugs 8
Neu Produktionsaufträge tauchen nicht in der Workbench auf JTL-Plan&Produce - Fehler und Bugs 2
Bei Update auf 2.05 kam folgende Meldung JTL-Wawi 2.0 2
Ameise - Importvorlage auf 80 Spalten begrenzt? JTL-Wawi 2.0 0
Login Wawi nicht möglich nach Update auf 1.11.11 JTL-Wawi 1.11 1
Neu Anpassung Kundendaten auf XRechnung User helfen Usern - Fragen zu JTL-Wawi 4
Neu Absenderadresse auf Versandlabel ändern User helfen Usern - Fragen zu JTL-Wawi 1
Ameise (1.11.11.0) Export auf Clients nicht möglich - Das Dezimaltrennzeichen kann nicht die leere Zeichenfolge sein JTL-Wawi 1.11 5
Neu Hinweis zum Auftrag wird seit Update auf die 1.11 nicht mehr angezeigt JTL-WMS / JTL-Packtisch+ - Fehler und Bugs 0
Neu Umstellung auf Jera Datev Schnittstelle - keine Kundennummer im Kundencenter Schnittstellen Import / Export 2
JTL APP - Fehlermeldung nach Update auf Wawi 1.11. JTL-Wawi App 6
JTL Wawi 1.11. - Fenstergröße - Artikel auf Einkaufsliste setzen JTL-Wawi 1.11 13
Nach Update auf 2.0.3 Keine Fehlermeldungen mehr sichtbar Otto.de - Anbindung (SCX) 1
DPD Cloud Labeldruck auf Zebra LP 2844-Z seit Update auf JTL-Wawi 1.11.x fehlerhaft JTL-Wawi 1.11 3
JTL nach Update auf 2.0.3 im Bereich „Kunden“ extrem langsam JTL-Wawi 2.0 1
Neu DotLiquide Variable Voraussichtliches Lieferdatum auf Rechnung User helfen Usern - Fragen zu JTL-Wawi 1
Neu Betrag auf der Rechnung nach Rechnungskorrektur User helfen Usern - Fragen zu JTL-Wawi 1
Fehler nach Update auf Version 1.11.11 und 2.0.4 JTL-Wawi 2.0 7
Lohnt sich das Update von 1.11.6 auf 2.0.4 aktuell? JTL-Wawi 2.0 2
Neu DHL Versenden 4.0 Zolltarifnummer auf 8 Stellen kürzen User helfen Usern - Fragen zu JTL-Wawi 1
Neu Internetmarke 2.0 - Direktdruck auf Umschlag JTL-ShippingLabels - Ideen, Lob und Kritik 3
Update auf 1.11.11 schlägt fehl JTL-Wawi 1.11 3
Neu Update Version 1.5 auf 1.11 - Download älterer Versionen als 1.8 Installation von JTL-Wawi 2
Neu Shop-Update auf 5.7.1: Sprachvariablen im Widerrufsformular werden nicht erkannt, obwohl vorhanden?! JTL-Shop - Fehler und Bugs 3
Erfahrungswerte Update von 1.8.12.2 auf 1.11.10 JTL-Wawi 1.11 4
Neu Umzug von sehr alter JTL Wawi Version auf neuen PC User helfen Usern - Fragen zu JTL-Wawi 3
Neu Rechnungskorrektur/Storno wird auf falsches Buchungskonto gebucht JTL-Wawi - Fehler und Bugs 1
Neu Umstellung auf DHL Versenden 4.0 leeres Versand Label JTL-ShippingLabels - Ideen, Lob und Kritik 5
Neu Angebotsname auf Amazon Amazon-Anbindung - Ideen, Lob und Kritik 0
Neu Konfigurationskomponenten auf Bons in separaten Positionen ausgeben JTL-POS - Fehler und Bugs 4
Neu Nach Update auf 1.11.10.0 Abgleich zu Ebay über 3 Stunden bei neuen Angeboten eBay-Anbindung - Fehler und Bugs 2
Beantwortet [WAWI-85758] Nach Update auf 1.11.10 klappt stornieren über ios Wawi App nicht mehr JTL-Workflows - Fehler und Bugs 1
Neu Suche Workflow: Erstbestellung Shop auf Rechnung -> Auftrag Zurückhalten JTL-Wawi - Ideen, Lob und Kritik 1
Dashboard lädt nicht und Umsatzanzeige rechnet falsch seit Update auf 1.11.8 JTL-Wawi 1.11 8
Neu PayPal Plugin wirft Fehler auf einmal wegen telefonnummer JTL-Shop - Fehler und Bugs 3
Update von 1.10.15 auf 1.11.10 JTL-Wawi 1.11 11
Neu Falsch erzeugte Ausgangszahlung bei Teilzahlungen und Retoure (Kauf auf Rechnung) Arbeitsabläufe in JTL-Wawi 0
Neu Nach Update auf JTL-Wawi 2.0.3 keine WMS-Lager mehr auswählbar – Versand komplett blockiert JTL-Wawi 2.0 3
Update auf 1.11 verlangt ein Update auf aktuelleren SQL Server JTL-Wawi 1.11 7
Betreff: Umstellung Shipping 3 auf Shipping 4 nicht möglich JTL-Wawi 2.0 0
Neu Migration DHL Versenden 3.0 auf DHL Versenden 4.0 Dienstleistung, Jobs und Ähnliches 31

Ähnliche Themen