> ## Documentation Index
> Fetch the complete documentation index at: https://dokumentation.websale.de/llms.txt
> Use this file to discover all available pages before exploring further.

# Erweiterte Einstellungen beim Anlegen von Versandarten

> Versandarten abhängig machen von Produkten, Lagerbestand, Gewicht, Kunde, Adressdaten und Referer, Zusatzleistungen anbieten und nicht verfügbare Versandarten ausgegraut darstellen.

Über die Grundeinstellungen hinaus lässt sich für jede Versandart festlegen, unter welchen Bedingungen sie überhaupt angeboten wird. Die Bedingungen können am Warenkorb hängen, am Kunden, an der Adresse oder daran, über welchen Link der Shop aufgerufen wurde.

Alle diese Einstellungen haben dieselbe Gefahr: Jede zusätzliche Bedingung kann dazu führen, dass für eine bestimmte Kombination gar keine Versandart mehr übrig bleibt. Sichern Sie sich deshalb ab, bevor Sie anfangen.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Basic>
   DeliveryRequiredForOrder-Allow = yes
</Basic>
```

> [!WARNING]
>
> Damit kann eine Bestellung nicht abgeschlossen werden, solange keine Versandart gewählt ist. Ohne diese Absicherung bemerken Sie einen Konfigurationsfehler erst an Bestellungen ohne Versandart, und die fallen meist erst in der Warenwirtschaft auf.

Sorgen Sie außerdem dafür, dass immer mindestens eine Versandart ohne Bedingungen übrig bleibt.

Referenz: [Abschnitt Basic](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/grundlagen-und-technik.md#basic)

## Versandart abhängig vom Produkt

Manche Waren gehen nur per Spedition. Sobald eine Tischtennisplatte im Warenkorb liegt, soll der Paketversand verschwinden.

Dazu bekommen die Produkte in den Produktdaten eine Kennung im Feld `DeliveryFilterID`, und die Versandarten geben an, mit welchen Kennungen sie arbeiten.

### Schritt 1: Testbetrieb einschalten

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Delivery>
   DeliveryFilterID-Mode = test
</Delivery>
```

Im Testbetrieb greifen die Regeln nur, solange der Shop im allgemeinen Testmodus läuft. Am Ende stellen Sie auf `productive` um.

### Schritt 2: Produkte kennzeichnen

Tragen Sie in den Produktdaten im Feld `DeliveryFilterID` die gewünschte Kennung ein, beispielsweise `spedition`.

### Schritt 3: Versandarten zuordnen

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<+Deliverer>
   Name-Txt              = Lieferung per Spedition
   DeliveryFilterID-List = spedition
</+Deliverer>
```

Diese Versandart erscheint, wenn im Warenkorb mindestens ein Produkt mit der Kennung `spedition` liegt **und** kein Produkt mit einer anderen Kennung. Produkte ganz ohne Kennung stören nicht.

Mehrere Kennungen in einer Liste werden mit UND verknüpft:

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<+Deliverer>
   Name-Txt              = Express-Spedition
   DeliveryFilterID-List = spedition,express
</+Deliverer>
```

Diese Versandart erscheint nur, wenn von **jeder** der beiden Kennungen mindestens ein Produkt im Warenkorb liegt und kein Produkt eine dritte Kennung trägt.

Eine leere Liste bedeutet das Gegenteil:

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<+Deliverer>
   Name-Txt              = Paketversand
   DeliveryFilterID-List =
</+Deliverer>
```

Diese Versandart erscheint nur, wenn **kein** Produkt im Warenkorb eine Kennung trägt.

### Die Variante mit dem Pluszeichen

Wenn Sie viele Kombinationen abbilden wollen, müssten Sie den ganzen `<+Deliverer>`-Abschnitt für jede Kombination wiederholen. Das Pluszeichen erspart Ihnen das: mehrere `+DeliveryFilterID-List`-Zeilen in einem Abschnitt werden mit ODER verknüpft.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<+Deliverer>
   Name-Txt               = DHL
   +DeliveryFilterID-List = standard
   +DeliveryFilterID-List = warensendung
</+Deliverer>
```

