Zum Hauptinhalt springen
Über die Versandart hinaus lassen sich dem Käufer im Bestellablauf weitere Entscheidungen anbieten: wohin geliefert wird, wann geliefert wird, in wie vielen Paketen, und wie er den Versandstatus verfolgen kann. Diese Funktionen sind unterschiedlich aufwendig. Die Sendungsverfolgung und der Wunsch-Liefertermin stehen für sich. Die Lieferung an mehrere Adressen ist ein Baukasten aus vier aufeinander aufbauenden Teilen, bei dem Sie unten anfangen müssen.

Sendungsverfolgung

Der Käufer sieht den Versandstatus im Shop, ohne die Seite des Dienstleisters aufzurufen. Unterstützt werden DHL, die Österreichische Post und die Schweizerische Post. Der Ablauf ist bei allen dreien derselbe:
  1. Sie schließen einen Vertrag mit dem Dienstleister und beantragen die Zugangsdaten zur Schnittstelle.
  2. WEBSALE richtet die Schnittstelle ein und schaltet die Funktion frei.
  3. Sie hinterlegen die Zugangsdaten im Abschnitt <ShipTrack>.
  4. Sie bauen die Anzeige im Template, in der Regel auf der Bestellhistorie.
Damit der Shop den Status abrufen kann, braucht er die Sendungsnummer. Sie kommt aus der Warenwirtschaft, über die Infodaten- oder die REST-Schnittstelle. Ohne diesen Rückweg aus der Warenwirtschaft gibt es keine Sendungsverfolgung, egal wie die Schnittstelle konfiguriert ist.
Was der Käufer zu sehen bekommt, hängt vollständig davon ab, welche Daten der Dienstleister liefert. Das richtet sich nach dem gebuchten Leistungsumfang und nach Ihren Einstellungen im System des Dienstleisters, nicht nach dem Shop.

Zugangsdaten hinterlegen

Für die Österreichische Post lautet der Anbieter POST-AT, die Anmeldedaten sind dieselben Felder. Die Schweizerische Post läuft anders: Sie meldet sich dort für den Bericht 11 an, WEBSALE nimmt die XML-Dateien entgegen, wandelt sie in JSON um und stellt sie über einen eigenen Endpunkt bereit.
Bei der Schweizerischen Post ist das keine Abfrage in Echtzeit. Die Daten werden mehrmals täglich geliefert, der angezeigte Status kann also einige Stunden alt sein. Referenz: Abschnitt ShipTrack

Den Status im Template ausgeben

Der Shop holt die Antwort des Dienstleisters als JSON und stellt sie über die JSON-Schnittstelle bereit. Sie lesen daraus die Werte, die Sie anzeigen wollen.
Die Struktur der Antwort unterscheidet sich je Dienstleister. Ein Beispiel der JSON-Datei steht in der Referenz zu SHIPTRACK-JSONResult. Wegweiser: JSON-Schnittstelle · Referenz: SHIPTRACK-Get() · Referenz: SHIPTRACK-JSONResult

Einen Zeitstrahl bauen

Für eine grafische Darstellung brauchen Sie nicht den Text, sondern den Ereigniscode. Jeder Dienstleister hat eigene Codes. Die Codes fassen Sie zu Gruppen zusammen und ordnen jeder Gruppe einen Abschnitt Ihres Zeitstrahls zu.
Die Ereigniscodes gehören dem jeweiligen Dienstleister und ändern sich ohne Zutun des Shops. Fragen Sie die aktuelle Liste direkt beim Dienstleister an und prüfen Sie Ihre Zuordnung von Zeit zu Zeit nach. Ein unbekannter Code fällt sonst stillschweigend aus dem Zeitstrahl heraus.
Fangen Sie unbekannte Codes ab. Eine Gruppe „Status unbekannt” mit einem neutralen Text ist besser als ein Zeitstrahl, der bei einem neuen Code leer bleibt. Referenz: DC-CompareStringInList

Teillieferung und Komplettlieferung

Liegen Produkte mit unterschiedlicher Verfügbarkeit im Warenkorb, kann der Käufer wählen: entweder bekommt er die vorrätigen Produkte sofort und den Rest später, oder er wartet, bis alles zusammen versandfertig ist. Der Aufpreis für das zweite Paket geht zu Ihren Lasten, dem Käufer werden keine zusätzlichen Versandkosten berechnet. Wählt er die Komplettlieferung, sparen Sie diese Kosten. Die Funktion setzt derzeit das Warenwirtschaftssystem VS/4 von D&G voraus. Außerdem muss die Lagerbestandsverwaltung im Shop aktiv sein.

Wann die Auswahl erscheint

Die Auswahl wird nur angeboten, wenn im Warenkorb mindestens zwei Produkte liegen, die
  • unterschiedlichen Verfügbarkeitsgruppen angehören und
  • von denen mindestens eines nicht sofort lieferbar ist.
