> ## 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.

# Shopkonfiguration global.config

> Die subshop-übergreifende Konfigurationsdatei des Shops: anlegen, welche Programme sie lesen, und alle Abschnitte von ChargeLabel bis VoucherNumberCharacters mit ihren Parametern.

Die global.config ist die subshop-übergreifende Konfigurationsdatei eines Shops. Was hier steht, gilt für alle Subshops gemeinsam. Eine abweichende Einstellung auf Subshop-Ebene ist nicht vorgesehen, dafür ist die Shopkonfiguration shop.config zuständig.

Im Auslieferungszustand eines Shops gibt es diese Datei nicht. Sie entsteht erst, wenn eine Funktion sie braucht, und sie enthält dann auch nur die Abschnitte dieser Funktionen. Es gibt keine Standardfassung, die man vollständig ausfüllen müsste.

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

## Die Datei anlegen

Die global.config liegt im Online-Servicebereich im Dienst "Konfiguration" direkt unter "Global". Um sie anzulegen, klicken Sie rechts neben dem Wort "Konfigurationen" auf das Symbol "neue Konfiguration anlegen" und geben der neuen Konfiguration den Namen **global**. Die Endung ergänzt das System selbst.

![20180724 Global Config](https://mintcdn.com/websaleag-44ee7ea6/EhLuJrBL2-kmBUWY/images/20180724_global-config.png?fit=max\&auto=format\&n=EhLuJrBL2-kmBUWY\&q=85\&s=26ebf9e4f4bf1736397f9d32ef92c683)

Danach liegt eine leere Konfigurationsdatei vor, in die Sie die benötigten Abschnitte eintragen.

## Wer die Datei liest

Die global.config wird nicht nur vom Shopsystem selbst ausgewertet. Je nach Abschnitt liest sie ein anderes Programm, und das erklärt, warum sich manche Änderungen sofort auswirken und andere erst mit dem nächsten Lauf eines Hintergrundprogramms.

| Abschnitt | Zweck | Wird gelesen von |
| - | - | - |
| `ChargeLabel` | Label der Gutschein-Charge zum Pflichtfeld machen | Gutscheinverwaltung |
| `ChargeLabelValues` | Auswahlliste der Chargen-Labels | Gutscheinverwaltung |
| `Common` | einzelne Grundeinstellungen des Shops | Shopsystem |
| `Conversions` | Kodierung der Zusatzeingaben in den Bestelldaten | Shopsystem |
| `CustomerImportPro` | Kundenimport | Importprogramm |
| `FuturaECS` | Lagerbestandsabruf aus Futura | Importprogramm |
| `ImportCharsetConvertMap` | Zeichensatzumwandlung beim Import | Importprogramme |
| `ProductDataFieldInjection` | Produktdatenfelder für Testszenarien setzen | Shopsystem |
| `ProductImportPro` | Produktimport | Importprogramm |
| `SpecialUserCodes` | Suffixfelder der Rechnungsadresse über einen Code füllen | Shopsystem |
| `SpecialW2PConditions` | Bedingungen für bedingt Web-to-Print-fähige Produkte | Shopsystem |
| `SubShopMapping` | Subshops zu Gruppen zusammenfassen | Shopsystem und Importprogramme |
| `TopSeller` | Topseller-Sortierung und Top-30-Produkte | Auswertungsprogramm |
| `VoucherNumberCharacters` | Zeichen von der Gutscheinnummer ausschließen | Gutscheinverwaltung |

Das Shopsystem liest die global.config bei Bedarf innerhalb eines Seitenaufrufs. Änderungen an den Abschnitten, die das Shopsystem auswertet, greifen deshalb unmittelbar. Die Abschnitte für Importe, Auswertungen und die Gutscheinverwaltung werden erst beim nächsten Lauf des jeweiligen Programms oder beim nächsten Aufruf der jeweiligen Seite im Servicebereich gelesen.

## Common

Der Abschnitt sammelt einzelne Grundeinstellungen, die zu keinem eigenen Abschnitt gehören.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Common>
   ProductData-ResetOnEmptySetDefinition       =
   ProductData-ResetOrgPriceWhenOrgPricesIsEmpty =
   FORMTagsResetInputCounter                   =
   OrderFile-WriteCCDataOnApplePay             =
   OrderFile-WriteCCDataOnGooglePay            =
   MaxRedeemableVouchers                       =
</Common>
```

| Parameter | Beschreibung | Werte |
| - | - | - |
| `ProductData-ResetOnEmptySetDefinition` | Liefert ein Import für eine abhängige Variante eine leere Set-Definition, dann wird die bestehende Definition als Set-Produkt zurückgesetzt. Ohne diesen Parameter bleibt die alte Definition stehen. | `yes`, `no`. Standard `no` |
| `ProductData-ResetOrgPriceWhenOrgPricesIsEmpty` | Dieselbe Mechanik für den Streichpreis. Liefert der Import keinen Streichpreis mehr, dann wird der bestehende gelöscht statt beibehalten. | `yes`, `no`. Standard `no` |
| `FORMTagsResetInputCounter` | Setzt den internen Zähler für Formularfeldnamen bei jedem neuen `form`-Element auf 1 zurück. Ohne diesen Parameter zählt das Shopsystem über alle Formulare einer Seite hinweg durch. | `yes`, `test`, `no`. Standard `no` |
| `OrderFile-WriteCCDataOnApplePay` | Steuert, ob die Kreditkartendaten bei einer Zahlung über Apple Pay in die Bestelldaten geschrieben werden. | `yes`, `no`. Standard `yes` |
| `OrderFile-WriteCCDataOnGooglePay` | Dasselbe für Google Pay. | `yes`, `no`. Standard `yes` |
| `MaxRedeemableVouchers` | Höchstzahl gleichzeitig einlösbarer Gutscheine, den ersten mitgezählt. Werte außerhalb des gültigen Bereichs werden auf die nächstgelegene Grenze gezogen. | Ganzzahl 1 bis 10. Standard 10 |

> [!WARNING]
>
> In der Altdokumentation steht unter `ProductData-ResetOnEmptySetDefinition` die Beschreibung eines anderen Parameters. Dort wird der Input-Zähler für Formularfelder erklärt, und auch die dort genannten Werte `yes`, `test` und `no` gehören zu diesem anderen Parameter. Gemeint ist `FORMTagsResetInputCounter`. Beide Parameter sind oben getrennt beschrieben. `ProductData-ResetOnEmptySetDefinition` kennt nur `yes` und `no` und hat mit Formularen nichts zu tun.

`FORMTagsResetInputCounter` ist vor allem auf Seiten sinnvoll, die Produktdaten dynamisch vorladen, beispielsweise über `CAT-AdvData` oder `CAT-LoadData`. Liegen dort mehrere Produktformulare auf einer Seite, dann können sich die fortlaufend vergebenen Feldnamen überschneiden und Eingaben dem falschen Formular zugeordnet werden. Mit `test` schalten Sie die Umstellung zunächst nur im Testmodus des Shops scharf und prüfen die Auswirkung, bevor Sie auf `yes` gehen.

## Conversions

Legt fest, ob die Zusatzeingaben zu Produkten hex-kodiert in die Bestelldaten übergeben werden. Das ist dann nötig, wenn die Eingaben Zeichen enthalten können, die das Format der Bestelldaten stören, beispielsweise Zeilenumbrüche.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Conversions>
   OrderFile-ProductExtraInput   =
   OrderFile-ProductExtraInput1  =
   OrderFile-ProductExtraInput2  =
   ...
   OrderFile-ProductExtraInput20 =
</Conversions>
```

| Parameter | Beschreibung | Werte |
| - | - | - |
| `OrderFile-ProductExtraInput` | Vorgabe für alle Indizes, die nicht einzeln konfiguriert sind. | `none`, `hex`. Standard `none` |
| `OrderFile-ProductExtraInput1` bis `OrderFile-ProductExtraInput20` | Regel für das jeweilige Zusatzeingabefeld. Ein hier gesetzter Wert geht der Vorgabe vor. | `none`, `hex`. Standard ist der Wert der Vorgabe |

Es gibt genau 20 Zusatzeingabefelder je Produkt, deshalb endet die Reihe bei 20. Ein einzeln gesetzter Parameter gewinnt immer, auch wenn er `none` sagt und die Vorgabe `hex` lautet. Jeder Wert außer `hex` wird als `none` gelesen.

Die kodierten Werte stehen in den Bestelldaten im Block `ExtraInput_<Nummer>` der jeweiligen Position. Die empfangende Warenwirtschaft muss die Kodierung kennen und rückgängig machen.

## ProductDataFieldInjection

Setzt Produktdatenfelder für Testszenarien, ohne dass die Daten aus der Warenwirtschaft geändert werden müssen. Damit lassen sich Produktinformationen kurzfristig ergänzen, überschreiben oder leeren.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<ProductDataFieldInjection>
   <+InjectData>
      Allow                 =
      ProductPattern-List   =
      AllowForSubShops-List =
      DenyForSubShops-List  =
      ForceOverwrite        =
      <+SetData>
         Fieldname =
         Value     =
      </+SetData>
   </+InjectData>
</ProductDataFieldInjection>
```

Wegweiser: [Anreichern von Produktdaten für Testszenarien](https://dokumentation.websale.de/v8s/produkte/anreichern-von-produktdaten.md)

### Unterabschnitt +InjectData

Jeder Unterabschnitt `+InjectData` beschreibt eine Regel. Sie können beliebig viele davon anlegen.

| Parameter | Beschreibung | Werte |
| - | - | - |
| `Allow` | Legt fest, ob und in welchem Betriebszustand die hinterlegten Daten übergeben werden. `no` schaltet die Regel ab, `test` beschränkt sie auf den Testmodus des Shops, `yes` gilt auch im Produktivbetrieb. | `yes`, `no`, `test`. Standard `yes` |
| `ProductPattern-List` | Legt fest, welche Produkte die Regel erfasst. Pflichtangabe, siehe die Tabelle unten. | Muster, kommasepariert |
| `AllowForSubShops-List` | Optional. Beschränkt die Regel auf die genannten Subshops. | kommaseparierte Liste von Subshop-Kennungen |
| `DenyForSubShops-List` | Optional. Nimmt die genannten Subshops von der Regel aus. Diese Angabe geht `AllowForSubShops-List` vor. | kommaseparierte Liste von Subshop-Kennungen |
| `ForceOverwrite` | Überschreibt einen Wert, den die Warenwirtschaft geliefert hat. Ohne diesen Parameter wirkt die Regel nur auf leere Felder. | `yes`, `no`. Standard `no` |

> [!WARNING]
>
> Fehlt `ProductPattern-List` oder ist der Wert leer, dann wird die gesamte Regel übersprungen. Das geschieht ohne Fehlermeldung im Shop.
>
> `ForceOverwrite = yes` wirkt sich auf Laufzeit und Leistungseinheitenverbrauch aus, weil für jedes erfasste Produkt zusätzlich geprüft und geschrieben werden muss. Setzen Sie den Parameter nur dort, wo das Überschreiben wirklich gebraucht wird.

### Unterabschnitt +SetData

Innerhalb von `+InjectData` legen Sie mit beliebig vielen Unterabschnitten `+SetData` fest, welche Felder welchen Wert bekommen.

| Parameter | Beschreibung | Werte |
| - | - | - |
| `Fieldname` | technischer Feldname des Produktdatenfelds | beispielsweise `IS-ZUSATZ49` |
| `Value` | Wert, der in dieses Feld geschrieben wird | beliebiger Text |

### Muster für ProductPattern-List

| Muster | Erfasst |
| - | - |
| `PI:*` | alle Produkte |
| `PN:123*` | Produkte, deren Produktnummer mit `123` beginnt, gefolgt von beliebig vielen Zeichen |
| `PN:123?` | Produkte, deren Produktnummer mit `123` beginnt, gefolgt von genau einem beliebigen Zeichen |
| `PI:12?4` | Produkte, deren Produktindex vier Zeichen lang ist, mit `12` beginnt, mit `4` endet und an dritter Stelle ein beliebiges Zeichen hat |

`PN:` prüft die Produktnummer, `PI:` den Produktindex. Als Platzhalter steht `*` für beliebig viele Zeichen und `?` für genau ein Zeichen.

Der Abschnitt wird nur ausgewertet, wenn die Funktion für den Shop freigeschaltet ist. Ist sie das nicht, dann protokolliert das Shopsystem einen Fehler und überspringt den gesamten Abschnitt. Die Freischaltung erhalten Sie über Ihren WEBSALE Ansprechpartner.

## SpecialUserCodes

Füllt Suffixfelder der Rechnungsadresse automatisch, wenn der Kunde einen vordefinierten Code eingibt oder über einen Link mit dem passenden Parameter in den Shop kommt. Damit lassen sich Kunden beispielsweise bei der Registrierung einer Kundengruppe oder einem Vertriebskanal zuordnen.

Der Kunde gibt dabei nur einen lesbaren Alias ein. Welcher technische Wert daraus wird, steht ausschließlich in dieser Konfiguration und ist für den Kunden weder sichtbar noch beeinflussbar.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<SpecialUserCodes>
   <+SuffixCode>
      ID           = kundengruppe
      SuffixNumber = 13
      <+Entry>
         +Input = XXL
         Value  = gold
      </+Entry>
      <+Entry>
         +Input = BASIS
         Value  = silver
      </+Entry>
   </+SuffixCode>
</SpecialUserCodes>
```

Gibt der Kunde `XXL` ein, dann steht anschließend im Suffixfeld 13 der Rechnungsadresse der Wert `gold`.

| Parameter | Beschreibung | Werte |
| - | - | - |
| `+SuffixCode` | Unterabschnitt, definiert eine Zuordnungsregel. Mehrere Regeln sind möglich. | |
| `ID` | Technische Kennung der Regel. Daraus ergibt sich der HTML-Feldname `ws_suc_input_<ID>`. | Ziffern und Kleinbuchstaben. Alle anderen Zeichen werden entfernt |
| `SuffixNumber` | Nummer des Suffixfelds der Rechnungsadresse, das bei einem Treffer gefüllt wird. | 1 bis 50 |
| `+Entry` | Unterabschnitt, definiert eine Zuordnung von Eingabe zu Wert. Mehrere Einträge je Regel sind möglich. | |
| `+Input` | Akzeptierte Eingabe. Mehrere `+Input`-Zeilen in einem Eintrag sind Aliasnamen für denselben Wert. | Text, maximal 1024 Byte. Multibyte-Zeichen werden unterstützt |
| `Value` | Technischer Wert, der bei einem Treffer in das Suffixfeld geschrieben wird. | Text, maximal 64 Zeichen |

Der Vergleich der Eingabe unterscheidet nicht zwischen Groß- und Kleinschreibung. Ein Eintrag mit `+Input = XXL` greift deshalb auch bei der Eingabe `xxl`. Eine zweite `+Input`-Zeile für dieselbe Schreibweise in anderer Groß- und Kleinschreibung ist unnötig. Mehrere `+Input`-Zeilen brauchen Sie nur für wirklich verschiedene Aliasnamen.

> [!WARNING]
>
> Ein Suffixfeld, das bereits einen Wert enthält, wird nicht überschrieben. Die Eingabe läuft dann auf einen Fehler. Dasselbe gilt, wenn die Eingabe zu keinem Eintrag passt.

Die Funktion arbeitet nur für angemeldete Kunden. Bei einem Treffer schreibt das Shopsystem den Wert in die Rechnungsadresse und speichert diese. Schlägt dabei die Adressprüfung oder das Speichern fehl, dann werden alle in diesem Aufruf gesetzten Suffixwerte wieder zurückgenommen.

Für das Eingabefeld und die Rückmeldungen im Template steht die Tag-Familie `SUC-` zur Verfügung.

## SpecialW2PConditions

Legt fest, unter welchen Bedingungen ein als "bedingt Web-to-Print-fähig" gekennzeichnetes Produkt tatsächlich Web-to-Print-fähig ist. Geprüft werden Suffixfelder der Rechnungsadresse des Kunden.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<SpecialW2PConditions>
   <+AddressFieldCondition>
      <+Condition>
         Field          =
         Type           =
         Value          =
         BasketBehavior =
      </+Condition>
   </+AddressFieldCondition>
</SpecialW2PConditions>
```

| Parameter | Beschreibung | Werte |
| - | - | - |
| `+AddressFieldCondition` | Unterabschnitt. Mehrere dieser Unterabschnitte sind ODER-verknüpft. | |
| `+Condition` | Unterabschnitt. Mehrere Bedingungen innerhalb eines `+AddressFieldCondition` sind UND-verknüpft. | |
| `Field` | Name des zu prüfenden Suffixfelds der Rechnungsadresse | beispielsweise `Suffix15` |
| `Type` | Art der Prüfung, siehe die Tabelle unten | |
| `Value` | Optional. Vergleichswert oder kommaseparierte Liste, je nach `Type`. | |
| `BasketBehavior` | Legt fest, ob ein Produkt oder alle Produkte im Warenkorb die Bedingung erfüllen müssen. | `match-all`, `match-once`. Standard `match-all` |

### Werte für Type

| Wert | Bedingung |
| - | - |
| `empty` | Das Feld ist leer |
| `filled` | Das Feld ist gefüllt |
| `value` | Der Wert des Felds entspricht `Value` |
| `notvalue` | Der Wert des Felds entspricht `Value` nicht |
| `inlist` | Der Wert des Felds steht in der Liste `Value` |
| `notinlist` | Der Wert des Felds steht nicht in der Liste `Value` |
| `includedinlist` | Der Wert aus `Value` steht in der Werteliste des Felds |
| `notincludedinlist` | Der Wert aus `Value` steht nicht in der Werteliste des Felds |
| `matchsimplewildcard` | Der Wert des Felds stimmt mit `Value` inklusive Platzhalter überein. `?` steht für genau ein Zeichen an beliebiger Stelle, `*` für beliebige Zeichen und darf nur am Ende stehen |
| `notmatchsimplewildcard` | Der Wert des Felds stimmt mit `Value` inklusive Platzhalter nicht überein |

Das folgende Beispiel macht ein bedingt Web-to-Print-fähiges Produkt verfügbar, sobald eines der beiden Felder `Suffix15` oder `Suffix16` der Rechnungsadresse gefüllt ist.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<SpecialW2PConditions>
   <+AddressFieldCondition>
      <+Condition>
         Field = Suffix15
         Type  = filled
      </+Condition>
   </+AddressFieldCondition>

   <+AddressFieldCondition>
      <+Condition>
         Field = Suffix16
         Type  = filled
      </+Condition>
   </+AddressFieldCondition>
</SpecialW2PConditions>
```

Wegweiser: [Web-to-Print-Produkte](https://dokumentation.websale.de/v8s/produkte/web-to-print-produkte.md)

Die Bedingungen werden bei jedem Seitenaufruf aus der Konfiguration gelesen, unabhängig davon, ob im Warenkorb überhaupt ein bedingt Web-to-Print-fähiges Produkt liegt. Halten Sie den Abschnitt deshalb knapp. Die Einrichtung stimmen Sie mit Ihrem WEBSALE Ansprechpartner ab.

## SubShopMapping

Fasst Subshops zu Gruppen zusammen und legt fest, wie Produkte und Kategorien zwischen den Subshops einer Gruppe einander zugeordnet werden. Darauf baut beispielsweise die automatische Erzeugung der hreflang-Attribute auf.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<SubShopMapping>
   <+SubShopGroup>
      Name                   =
      ID                     =
      ProductAllocation      =
      ProductAllocationFile  =
      CategoryAllocation     =
      CategoryAllocationFile =
      +SubShopID             =
      +SubShopID             =
   </+SubShopGroup>
</SubShopMapping>
```

| Parameter | Beschreibung | Werte |
| - | - | - |
| `+SubShopGroup` | Unterabschnitt, definiert eine Gruppe von Subshops | |
| `Name` | Optional. Frei vergebener Name der Gruppe. | Text, beispielsweise `Shopgruppe_Endkunden_Produktivshops` |
| `ID` | Eindeutige Kennung der Subshop-Gruppe | alphanumerisch |
| `ProductAllocation` | Art der Produktzuordnung. `sameIndex` ordnet über den Produktindex zu, `mappingImport` über eine Zuordnungsliste, `no` schaltet die Zuordnung ab. | `sameIndex`, `mappingImport`, `no`. Standard `no` |
| `ProductAllocationFile` | Pfad zur Zuordnungsliste im FTP-Zugangsbereich. Nur nötig bei `ProductAllocation = mappingImport`. | Pfad zu einer .csv- oder .json-Datei |
| `CategoryAllocation` | Dasselbe für Kategorien. | `sameIndex`, `mappingImport`, `no`. Standard `no` |
| `CategoryAllocationFile` | Pfad zur Zuordnungsliste für Kategorien. Nur nötig bei `CategoryAllocation = mappingImport`. | Pfad zu einer .csv- oder .json-Datei |
| `+SubShopID` | Kennung eines Subshops der Gruppe. Je Subshop eine eigene Zeile, mindestens zwei. | beispielsweise `DE-deutsch` |

Die Pfadangaben zu den Zuordnungslisten stimmen Sie mit der WEBSALE Technik ab, damit die Dateien an der erwarteten Stelle liegen und zum richtigen Zeitpunkt gelesen werden.

Wegweiser: [Automatische Erzeugung des hreflang-Attributs](https://dokumentation.websale.de/v8s/schnittstellen/marketing-seo-und-portale/ws-hreflang-verlinkungen.md)

## TopSeller

Steuert zwei Funktionen, die sich den Abschnitt teilen, aber unabhängig voneinander sind: die Sortierung nach Topsellern und die Funktion "Top-30-Produkte".

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<TopSeller>
   NumDays      =
   Allow        =
   MaxAge       =
   ProductCount =
</TopSeller>
```

| Parameter | Beschreibung | Werte |
| - | - | - |
| `NumDays` | Verkaufszeitraum in Tagen, der für die Ermittlung der Topseller herangezogen wird. Gehört zur Sortierung nach Topsellern. | Ganzzahl |
| `Allow` | Schaltet die Funktion "Top-30-Produkte" ein oder aus. | `yes`, `no`. Standard `no` |
| `MaxAge` | Höchstalter einer Bestellung in Tagen, damit sie für "Top-30-Produkte" berücksichtigt wird. | Ganzzahl bis 1460, das entspricht vier Jahren. Standard 1460 |
| `ProductCount` | Höchstzahl der Produkte, die je Kunde gespeichert und ausgegeben werden. | Ganzzahl bis 100. Standard 30 |

> [!WARNING]
>
> `Allow` bezieht sich ausschließlich auf "Top-30-Produkte". Die Sortierung nach Topsellern bleibt davon unberührt und wird allein über `NumDays` und die Sortierung im Template gesteuert. Ein `Allow = no` schaltet die Topseller-Sortierung also nicht ab.

Die Auswertung läuft in einem Hintergrundprogramm. Eine geänderte Einstellung wirkt sich erst aus, wenn dieses Programm das nächste Mal läuft und die Tabelle neu aufbaut.

Wegweiser: Sortierung nach Topseller, [Top-30-Produkte](https://dokumentation.websale.de/v8s/marketing-produkte/top-30-produkte.md)

## ChargeLabel

Legt fest, ob beim Anlegen einer Gutschein-Charge ein Label angegeben werden muss.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<ChargeLabel>
   Mandatory =
</ChargeLabel>
```

| Parameter | Beschreibung | Werte |
| - | - | - |
| `Mandatory` | Das Label zur Gutschein-Charge ist ein Pflichtfeld. | `yes`, `no`. Standard `no` |

Wegweiser: [Gutscheine anlegen und importieren](https://dokumentation.websale.de/v8s/gutscheine-anbieten/gutscheine-anlegen-oder-importieren.md)

## ChargeLabelValues

Füllt die Auswahlliste, aus der beim Anlegen eines Gutscheins oder einer Gutschein-Charge das Label gewählt wird.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<ChargeLabelValues>
   +Value = Label1
   +Value = Label2
   +Value = Label3
</ChargeLabelValues>
```

| Parameter | Beschreibung | Werte |
| - | - | - |
| `+Value` | Ein Eintrag der Auswahlliste. Je Eintrag eine eigene Zeile. | beliebiger Text |

Wegweiser: Gutscheine anlegen und importieren

## VoucherNumberCharacters

Schließt einzelne Zeichen von der automatischen Erzeugung der Gutscheinnummern aus. Sinnvoll ist das bei Zeichen, die beim Abtippen leicht verwechselt werden, beispielsweise `1` und `I`.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<VoucherNumberCharacters>
   Exclude = 1,I,Z
</VoucherNumberCharacters>
```

| Parameter | Beschreibung | Werte |
| - | - | - |
| `Exclude` | Kommaseparierte Liste der auszuschließenden Zeichen. Leerzeichen um die Einträge werden entfernt, Kleinbuchstaben automatisch in Großbuchstaben gewandelt. | Ziffern `1` bis `9` und Großbuchstaben `A` bis `Z`. Höchstens 10 Zeichen |

> [!WARNING]
>
> Mehr als 10 ausgeschlossene Zeichen werden nicht angenommen. Die Gutscheinverwaltung zeigt beim Generieren eine Fehlermeldung und verwendet nur die ersten 10 Einträge der Liste.

Der Gutschein-Generator verwendet ohnehin nur einen Teil des Alphabets. Die Ziffer `0` und die Buchstaben `O`, `W` und `X` kommen in erzeugten Gutscheinnummern nicht vor. Diese Zeichen auszuschließen ändert deshalb nichts. Die Verwechslungsgefahr zwischen `0` und `O` besteht bei erzeugten Nummern also gar nicht.

Die Einstellung gilt plattformweit für alle Shops und Subshops. Sie wirkt nur auf automatisch erzeugte Nummern. Eine von Hand vergebene Gutscheinnummer wird davon nicht eingeschränkt.

## Abschnitte für Importe und Fremdsysteme

Diese Abschnitte gehören zu Schnittstellen und werden nicht vom Shopsystem, sondern von den jeweiligen Importprogrammen gelesen. Hier stehen nur die Parameter, die im Shop sichtbar werden.

### CustomerImportPro

Betrifft den Kundenimport, insbesondere die Umwandlung von Zeichensätzen.

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

### ProductImportPro

Betrifft den Produktimport, unter anderem die Umwandlung von Zeichensätzen.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<ProductImportPro>
   ConvertCharset     =
   ImportCharset      =
   UnknownCharacters  =
   CreateBestPrices   =
   MinCountCategories =
   MinCountProducts   =
</ProductImportPro>
```

### ImportCharsetConvertMap

Legt die Zeichensatz-Umwandlungstabelle für die Importe fest. Der Abschnitt kann mehrfach vorkommen und wird deshalb mit einem Pluszeichen geschrieben.

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

### FuturaECS

Betrifft ausschließlich das Warenwirtschaftssystem Futura.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<FuturaECS>
   SkipBranchIds =
</FuturaECS>
```

| Parameter | Beschreibung | Werte |
| - | - | - |
| `SkipBranchIds` | Die genannten Filialen werden aus der Lagerbestandsermittlung ausgeschlossen. Ihre Bestände fließen nicht in den Bestand im Shop ein. | kommaseparierte Liste von Filialkennungen, beispielsweise `1,2,5` |

## Weitere Abschnitte

Das Shopsystem wertet in der global.config vier weitere Abschnitte aus. Sie gehören zu Funktionen, die gesondert freigeschaltet und gemeinsam mit WEBSALE eingerichtet werden.

> [!WARNING]
>
> Richten Sie diese Abschnitte nicht ohne Abstimmung mit Ihrem WEBSALE Ansprechpartner ein. Zwei der vier Funktionen greifen in die Preisermittlung beziehungsweise in den Zahlungsvorgang ein, und sie setzen eine Freischaltung voraus, ohne die der Abschnitt wirkungslos bleibt.

### TaxCases

Definiert Ländergruppen, auf die sich die Steuerfall-Schnittstelle bezieht. Die Gruppen werden in zwei Unterabschnitten gebildet, einmal nach Lieferland und einmal nach Herstellungsland.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<TaxCases>
   <DeliveryCountryGroups>
      <+Entry>
         ID          =
         CountryList =
      </+Entry>
   </DeliveryCountryGroups>

   <CountryOfProductionGroups>
      <+Entry>
         ID          =
         CountryList =
      </+Entry>
   </CountryOfProductionGroups>
</TaxCases>
```

| Parameter | Beschreibung | Werte |
| - | - | - |
| `+Entry` | Unterabschnitt, definiert eine Ländergruppe | |
| `ID` | Kennung der Gruppe, über die sie referenziert wird | Text |
| `CountryList` | Länder der Gruppe. Leerzeichen werden entfernt. | kommaseparierte Liste von Länderkennungen |

### PaymentBruteForceProtection

Sperrt Zahlungsarten nach wiederholt fehlgeschlagenen Zahlungsversuchen, getrennt nach Sitzung und nach IP-Adresse, und kann zusätzlich ein Captcha erzwingen.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<PaymentBruteForceProtection>
   ProtectedPayments-List                     =
   BlockTimesPerSession-List                  =
   BlockTimesPerIP-List                       =
   BlockTimesPerIP-ObservationWindowInMinutes =
   ForceCaptchaAfterXAttempts                 =
   UseCaptcha                                 =
   CaptchaErrorHandling                       =
</PaymentBruteForceProtection>
```

| Parameter | Beschreibung | Werte |
| - | - | - |
| `ProtectedPayments-List` | Zahlungsarten, für die der Schutz gilt | kommaseparierte Liste |
| `BlockTimesPerSession-List` | Sperrzeiten je Sitzung, gestaffelt nach der Zahl der Fehlversuche | Liste von Paaren in der Form `(Fehlversuche:Sekunden)` |
| `BlockTimesPerIP-List` | Dasselbe je IP-Adresse | Liste von Paaren in der Form `(Fehlversuche:Sekunden)` |
| `BlockTimesPerIP-ObservationWindowInMinutes` | Zeitfenster in Minuten, innerhalb dessen die Fehlversuche einer IP-Adresse gezählt werden | Ganzzahl 1 bis 2880, das entspricht 48 Stunden |
| `ForceCaptchaAfterXAttempts` | Ab dieser Zahl von Fehlversuchen wird ein Captcha verlangt | Ganzzahl |
| `UseCaptcha` | Verwendetes Captcha-Verfahren | `ReCaptchaV3`, `FriendlyCaptcha`, `CaptchaEU` |
| `CaptchaErrorHandling` | Verhalten, wenn die Captcha-Prüfung technisch fehlschlägt. `fail-open` lässt den Vorgang durch. | `fail-open` |

Ein Eintrag der Sperrzeitenliste besteht aus der Zahl der Fehlversuche und der Sperrdauer in Sekunden, beide in runden Klammern und durch einen Doppelpunkt getrennt. Mehrere Einträge werden aneinandergereiht.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
BlockTimesPerSession-List = (3:300)(5:3600)(10:permanent)
```

| Angabe | Bedeutung |
| - | - |
| `(3:300)` | ab 3 Fehlversuchen 300 Sekunden sperren |
| `(10:permanent)` | ab 10 Fehlversuchen dauerhaft sperren |

Es gilt immer der Eintrag mit der höchsten erreichten Schwelle. Eine Sperrdauer über 48 Stunden wird auf 48 Stunden gekürzt. Der Wert `permanent` wirkt nur in der Sitzungsliste. Eine IP-Adresse wird nie dauerhaft gesperrt, auch wenn `permanent` konfiguriert ist.

### ProductDataJSONInterface

Beschreibt, aus welcher Datei und welchem Datenfeld die kundenspezifischen Rabattkategorien gelesen werden.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<ProductDataJSONInterface>
   <UserDiscountCategory>
      JSONFile  =
      DataField =
   </UserDiscountCategory>
</ProductDataJSONInterface>
```

| Parameter | Beschreibung | Werte |
| - | - | - |
| `JSONFile` | Namensschema der JSON-Datei | Pfad mit Namensschema |
| `DataField` | Name des auszuwertenden Datenfelds | Text |

### CustomOfferAPI

Hinterlegt das Geheimnis für die Schnittstelle der kundenspezifischen Angebote.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<CustomOfferAPI>
   Secret =
</CustomOfferAPI>
```

| Parameter | Beschreibung | Werte |
| - | - | - |
| `Secret` | Gemeinsames Geheimnis zur Authentifizierung der Schnittstelle | Text |

> [!WARNING]
>
> Das Geheimnis steht im Klartext in der Konfiguration. Behandeln Sie die global.config entsprechend und geben Sie Auszüge daraus nicht weiter.


## Related topics

- [Anreichern von Produktdaten](https://dokumentation.websale.de/v8s/produkte/anreichern-von-produktdaten.md)
- [Produktlisten sortieren](https://dokumentation.websale.de/v8s/funktionen-fuer-produktlisten/produktlisten-sortieren.md)
- [Konfiguration: Grundlagen](https://dokumentation.websale.de/v8s/grundlagen-konfiguration/konfiguration-grundlagen.md)
- [Top-30-Produkte](https://dokumentation.websale.de/v8s/marketing-produkte/top-30-produkte.md)
- [Konfiguration des Such-Moduls](https://dokumentation.websale.de/ws-search/konfiguration-des-such-moduls.md)


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