mehrere Aufschlag-Versandregeln

hi, ich habe mehrer Aufschlag-Versandregeln definiert. Dabei frage ich bei den eigenen Bedingungen ein Freitextfeld ab. Soweit klappt das gut. Nun ist es aber so, dass wenn ich 2 Artikel mit unterschiedlichen Aufschlgen im Warenkorb habe, wird immer der geringere Aufschlag berechnet. Kann ich beeinflussen dass immer der höchste Aufschlag berechnet wird? 

  1. Farge: Kann man die Aufschlöge auch zusammenrechen? also Aufschlag A für Artikel A plus Aufschlag B für Artikel B

Vielen Dank

Mach doch eine Aufschlag-Regel und arbeite mit eigenen Berechnungen. Dann hast du beides umgesetzt. Per IF kannst du da ja auch deine eventualitäten abdecken.

hi, wie würde denn so eine Berechnung aussehen? Ich habe jetzt mal folgendes in Eigene Berechung eingefügt:

IF(at.attr10 = 'FAB' || at.attr10 = 'FCC',15,0)

Ein Artikel im Warenkorb hat im attribute10 FAB stehen. tritudem wird der Aufschlag von 15,- nicht berechnet.

Hallo,
aktuell überprüfst du für jeden Artikel nacheinander ob das Kennzeichen zutriffst und gibts 15 oder 0 aus, der nächste Artikel überschreibt dann wieder das vorherige Ergebnis.

Hier solltest du die Berechnung so erweitern:

MAX(IF(at.attr10 = ‘FAB’ || at.attr10 = ‘FCC’,15,0))

Damit der größte gefundene Wert genutzt wird.

In einem Test-System hat diese Berechnung funktioniert.

Viele Grüße aus Schöppingen
Janine Overhaus-Kocan

1 Like

@JanineOverhausKocan schrieb:

Hallo,
aktuell überprüfst du für jeden Artikel nacheinander ob das Kennzeichen zutriffst und gibts 15 oder 0 aus, der nächste Artikel überschreibt dann wieder das vorherige Ergebnis.

Hier solltest du die Berechnung so erweitern:

MAX(IF(at.attr10 = ‚FAB‘ || at.attr10 = ‚FCC‘,15,0))

Damit der größte gefundene Wert genutzt wird.

In einem Test-System hat diese Berechnung funktioniert.

Viele Grüße aus Schöppingen
Janine Overhaus-Kocan

hi Janine, das MAX war es. so funktioniert es, danke dafür.

Ich bin aber wohl noch nicht ganz durch die Syntax gestiegen. 

die Abfrage ist ja wie folgt:

IF([BEDINGUN], [WAHR],[FALSCH])

 Wenn ich das ganze noch verschachtel sieht es so aus:

IF([BEDINGUNG],[WAHR],[IF([BEDINGUNG],[WAHR],[FALSCH])])

Das funktioniert auch soweit. Wenn ich jetzt aber noch eine weitere Bedingung einbaue bekomme ich im Frontend einen fehler geworfen:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '),15) ) )) as calculation_value_13 FROM s_order_basket

Meine Berechung sieht aktuel so aus:

MAX(
	IF(
		at.attr10 = 'FAB' || at.attr10 = 'FCC' || at.attr10 = 'FGP'
		,15,IF(at.attr10 LIKE 'M%',IF(SUM(d.weight*b.quantity)>10,25),15)
	)
)

Wo ist der Fehler?

Hallo,

man sieht hier den Fehler besser, wenn man die Berechnung nochmal etwas aufschlüsselt.

Bei der dritten IF-Bedingung fehlt der Falsch-Zweig.

MAX(
    IF(
        at.attr10 = ‘FAB’ || at.attr10 = ‘FCC’ || at.attr10 = ‘FGP’
        ,15,
        IF(at.attr10 LIKE ‘M%’,
            IF(SUM(d.weight*b.quantity)>10,
                25),
            15)
    )
)

Nach der 25 müsste innerhalb der Klammer also noch ein , und der Wert kommen, welcher greifen soll, wenn SUM(d.weight*b.quantity) <10 ist.

VIele Grüße aus Schöppingen
Janine

@JanineOverhausKocan schrieb:

Hallo,

man sieht hier den Fehler besser, wenn man die Berechnung nochmal etwas aufschlüsselt.

Bei der dritten IF-Bedingung fehlt der Falsch-Zweig.

Nach der 25 müsste innerhalb der Klammer also noch ein , und der Wert kommen, welcher greifen soll, wenn SUM(d.weight*b.quantity) <10 ist.

VIele Grüße aus Schöppingen
Janine

 Hey Janine, vielen Dnak noch mal. leider klappt das noch immer nicht.

meine vollständige Bedingung sieht nun so aus:

 

MAX(
    IF(
		at.attr10 = 'FAB' || at.attr10 = 'FCC' || at.attr10 = 'FGP' || at.attr10 = 'FGR' || at.attr10 = 'FLU' || at.attr10 = 'FPL' || at.attr10 = 'NPL' || at.attr10 = 'PZÜ' || at.attr10 LIKE 'G%' || at.attr10 LIKE 'L%' || at.attr10 LIKE 'K%'
        ,15,
        IF(at.attr10 LIKE 'M%',
            IF(SUM(d.weight*b.quantity)>10,
                25,15),
            15)
    )
)

Ich bekomme folgende Fehlermeldung:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '),25), 35) ) )	) as calculation_value_13 FROM s_orde' at line 22'

Ich sehe den fehler einfach nicht.

Hallo,

in der Meldung bezieht sich der Fehler auf andere Zahlen, als die in der Bedingung enthaltene, die 35 aus der Meldung ist in der gegebenen Bedingung nirgendwo enthalten, vermutlich bezieht sich dies auf eine andere Stelle/Bedingung o.Ä…

Ich habe jedoch bei meinen Tests noch ein Problem festgestellt, innerhalb eines MAX kann keine weitere Aggregatfunktion wie SUM genutzt werden.

Dies führt zu einer anderen Fehlermeldung.

Hier müsste die Logik umstrukturiert werden, damit die Berechnung erfolgen kann.

Viele Grüße aus Schöppingen
Janine

hi, eventuell habe ich andere Zahlen gepostet, die Bedingung ansich ist aber so wie ich sie zuletzt hatte. 

Wie könnte die Bedingung denn aussehen wenn innerhalb von MAX keine Berechnung stattfinden darf? Wie könnte man mein Vorhaben umsetzen? Ist denn klar geworden was ich umsetzen möchte?

vielen Dank