Diese Versandart erscheint, wenn der Warenkorb entweder zur Kennung `standard` oder zur Kennung `warensendung` passt.

> [!WARNING]
>
> Sie erscheint **nicht**, wenn beide Kennungen gleichzeitig im Warenkorb liegen. Jede Zeile beschreibt eine vollständige Kombination, nicht eine einzelne erlaubte Kennung. Für den gemischten Fall brauchen Sie eine weitere Zeile mit `standard,warensendung`.

Steht im Abschnitt ein `DeliveryFilterID-List` ohne Pluszeichen, werden alle `+DeliveryFilterID-List`-Zeilen ignoriert. Mischen Sie die beiden Schreibweisen also nicht.

### Schritt 4: Produktiv schalten

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Delivery>
   DeliveryFilterID-Mode = productive
</Delivery>
```

Referenz: [Abschnitt Delivery](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/versand-und-lieferung.md#delivery)

## Versandart abhängig vom Lagerbestand

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<+Deliverer>
   AllowForInventoryStateAtLeast = green
</+Deliverer>
```

Die Versandart erscheint, wenn im Warenkorb mindestens ein Produkt mit dem angegebenen Lieferstatus liegt. Bei mehreren Werten in der Liste muss von **jedem** mindestens ein Produkt vorhanden sein.

| Warenkorb | `green` | `green,yellow` |
| - | - | - |
| grün, gelb, rot | verfügbar | verfügbar |
| grün, gelb | verfügbar | verfügbar |
| nur grün | verfügbar | nicht verfügbar |
| nur gelb | nicht verfügbar | nicht verfügbar |

> [!WARNING]
>
> Ein Produkt ohne Lagerbestandsführung zählt wie ein Produkt mit dem Status „grün". Wenn Sie nicht alle Produkte in der Lagerbestandsverwaltung haben, wirkt die Bedingung anders als erwartet.

## Versandart abhängig von Gewicht und Volumen

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<+Deliverer>
   Name-Txt  = Standardversand
   MaxWeight = 31.50
</+Deliverer>

<+Deliverer>
   Name-Txt  = Speditionsversand
   MinWeight = 31.51
</+Deliverer>
```

| Parameter | Bedeutung |
| - | - |
| `MinWeight` | Mindestgewicht des Warenkorbs |
| `MaxWeight` | Höchstgewicht |
| `MinVolume` | Mindestvolumen |
| `MaxVolume` | Höchstvolumen |

> [!WARNING]
>
> Die Werte stehen **ohne Maßeinheit** in der Konfiguration. Maßgeblich ist die Einheit Ihrer Produktdaten. Bei Gewichten in Gramm heißt 31,5 Kilogramm hier `31500`.

Lassen Sie zwischen Höchst- und Mindestwert keine Lücke. Im Beispiel oben schließen 31.50 und 31.51 nahtlos aneinander an. Stünde dort 31.50 und 32, bliebe für einen Warenkorb von 31,7 Kilogramm keine Versandart übrig.

Voraussetzung ist, dass die Produkte überhaupt ein Gewicht beziehungsweise ein Volumen hinterlegt haben.

## Versandart nur bestimmten Kunden anbieten

Eine typische Anforderung im Geschäftskundenbereich. Die Berechtigung kommt aus der Warenwirtschaft und wird über den Kundendatenimport in das Feld `Warranty` geschrieben, als kommagetrennte Liste alphanumerischer Berechtigungs-IDs.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<+Deliverer>
   Allow    = yes
   Name-Txt = DHL
   Warranty = 1,2
</+Deliverer>
```

Die Versandart erscheint, wenn der Käufer zu mindestens einer der genannten Berechtigungsgruppen gehört.

Der Parameter heißt auf beiden Seiten `Warranty`, im Kundendatenimport und im `<+Deliverer>`-Abschnitt. Das ist Absicht und keine Verwechslung.

## Kostenpflichtige Zusatzleistungen anbieten

Eine Transportversicherung oder ein Auspackservice sind keine eigenen Versandarten, sondern Zusatzleistungen, die der Käufer zur gewählten Versandart dazunehmen kann. Der Shop unterstützt bis zu fünf Zusatzleistungen mit je bis zu fünfzig Einträgen.

