Yep, das kann ziemlich “mind-boggling” werden, die Gehirnknoten bei der Konfiguration kenne ich gut, hab auch mehrere Anläufe benötigt bis es passte, und die Doku ist da teilweise etwas undurchsichtig.
Daher versuche ich das mal anhand eines (stark vereinfachten) Beispiels zu erklären:
Die erste Entscheidung ist, ob Du mehrere Versandarten nutzen möchtest oder nur die Preise ein und derselben Versandart dynamisch berechnen musst. Oder eine Kombination von beiden Ansätzen (was bei uns der Fall ist). Bei uns sind es z.B. schon mal 3 unterschiedliche Versandarten: normales Paket, Gefahrgutversand 1.4S und Gefahrgutversand 1.4G (der 1.4S inkludiert). Paket und 1.4G werden nach Gewicht ermittelt, 1.4S hingegen über den Warenwert (da die Artikel sehr leicht sind und dann eher das Volumen ausschlaggebend ist).
Bei sortenreinen Warenkörben ist es ja noch relativ einfach, die Komplexität kommt vor allem über gemischte Warenkörbe. Ich empfehle Dir, hier ein gutes altes Tool aus der Prozessmodellierung zu verwenden: Decision Tables. Was soll das Ergebnis sein (sprich: welche Versandart und zu welchem Preis), wenn - um Deine Beispiele zu nehmen - ein Versandkostenfrei, ein Film und ein normaler Artikel im WK liegen.
Das spielst Du nun für jede mögliche Kombination durch (eine Zeile pro Kombination).
Dann geht es darum, diese Regeln umzusetzen. Zunächst kümmerst Du Dich um die Selektion der richtigen Versandart. Unsere Artikel haben z.B. ein Freitextfeld mit der Gefahrgutklasse, somit wird zunächst einmal über erweiterte SQL Abfragen des Versandkostenmoduls ermittelt, ob im WK mindestens ein Artikel mit dieser Klasse liegt, z.B. MAX(IF((at.artikel_gefahrgutklasse="1.4S"), 1,0)) as hat_14s
und MAX(IF((at.artikel_gefahrgutklasse="1.4G"), 1,0)) as hat_14g
. Gleichermaßen verfährst Du mit allen anderen relevanten Kriterien.
Nun trägst Du bei jeder Versandart entsprechend deiner Tabelle ein, wann diese verfügbar sein darf. Beliebte Fehler sind hier schon, die Freischaltung für Zahlungsmethoden oder Länder zu vergessen. Danach gehst Du auf den Reiter “Erweiterte Einstellungen” und schreibst in das Feld “eigene Bedingung” die gewünschte Formel. Beispiel für meine 1.4S Versandard: hat_14s AND !hat_14g
, also nur anbieten, wenn mindestens ein Artikel 1.4S, aber keiner (! = NOT) 1.4G hat. Bei 1.4G hingegen wird nur eingetragen: hat_14g
- ob 1.4S vorhanden ist dann nämlich egal. Und beim normalen Paketversand dürfen beide nicht gesetzt sein, hier wäre die Formel also !hat_14s AND !hat_14g
. Die Formeln müssen also so gewählt werden, dass bei jeder Kombi genau eine Versandart übrig bleibt (außer es ist gewollt, dem Kunden mehrere zur Auswahl anzubieten).
Das ist schon mal das A und O. Jetzt geht es noch an den Preis der jeweiligen Versandart. Entweder machst Du das über die vorgesehene Staffeln (nach Gewicht oder Warenkorbwert), oder du trägst unter “Eigene Berechnung” eine Formel ein, welche den Wert basierend auf diversen Parametern - analog zu oben - ermittelt. Das Ergebnis muss hier natürlich kein Boolean sein, sondern der zu verwendende Betragswert.
Hoffe das hilft Dir schon mal weiter, und auch dem ein oder anderen Mitleser - das Thema wird ja ständig gefragt. Bin gespannt auf Deine Fragen!
LG Phil