Nicht berücksichtigt werden dabei:
  • Produkte ohne Lieferbarkeitsstatus oder ohne Lagerbestandsführung
  • Unterprodukte von Set-Produkten, maßgeblich ist der Status des Set-Oberprodukts
  • Produkte, die Sie ausdrücklich ausgenommen haben
Nehmen Sie alles aus, was nicht über Ihr eigenes Lager läuft, also Streckengeschäfte und Direktversand vom Hersteller. Diese Produkte kommen ohnehin in einem eigenen Paket, sie sagen über die Frage Teil- oder Komplettlieferung nichts aus. Die Kennzeichnung erfolgt in den Produktdaten.

Verfügbarkeitsgruppen bilden

Ein Split lohnt sich nur, wenn die Wartezeit spürbar ist. Deshalb fassen Sie die Lieferstatus zu Gruppen zusammen. Innerhalb einer Gruppe wird nicht gesplittet.
In diesem Beispiel liegen grün und gelb in einer Gruppe. Ein Warenkorb aus grünen und gelben Produkten wird also komplett geliefert. Kommt ein rotes dazu, bekommt der Käufer die Wahl.

Die Auswahl anbieten

Der Block gehört auf die Zahlungs- und Versandartenseite oder auf die Bestellübersicht.

Die Wahl bestätigen

Auf der Bestelleingangsbestätigung und in der Bestätigungsmail sollte stehen, wofür der Käufer sich entschieden hat.
Nach dem Test setzen Sie Allow auf yes. Referenz: Abschnitt PartialDeliverySelection

Wunsch-Liefertermin

Es gibt zwei Ausführungen, die einfache und die erweiterte.
Entscheiden Sie sich für eine der beiden. Stehen beide Abschnitte in der shop.config, arbeitet der Shop nicht zuverlässig.

Die einfache Ausführung

Die Auswahlliste setzen Sie auf die Zahlungs- und Versandartenseite:
Den gewählten Termin geben Sie auf der Bestellübersicht und der Bestätigung aus:
Die einfache Ausführung kennt weder Sonn- und Feiertage noch Ihre Liefertage. Der Käufer kann sich also einen Sonntag aussuchen. Wenn das ein Problem ist, nehmen Sie die erweiterte Ausführung.
Referenz: Abschnitt DeliveryDate · WS-DelivDateFields · WS-DelivDate

Die erweiterte Ausführung

Bei Required = yes gehört eine Hinweismeldung dazu:
Die Auswahlliste heißt hier anders und gehört auf die Bestellübersicht:
Die Feiertagsliste ist eine feste Aufzählung mit Jahreszahlen. Sie läuft ab. Setzen Sie sich eine jährliche Erinnerung, sonst bietet der Shop irgendwann Liefertermine an Weihnachten an.
Schreiben Sie die Bestellzeitgrenze und die Vorlaufzeit als festen Text neben die Auswahlliste. Der Käufer sieht sonst nur, welche Termine fehlen, aber nicht warum. Für einzelne Kunden lassen sich abweichende Liefertage im Kundendatenimport hinterlegen. Fehlt die Angabe, gilt DeliveryDays.

Gestaltung

Referenz: Abschnitt AdvDeliveryDate · WS-AdvDelivDateFields · WS-AdvDelivDate

Versand an mehrere Lieferadressen

Standardmäßig geht eine Bestellung an eine Adresse. Vier aufeinander aufbauende Funktionen erweitern das.
Die vier bauen technisch aufeinander auf. Sie müssen mit MultiDelivery anfangen, die übrigen drei funktionieren nicht ohne.Mit der Umstellung von einer Lieferung auf mehrere greifen manche Filter und Abhängigkeiten der Versandarten nicht mehr. Prüfen Sie Ihre bestehenden Regeln, bevor Sie umstellen.

Vorauswahl der Lieferadresse

Unabhängig von den vier Funktionen steuern Sie, welche Adresse bei Bestandskunden vorausgewählt ist.
Referenz: Abschnitt UserData · Wegweiser: Standard-Lieferadresse festlegen

MultiDelivery einrichten

DeliveryCostCalculation-Mode entscheidet darüber, ob Sie die zusätzlichen Pakete selbst tragen. Stimmen Sie den Wert kaufmännisch ab, bevor Sie produktiv schalten.
Der Käufer wählt die Adressen auf einem eigenen Template aus:
Auf diesem Template kann er zwischen seiner Rechnungsadresse, seinen gespeicherten Lieferadressen, einer einmalig verwendeten und einer neuen Adresse wählen. Die Tags dafür beginnen mit MDM-. Auf der Rechnungs- und Lieferadressseite kommt die Option „An mehrere Adressen liefern” dazu, und zwar zweimal: einmal für Gastbesteller innerhalb {ST-SingleData} und einmal für Bestandskunden innerhalb {ST-MultipleData}.
Dieselbe Übersicht gehört auf die Warenkorbseite, dort ohne die Bedienelemente und mit den Fehlermeldungen. Die Fehlermeldungen kommen als Nummern. Die Klammerung {BASKET-PR-MultiDeliveryAddress_ErrorCode(n)} gibt Ihnen zu jeder Nummer einen eigenen Text. Die vollständige Liste der Gründe steht in der Referenz. Fangen Sie die Fälle ab, die bei Ihnen vorkommen können, und legen Sie für den Rest einen allgemeinen Text an. Auf der Bestellübersicht weisen Sie darauf hin, wenn der Shop Einstellungen korrigieren musste:
Referenz: Split-Order, alle Tags · ST-MultiDeliveryErrorsFixed

Split-Order: eine Position aufteilen

Baut auf MultiDelivery auf. Jede Warenkorbposition lässt sich in frei wählbaren Mengen auf mehrere Adressen verteilen. Welche Produkte das können, legen Sie in den Produktdaten fest, im Feld MultiDeliveryAddressOptions:
Für die Aufteilung können Sie einen Aufpreis verlangen, gestaffelt nach der Anzahl der Adressen:
Jede Klammer besteht aus drei Teilen: Anzahl der Adressen, prozentualer Anteil, fester Betrag. Einer der beiden Kostenteile darf leer bleiben. Der Steuersatz dafür steht im Abschnitt <VAT>:
Den Gesamtaufpreis geben Sie im Warenkorb und auf der Bestellübersicht aus:
Soll der Käufer seine Rechnungsadresse mehrfach auswählen dürfen:
Weisen Sie auf eine verbleibende Restmenge deutlich hin. Solange nicht die gesamte Menge einer Position auf Adressen verteilt ist, lässt sich die Bestellung nicht abschließen. Das Tag dafür ist {BASKET-PR-D-MultiDataquantityleft}.

Belegexemplare (SampleCopy)

Baut auf Split-Order auf. Gedacht für Druckaufträge, bei denen der Besteller einige Exemplare an eine eigene Adresse geschickt bekommt. Die Konfiguration steht ebenfalls in den Produktdaten, hinter dem mda-Block:
Belegexemplare bleiben bei der Kostenstaffel für Split-Order außen vor. Ist als Berechnungsart CalculateSeparateForEachPositionAndUsedDeliveryAddress eingestellt, fallen für das Belegexemplar die normalen Versandkosten der Versandart an.

MultiDelivererSelection: eine Versandart je Position

Baut auf MultiDelivery auf. Der Käufer wählt die Versandart nicht mehr für den ganzen Warenkorb, sondern je Position und je Adresse.
Diese Funktion arbeitet nicht mit dem Einzel-Tag ~WS-DeliveryFields~. Sie brauchen die Ausgabe über die DELIV-Data-Tags, und die Auswahl muss innerhalb der Warenkorbschleife {@BASKET-PR-Data} stehen.
Der Aufbau folgt drei Fällen, die Sie im Template unterscheiden:
Lagern Sie die Versandartenauswahl in einen Include aus. Sie kommt in diesem Aufbau viermal vor, und Sie wollen sie nicht viermal pflegen. Die gewählte Versandart geben Sie überall dort aus, wo auch die Lieferadresse steht:

Was mit dieser Funktion nicht mehr geht

Die Umstellung hat spürbare Folgen. Die folgenden Funktionen werden nicht unterstützt:
  • der Wunschtermin über den Frachtkostenkalkulator
  • Eigenhändig Plus
  • die Abhängigkeit vom Lagerbestand über AllowForInventoryStateAtLeast
  • die Abhängigkeit von Produkten über DeliveryFilterID-List
  • das Tag ~WS-FreeDeliveryRest~ für den Restbetrag bis zur versandkostenfreien Lieferung
Weitere Einschränkungen:
  • DeliveryCostCalculation-Mode wird nicht beachtet, die Versandkosten fallen immer je Adresse und Versandart an
  • die globalen Tags ~WS-Delivery~, ~WS-DeliveryID~ und ~WS-DeliveryIndex~ liefern nur die erste verwendete Versandart, ebenso die Texte aus Country-Txt und Suffix-Txt und die Variable in der Trackingschnittstelle
  • bei easyCredit wird die erste verwendete Versandart übermittelt
  • BookDeliveryType entfällt, die Entscheidung Büchersendung fällt je Position
  • beim Bestellgenerator wird die gewünschte Versandart vorbelegt, falls das nicht möglich ist die erste verfügbare
Gehen Sie diese Liste vor der Umstellung durch. Mehrere der genannten Punkte betreffen Funktionen, die in bestehenden Shops verbreitet sind, und sie fallen ohne Fehlermeldung weg.
Referenz: ST-MultiDelivererSelection · Alle DELIV-Data-Tags

Verwandte Themen