### Schritt 1: Zusatzleistung definieren

Die Einträge stehen in den Abschnitten `<OrderOptions1>` bis `<OrderOptions5>`. Die Kosten je Eintrag können fest oder als Prozentsatz des Warenwerts angesetzt werden.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<OrderOptions1>
   <+Entry>
      Display-Txt = Transportversicherung für ~Cost~ ~WS-Currency~{AltCurrencyCost} (= ~AltCurrencyCost~ ~AltCurrencySymbol~){/AltCurrencyCost}
   </+Entry>
</OrderOptions1>
```

Im `Display-Txt` stehen lokale Tags zur Verfügung, mit denen Sie den Preis einrechnen lassen, statt ihn hinzuschreiben. Ändern Sie später den Betrag, ändert sich der Text von selbst mit.

### Schritt 2: Auf der Zahlungs- und Versandartenseite ausgeben

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
~WS-OrderOptions(1)~
```

Die Zahl wählt aus, welche der fünf Zusatzleistungen ausgegeben wird.

### Schritt 3: Im Warenkorb mitrechnen

Damit die Kosten in der Gesamtsumme landen und sichtbar sind, gehört das Tag `~BASKET-OrderOptionCost~` in die entsprechende Schleife auf der Warenkorbseite.

Die Einträge einer Zusatzleistung erzeugt der Shop selbst und versieht sie mit eigenen Klassennamen. Sie gestalten sie über CSS, ohne das Markup anzufassen.

Referenz: Abschnitte OrderOptions1 bis OrderOptions5 · [WS-OrderOptions()](https://dokumentation.websale.de/v8s/referenz/tags/ws/bestellprozess-adressen-und-pruefungen.md#die-tags-im-uberblick) · [BASKET-OrderOptionCost](https://dokumentation.websale.de/v8s/referenz/tags/basket/warenkorbsummen.md#kostenpflichtige-zusatzleistungen)

## Versandkostenfreie Nachbestellung

Wer gerade bestellt hat und etwas vergessen hat, soll nicht noch einmal Versandkosten zahlen. Sie legen einen Zeitraum fest, innerhalb dessen eine weitere Bestellung als Folgebestellung gilt, und bieten dafür eigene Versandarten an.

### Schritt 1: Zeitraum festlegen

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<OrderConditions>
   SubSequentOrder-TimeLimitInHours                     = 24
   SubSequentOrder-ConsiderOrdersFromOtherSubShops-List =
</OrderConditions>
```

Der zweite Parameter bestimmt, ob auch Bestellungen aus anderen Subshops zählen.

### Schritt 2: Versandarten kennzeichnen

Jede Versandart muss zugeordnet werden, auch die normalen.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<+Deliverer>
   Name-Txt                              = Versandkostenfreie Nachbestellung
   BasicCost-List                        = (0:0)
   AllowForSubsequentOrder-Qualification  = only-for-SubSequentOrder
</+Deliverer>

<+Deliverer>
   Name-Txt                              = Standardversand
   BasicCost-List                        = (0:4.95)
   AllowForSubsequentOrder-Qualification  = not-for-SubSequentOrder
</+Deliverer>
```

> [!WARNING]
>
> Vergessen Sie den Parameter bei einer der übrigen Versandarten, erscheint diese sowohl bei normalen Bestellungen als auch bei Folgebestellungen. Der Käufer bekommt dann die kostenpflichtige und die kostenlose Variante nebeneinander angeboten.

### Schritt 3: Den Käufer darauf hinweisen

Der Hinweis lohnt sich nur, wenn er konkret ist. Mit den verfügbaren Tags lässt sich die verbleibende Zeit als Countdown oder als fester Zeitpunkt ausgeben.

| Tag | Liefert |
| - | - |
| `~WS-SubSequentOrder_Qualified~` | ob diese Bestellung als Folgebestellung gilt |
| `~WS-SubSequentOrder_TimeLeftInSeconds~` | die verbleibende Zeit in Sekunden |
| `~WS-SubSequentOrder_TimestampExpire~` | den Zeitpunkt, bis zu dem der Zeitraum läuft |
| `~WS-SubSequentOrder_TimestampLastOrder~` | den Zeitpunkt der vorangegangenen Bestellung |
| `~WS-SubSequentOrder_TimeLimitInHours~` | den eingestellten Zeitraum in Stunden |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
Ihre Bestellung gilt bis
~DC-DateTime_setunixtimestamp($WS-SubSequentOrder_TimestampExpire$)~
~DC-DateTime_day(true)~.~DC-DateTime_month(true)~.~DC-DateTime_year(true)~
um ~DC-DateTime_hours(true)~:~DC-DateTime_minutes(true)~ Uhr
als Folgebestellung.
```

Ein fester Zeitpunkt ist dem Countdown meist vorzuziehen. Er bleibt auch dann richtig, wenn der Käufer die Seite eine Weile offen liegen lässt, und er drängt weniger.

Referenz: [Abschnitt OrderConditions](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/warenkorb-und-bestellprozess.md#orderconditions) · DC-DateTime-Tags

## Drei Bausteine nach gemeinsamem Muster

Die folgenden drei Einstellungen funktionieren nach demselben Prinzip, und es lohnt sich, das einmal zu verstehen statt dreimal.

1. Sie definieren einen Satz von Bedingungen oder Texten in einem eigenen Abschnitt der `shop.config`.
2. Dieser Satz bekommt eine Kennung.
3. Im `<+Deliverer>`-Abschnitt verweisen Sie nur noch auf die Kennung.

Der Vorteil: Sie pflegen die Bedingung einmal und weisen sie beliebig vielen Versandarten zu, statt sie in jedem Abschnitt zu wiederholen.

| Abschnitt | Wofür | Zuweisung im `<+Deliverer>` |
| - | - | - |
| `<DelivererAddressDependencies-Definitions>` | Versandart abhängig von Adressdaten | `+UseAddressDependency-ID` |
| `<DelivererShowDisabled-Definitions>` | nicht verfügbare Versandarten ausgegraut zeigen | `UseShowDisabled-GroupID` |
| `<DelivererAdditionalInput-Definitions>` | Zusatzangaben vom Käufer abfragen | `+UseAdditionalInput-ID` |

### Versandart abhängig von Adressdaten

Typische Fälle: Bei Lieferung an eine Packstation soll nur der Dienstleister erscheinen, der dorthin liefert. Bei Selbstabholung soll gar keine abweichende Lieferadresse möglich sein.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<DelivererAddressDependencies-Definitions>
   <+AddressDependency>
      AddressDependency-ID = nicht_fuer_packstation
      <+DependencyGroup>
         <+Dependency>
            Input = delivaddress
            <+Condition>
               Field = suffix5
               Type  = notvalue
               Value = DHL Packstation
            </+Condition>
         </+Dependency>
      </+DependencyGroup>
   </+AddressDependency>
</DelivererAddressDependencies-Definitions>
```

Diese Bedingung ist erfüllt, solange im Lieferadressfeld `suffix5` **nicht** „DHL Packstation" steht. Weisen Sie sie allen Versandarten zu, die dann verschwinden sollen:

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<+Deliverer>
   Name-Txt                 = UPS
   +UseAddressDependency-ID = nicht_fuer_packstation
</+Deliverer>
```

Die Verschachtelung folgt einer festen Logik:

| Ebene | Ist erfüllt, wenn |
| - | - |
| Versandart | **alle** zugewiesenen `AddressDependency-ID` erfüllt sind |
| `<+AddressDependency>` | **mindestens eine** `<+DependencyGroup>` erfüllt ist |
| `<+DependencyGroup>` | **alle** `<+Dependency>` erfüllt sind |
| `<+Dependency>` | **alle** `<+Condition>` erfüllt sind |

Merken lässt sich das als Wechsel: UND, ODER, UND, UND. Die ODER-Ebene ist die `AddressDependency`, alles andere ist UND-verknüpft.

Referenz: [Abschnitt DelivererAddressDependencies-Definitions](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/versand-und-lieferung.md#delivereraddressdependencies-definitions)

### Nicht verfügbare Versandarten ausgegraut darstellen

Verschwindet eine Versandart einfach, sucht der Käufer nach ihr. Besser ist es, sie ausgegraut zu zeigen und den Grund dazuzuschreiben.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<DelivererShowDisabled-Definitions>
   <+ShowDisabled-Rule>
      ShowDisabled-GroupID                      = versandart_nicht_verfuegbar
      ShowDisabled-Allow                        = always
      ShowDisabled-MultipleEntriesDisabled-Mode = show-first
      <ShowDisabled-Txt>
          1       = Für das gewählte Lieferland steht diese Versandart nicht zur Verfügung.
          9       = Nicht für Büchersendungen.
         28       = Bei Abholung vor Ort liefern wir nicht an eine abweichende Adresse.
         default  = Diese Versandart steht für Ihre Bestellung nicht zur Verfügung.
      </ShowDisabled-Txt>
   </+ShowDisabled-Rule>
</DelivererShowDisabled-Definitions>
```

| Parameter | Bedeutung |
| - | - |
| `ShowDisabled-GroupID` | die Kennung, über die Sie die Regel zuweisen |
| `ShowDisabled-Allow` | `always` zeigt immer, `never` nie, eine kommagetrennte Liste von Gründen zeigt nur diese |
| `ShowDisabled-MultipleEntriesDisabled-Mode` | `show-first` zeigt nur die erste nicht verfügbare Versandart, die übrigen bleiben ausgeblendet |

Die Zahlen im Abschnitt `<ShowDisabled-Txt>` sind die Ablehnungsgründe des Shops. Zu jedem hinterlegen Sie einen eigenen Text, für alle übrigen greift `default`.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<+Deliverer>
   Name-Txt                = Abholung in unserer Filiale
   UseShowDisabled-GroupID = versandart_nicht_verfuegbar
</+Deliverer>
```

> [!WARNING]
>
> Legen Sie in jedem Fall einen `default`-Text an. Ohne ihn bleibt die ausgegraute Versandart ohne Begründung stehen, was verwirrender ist als sie auszublenden.

Formulieren Sie die Texte so, dass der Käufer erkennt, was er ändern könnte. „Nicht verfügbar" hilft ihm nicht, „Entfernen Sie die abweichende Lieferadresse" schon.

Referenz: [Abschnitt DelivererShowDisabled-Definitions](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/versand-und-lieferung.md#deliverershowdisabled-definitions)

### Zusatzinformationen zur Versandart abfragen

Eine Spedition braucht eine Telefonnummer, um den Liefertermin abzustimmen. Das Feld soll aber nur erscheinen, wenn der Käufer nicht ohnehin schon eine Telefonnummer angegeben hat.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<DelivererAdditionalInput-Definitions>
   <+AdditionalInput>
      ID                       = telefon_spedition
      FieldDescr               = Telefonnummer für Rückfragen
      MaxLength                = 120
      Required                 = no
      Type                     = input
      AdditionalInfoText       = Die Spedition stimmt den Liefertermin mit Ihnen ab.
      RequiredErrorMessage-Txt = Bitte geben Sie eine Telefonnummer an.

      <+VisibilityDependency>
         <+Dependency>
            Input = billaddress
            <+Condition>
               Field = Phone
               Type  = empty
            </+Condition>
         </+Dependency>
      </+VisibilityDependency>

      <+RequiredDependency>
         <+Dependency>
            Input = billaddress
            <+Condition>
               Field = Phone
               Type  = empty
            </+Condition>
         </+Dependency>
      </+RequiredDependency>
   </+AdditionalInput>
</DelivererAdditionalInput-Definitions>
```

| Parameter | Bedeutung |
| - | - |
| `ID` | die Kennung, über die Sie das Feld zuweisen |
| `FieldDescr` | die Beschriftung |
| `Type` | `input`, `checkbox` oder `listbox` |
| `MaxLength` | maximale Eingabelänge |
| `Required` | ob die Eingabe Pflicht ist |
| `AdditionalInfoText` | Erläuterung unter dem Feld |
| `RequiredErrorMessage-Txt` | Fehlertext bei fehlender Pflichteingabe |

Bei `Type = listbox` hängen Sie die Einträge als `<+listentry>` an:

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<+AdditionalInput>
   ID   = lieferzeitfenster
   Type = listbox
   <+listentry>
      ID        =
      Entry-Txt = Bitte auswählen
   </+listentry>
   <+listentry>
      ID        = 1
      Entry-Txt = vormittags (8 bis 12 Uhr)
   </+listentry>
   <+listentry>
      ID        = 2
      Entry-Txt = nachmittags (12 bis 16 Uhr)
   </+listentry>
</+AdditionalInput>
```

Zuweisen können Sie mehrere Felder. Die Reihenfolge der Zeilen bestimmt die Reihenfolge im Shop.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<+Deliverer>
   Name-Txt               = Versand per Spedition
   +UseAdditionalInput-ID = telefon_spedition
   +UseAdditionalInput-ID = lieferzeitfenster
</+Deliverer>
```

Dazu gehört eine Hinweismeldung:

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<NotifyMessages-Txt>
   DelivererAdditionalInput = Bitte ergänzen Sie die fehlenden Angaben zur gewählten Versandart.
</NotifyMessages-Txt>
```

> [!WARNING]
>
> `Required` und `<+RequiredDependency>` schließen einander aus. Soll die Eingabe immer Pflicht sein, setzen Sie `Required = yes` und lassen den Abhängigkeitsblock weg. Soll sie es nur unter Bedingungen sein, setzen Sie `Required = no` und steuern es über `<+RequiredDependency>`. Dasselbe gilt für die Sichtbarkeit.

Die abgefragten Angaben landen in den Bestelldaten. Klären Sie mit dem Verantwortlichen für die Warenwirtschaft, ob sie dort verarbeitet werden können, bevor Sie ein Pflichtfeld einbauen.

Wie die Felder im Template ausgegeben werden, steht auf der Seite zur Ausgabe im Bestellprozess.

Referenz: [Abschnitt DelivererAdditionalInput-Definitions](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/versand-und-lieferung.md#delivereradditionalinput-definitions) · Wegweiser: Ausgabe der Versandarten im Bestellprozess

## Versandart abhängig vom Referer

Sie können Versandarten davon abhängig machen, über welchen Link der Shop aufgerufen wurde. Damit lässt sich beispielsweise eine Kampagne mit kostenlosem Versand abbilden.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<+Deliverer>
   ID                  = 1
   Name-Txt            = Standardversand
   BasicCost-List      = (0:4.95)
   DenyForReferer-List = versandkostenfrei
</+Deliverer>

<+Deliverer>
   ID                            = 3
   Name-Txt                      = Versandkostenfreie Lieferung
   BasicCost-List                = (0:0)
   AllowForReferer-List          = versandkostenfrei
   AllowForReferer-Qualification = only-for-referer
</+Deliverer>
```

| Parameter | Bedeutung |
| - | - |
| `AllowForReferer-List` | kommagetrennte Liste der Referer, bei denen die Versandart verfügbar ist |
| `DenyForReferer-List` | kommagetrennte Liste der Referer, bei denen sie nicht verfügbar ist |
| `AllowForReferer-Qualification` | `only-for-referer` macht die Versandart ausschließlich bei diesem Referer verfügbar |

Beim Aufruf über `?ref=versandkostenfrei` verschwinden im Beispiel die kostenpflichtigen Versandarten, und nur die kostenfreie bleibt.

> [!WARNING]
>
> Der Referer ist ein URL-Parameter und für jeden sichtbar und veränderbar. Verwenden Sie diesen Mechanismus für Kampagnensteuerung, nicht für etwas, das nicht umgangen werden darf.

## Versandart abhängig von Produktdatenfeldern

Feiner als die `DeliveryFilterID` steuert dieser Weg: Sie können die Verfügbarkeit an die Produktnummer, den Produktindex oder ein freies Produktfeld binden.

Ein häufiger Fall ist der Versand mit Altersprüfung. Liegt ein Produkt mit Altersbeschränkung im Warenkorb, soll nur die Versandart mit Ident-Check erscheinen.

### Schritt 1: Freies Produktfeld bereitstellen

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<AdditionalProductFieldsInBasket>
   +Field = FSK18
</AdditionalProductFieldsInBasket>
```

Den betroffenen Produkten geben Sie in diesem Feld den Wert `y`.

### Schritt 2: Zwei Bedingungen definieren

Sie brauchen zwei: eine für die Versandart, die erscheinen soll, und eine für alle, die verschwinden sollen.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<DelivererProductDependencies-Definitions>
   <+ProductDependency>
      ProductDependency-ID = fsk18
      ShowDisabled-Txt     = Für dieses Produkt ist eine Altersprüfung bei der Zustellung nötig.
      <+DependencyGroup>
         <+Dependency>
            <+Condition>
               Field          = AF-FSK18
               Type           = value
               Value          = y
               BasketBehavior = match-once
            </+Condition>
         </+Dependency>
      </+DependencyGroup>
   </+ProductDependency>

   <+ProductDependency>
      ProductDependency-ID = nicht_fsk18
      <+DependencyGroup>
         <+Dependency>
            <+Condition>
               Field = AF-FSK18
               Type  = notvalue
               Value = y
            </+Condition>
         </+Dependency>
      </+DependencyGroup>
   </+ProductDependency>
</DelivererProductDependencies-Definitions>
```

Ein freies Produktfeld sprechen Sie in der Bedingung mit dem Präfix `AF-` an. Aus dem Feld `FSK18` wird also `AF-FSK18`. Für Produktnummer und Produktindex gilt das nicht.

`BasketBehavior = match-once` bedeutet, dass ein einziges passendes Produkt im Warenkorb genügt.

### Schritt 3: Zuweisen

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<+Deliverer>
   Name-Txt                 = Paketversand mit Ident-Check
   +UseProductDependency-ID = fsk18
</+Deliverer>

<+Deliverer>
   Name-Txt                 = DHL Paketversand
   +UseProductDependency-ID = nicht_fsk18
</+Deliverer>
```

Liegt ein Produkt mit `FSK18 = y` im Warenkorb, bleibt nur die Versandart mit Ident-Check übrig.

Referenz: [Abschnitt DelivererProductDependencies-Definitions](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/versand-und-lieferung.md#delivererproductdependencies-definitions) · Wegweiser: [Freie Produktfelder im Warenkorb anzeigen](https://dokumentation.websale.de/v8s/warenkorb/freie-produktfelder-im-warenkorb-anzeigen.md)

## Einstellungen testen

Rufen Sie den Shop im allgemeinen Testmodus auf und gehen Sie die Warenkorbkombinationen durch, die in Ihrem Sortiment vorkommen können.

```text theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
https://www.ihre-shop-url.de/?test=on
```

> [!WARNING]
>
> Prüfen Sie besonders die gemischten Warenkörbe. Fehler in der Versandartensteuerung zeigen sich fast nie bei einem einzelnen Produkt, sondern erst bei einer Kombination, an die beim Einrichten niemand gedacht hat.

Wegweiser: [Testmodi des Shops ein- und ausschalten](https://dokumentation.websale.de/v8s/domains/testmodi-des-shops-ein-ausschalten.md)

## Verwandte Themen

* Wegweiser: [Versandarten anlegen, für die Grundeinstellungen](https://dokumentation.websale.de/v8s/versandarten-anlegen/versandarten-anlegen.md)
* Wegweiser: [Ausgabe der Versandarten im Bestellprozess](https://dokumentation.websale.de/v8s/versandarten-anlegen/ausgabe-im-bestellprozess.md)
* Wegweiser: [Spezielle Versandarten](https://dokumentation.websale.de/v8s/versandarten-anlegen/spezielle-versandarten.md)


## Related topics

- [Versandarten anlegen](https://dokumentation.websale.de/v8s/versandarten-anlegen/versandarten-anlegen.md)
- [Spezielle Versandarten](https://dokumentation.websale.de/v8s/versandarten-anlegen/spezielle-versandarten.md)
- [Ausgabe der Versandarten im Bestellprozess](https://dokumentation.websale.de/v8s/versandarten-anlegen/ausgabe-im-bestellprozess.md)
- [Fragebogen Kaufmännische Einstellungen](https://dokumentation.websale.de/v8s/materialien/fragebogen-kaufmaennische-einstellungen.md)
- [Erweiterte Suche](https://dokumentation.websale.de/v8s/suche/erweiterte-suche.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.