Individuelle Versandkostenberechnung: Eigene Bedingung verhält sich merkwürdig

Moin

In dem Versandkosten-Modul habe ich als erweiterte SQL-Abfrage folgendes stehen:

MAX(d.length) AS max_length, MAX(d.width) AS max_width, MAX(d.height) AS max_height, SUM(d.weight*b.quantity) AS total_weight

 

Als eigene Bedingung damit ein Versandart zur Auswahl steht, habe ich zu Testzwecken folgendes eingetragen:

IF(max_length=200 AND max_height=80,1,0)

 

Mein Artikel den ich in meinem Warenkorb habe, hat genau diese Maße! Deswegen wird hier 1 bzw. true zurückgegeben bzw. die Versandart steht dem Kunden zur Verfügung. So weit so gut!

 

Nun hab ich die Bedingung noch wie folgt ergänzt:

IF(max_length=200 AND max_height=80 AND max_length>max_height,1,0)

 

Ich würde nun erwarten, dass die Versandart immer noch zur Verfügung stehen sollte. Tut sie aber nicht! Die Bedingung ist aber eindeutigerweise T R U E oder hab ich irgendwas übersehen??

 

Gruß

Martin

Hat keiner ne idee warum _IF(max_length>max_height,1,0) _in shopware false zurückgibt, obwohl die Artikel-Länge mit 200 und die Artikel-Höhe mit 80 angegeben sind?

Das scheint mir ein schwerwiegender Fehler zu sein, der es mir grade wirklich schwer macht individuelle Berechnungen für Versandarten festzulegen…

Bin über jede Hilfe dankbar!

Hi,

vielleicht liegt es daran?

Ab Shopware 4 gilt zu beachten, dass ein Boolean Feld nicht 0 oder 1 liefert sondern true oder false.

Quelle:

http://community.shopware.com/Individuelle-Versandkosten-Bedingungen-und-Berechnungen\_detail\_1933.html

leider nicht!

Um zu prüfen wie sich das System verhält habe ich nur 1 und true eingegeben, mit dem Ergebnis, dass die Versandart mit true als auch mit 1 als aktiv gilt, während false und 0 Beide dazu führten, dass die Versandart nicht aktiv ist. Also so wie erwartet.

Ich habe IF(max_length>max_height,true,false) probiert und _IF(max_length>max_height,1,0) _sowie nur max_length>max_height mit dem Ergebnis, dass die Versandart nicht zur Verfügung steht. Benutze ich nun den gegenteiligen Operator mit max_length<max_height> steht die Versandart zur Verfügung.</max_height>

Selbst mit IF(max_length=200 AND max_height=80 AND max_length<max_height> steht sie zur Verfügung! Das macht überhaupt keinen Sinn!!</max_height>

 

Kann sich das mal bitte jemand von shopware anschauen? Das muss ja ein schwerwiegender Fehler im System sein!

Das IF brauchst du eigentlich nicht bei der eigenen Bedingung. Ich habe jetzt einfach “max_length>max_height” in das Feld geschrieben und das läuft fehlerfrei. Sobald die Länge größer wird als die Höhe, sperrt er die Versandart.

Generell ist das hier ein Community Forum, d.h. du hilfst anderen und andere helfen dir. Wenn du gerne eine Antwort von Shopware willst, musst du dich über einen aktiven Wartungsvertrag bei unserem Support melden.

Das scheint wirklich ein Fehler von Shopware zu sein!

Vergleicht man 2 Stellige Maße miteinander z.B. Höhe 80 und Länge 90 stimmte die Bedingung _max_length>max_height  --> _Ergebnis ist wie erwartet true

Vergleicht man nun aber einen 2 Stelligen Wert mit einem 3 Stelligen Wert, z.B. Höhe 80 und Länge 100 gibt die selbe Bedingung false zurück!

 

Hab dazu nun ein Ticket erstellt: Shopware Issuetracker

Das ist ja eine Standard WHERE-Abfrage in MySQL. Das sind in der Datenbank beides Varchar-Felder. Der Vergleich ist halt ein Textvergleich, also erstmal Standardverhalten von MySQL. Wenn du einen Zahlenwert vergleichen willst, müsstest du also erstmal „Zahlen“ daraus machen. Könnte so funktionieren:

CAST(max_length AS SIGNED)>CAST(max_height AS SIGNED)

Ja vielen Dank! Daran scheints gelegen zu haben.
Mich wundert nur, dass sich der selbe/ähnliche Vergleich in dem Feld “Eigene Berechnung” anders zu verhalten scheint:
Die Bedingung IF(MAX(d.length)>MAX(d.height),1,0) gibt da mit dem selben Produkt 1 zurück. Dort kann man also die MAX-Werte problemlos vergleichen. 
Ne Idee woran das liegt?

Schade finde ich auch, dass man dann als Erweiterte SQL-Abfrage nicht folgendes schreiben kann:
CAST(MAX(d.length)AS SIGNED) AS max_length, CAST(MAX(d.width)AS SIGNED) AS max_width, CAST(MAX(d.height)AS SIGNED) AS max_height
Um damit dann den Vergleich durchführen zu können: max_length>max_height
Das scheint nicht zu funktionieren. Woran liegt das?

Ich finde dass auf solche Fälle mit dem Casting in der Doku hinweisen werden sollte! Die Beschreibung zu den Bedingungen finde ich sowieso ein wenig dürftig.
Aktuell steht da auch nur eine begrenzte Anzahl an Befehlen drin “Benötigte Befehle”, die benutzt werden können. Dass man sämtliche SQL Befehle benutzen kann wird dort nicht wirklich kommuniziert finde ich. Und aussagekräftigere Beispiele wären wünschenswert :slight_smile: