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

# Import-Dateien

> Aufbau und Felder der Importdateien für Kundenstammdaten, Rechnungs- und Lieferadressen und Bankverbindungen, mit Importreihenfolge und dem Unterschied zwischen update und complete.

Diese Seite beschreibt die Kerndateien des Kundendatenimports. Weitere Dateien für Produktkundengruppen, Bonuspunkte, Angebote, Bestellmengen und Prime-Pakete stehen unter [Weitere Import-Dateien](https://dokumentation.websale.de/v8s/schnittstellen/kundendaten/ws-sftp-kunden-pro/weitere-import-dateien.md).

## Grenzen

Alle Kundendatenfelder sind standardmäßig und maximal 256 Zeichen lang. Im Abschnitt `AddressMaxInputLen` der `shop.config` lässt sich die Länge der Felder, die der Kunde im Shop ausfüllen kann, herabsetzen. Nutzen Sie das, wenn die Felder in Ihrem System kürzer sind. Sonst gibt der Kunde Werte ein, die Ihre Warenwirtschaft später abschneidet.

| Übertragungsweg | Maximale Dateigröße |
| - | - |
| SFTP | 4 GB je Datei |
| WSPManager | 1 GB je Datei |

## Übersicht der Dateien

| Dateiname | Inhalt |
| - | - |
| `custupdate.csv` | Stammdatensätze anlegen und aktualisieren, Zugangsdaten und Kundenoptionen setzen |
| `custdelete.csv` | Kunden vollständig löschen |
| `billupdate.csv` | Rechnungsadressen anlegen und aktualisieren |
| `billcomplete.csv` | Wie `billupdate.csv`, aber mit vollständigem Bestand je Kunde |
| `billdelete.csv` | Einzelne Rechnungsadressen löschen |
| `delivupdate.csv` | Lieferadressen anlegen und aktualisieren |
| `delivcomplete.csv` | Wie `delivupdate.csv`, aber mit vollständigem Bestand je Kunde |
| `delivdelete.csv` | Einzelne Lieferadressen löschen |
| `bankupdate.csv` | Bankverbindungen anlegen und aktualisieren |
| `bankcomplete.csv` | Wie `bankupdate.csv`, aber mit vollständigem Bestand je Kunde |
| `bankdelete.csv` | Einzelne Bankverbindungen löschen |

Beim Löschen eines Kunden über `custdelete.csv` verschwinden automatisch auch alle seine Adressen und Bankverbindungen. Die `*delete`-Dateien brauchen Sie nur, um einzelne Datensätze eines Kunden zu entfernen.

## update oder complete

Der Unterschied entscheidet darüber, was mit Datensätzen passiert, die in der Importdatei fehlen.

Ein Beispiel: Für den Kunden `123` stehen fünf Rechnungsadressen in der Shop-Datenbank, die Importdatei enthält drei. Der Kunde `ABC` kommt in der Importdatei nicht vor.

| Datei | Ergebnis für Kunde 123 | Ergebnis für Kunde ABC |
| - | - | - |
| `billupdate.csv` | Die drei Adressen werden hinzugefügt oder aktualisiert, die übrigen bleiben erhalten | unverändert |
| `billcomplete.csv` | Die fünf Adressen werden durch die drei aus der Datei ersetzt | unverändert |

Kunden, die in der Datei gar nicht auftauchen, bleiben in beiden Fällen unangetastet. Eine `complete`-Datei ist also kein Komplettabgleich über alle Kunden, sondern nur je Kunde, der darin vorkommt.

Ein gleichzeitiger Import von `update` und `complete` derselben Datenart ist in der Regel nicht sinnvoll.

## Importreihenfolge

Die Dateien werden in dieser Reihenfolge verarbeitet:

1. alle `*delete`-Dateien
2. `custupdate.csv`
3. alle übrigen `*update`-Dateien
4. alle `*complete`-Dateien

Innerhalb eines Imports lassen sich also zuerst Datensätze eines Kunden löschen und danach wieder einfügen.

Weil die `complete`-Dateien zuletzt verarbeitet werden, haben sie immer das letzte Wort. Übergeben Sie für denselben Kunden Daten in einer `update`- und in der zugehörigen `complete`-Datei, überschreiben die Daten der `complete`-Datei die zuvor importierten.

## custupdate.csv

Diese Datei legt Stammdatensätze an und setzt die Optionen eines Kunden. Bevor Sie für einen Kunden Rechnungsadressen, Lieferadressen oder Bankverbindungen importieren können, muss sein Stammdatensatz über diese Datei existieren.

Fehlt eine Spalte für ein Pflichtfeld vollständig, bleiben die bisher gespeicherten Werte erhalten.

### Schlüssel und Zugang

| Feldname | Inhalt | Pflichtfeld |
| - | - | - |
| `UserIndex` | Tabellenschlüssel in der Shop-Datenbank | ja beim Ändern, verboten bei der Neuanlage |
| `CustomerID` | Kundennummer | ja bei der Neuanlage |
| `EMail` | E-Mail-Adresse des Kunden | ja |
| `Password` | Passwort für die Anmeldung im Shop | nein |
| `MainSubshop` | Subshop, in den sich der Kunde anmelden kann. Leer bedeutet: alle Subshops. | ja, wenn `Subshop` verwendet wird |
| `Subshop` | Kommagetrennte Liste weiterer erlaubter Subshops, oder `*` für alle | nein |
| `RegistrationCode` | Freischaltcode, falls sich nur Kunden mit Code registrieren dürfen | nein |

Das Passwort lässt sich nur bei der Neuanlage setzen. Der Kunde kann es im Shop jederzeit ändern, ein späteres Überschreiben aus der Warenwirtschaft würde seine Wahl zunichtemachen.

Versucht sich ein Kunde in einem Subshop anzumelden, für den er keine Berechtigung hat, leitet ihn der Shop in den unter `MainSubshop` angegebenen Subshop um.

Den `RegistrationCode` speichert der Shop bei den Kundendaten. Ihn über den Import zu ändern ergibt keinen Sinn, wohl aber ihn zu löschen.

### Zeichensatz

| Feldname | Inhalt |
| - | - |
| `CharsetImport` | Zeichensatz der gelieferten Daten |
| `CharsetShop` | Zeichensatz des Shops |

Mit diesen beiden Feldern konvertiert der Import die Daten, wenn Sie sie nicht im Zeichensatz des Shops liefern können. Beide Felder gehören zusammen, eines allein wird ignoriert.

### Rabatte, Kosten und Preise

| Feldname | Inhalt |
| - | - |
| `Discount` | Rabatt in Prozent auf rabattierfähige Artikel |
| `CustomerDiscountOnly` | `X`: Der Kunde erhält ausschließlich den Kundenrabatt, keine anderen Rabatte |
| `DiscountGroupID` | Suffix für die Rabattdatei. Bei `abc` lädt der Shop `discount_abc.dat` statt `discount.dat`. |
| `DiscountList` | Rabattgruppierung je Produkt oder Kategorie |
| `PriceGroup` | Preisgruppe für kundenabhängige Preise |
| `DelCostDiscRate` | Rabatt in Prozent auf die Versandkosten |
| `DeliveryCostReduction` | `X`: Für den Kunden gelten reduzierte Versandkosten |
| `FreeDelivery` | `X`: Der Kunde zahlt keine Versandkosten |
| `FreePayCost` | `X`: Der Kunde zahlt keine Zahlungsartenkosten |
| `PayCostDiscRate` | Rabatt in Prozent auf die Zahlungsartenkosten |
| `FreightCostsValue` | Betrag eines Frachtkostenzu- oder -abschlags, beispielsweise `23.50` |
| `FreightCostsType` | `A+` absoluter Aufschlag, `A-` absoluter Abschlag, `P+` prozentualer Aufschlag, `P-` prozentualer Abschlag |
| `DeliveryGroup` | Versandkostengruppe, macht artikelabhängige Versandkosten zusätzlich kundenabhängig |
| `Surcharge` | Höhe des Mindermengenzuschlags für diesen Kunden |
| `SurchargeLimit` | Betrag, bis zu dem der Mindermengenzuschlag berechnet wird |
| `ProductDiscount` | `X`: Der Kundenrabatt erscheint beim Produkt, jeder andere Wert zeigt ihn im Warenkorb |
| `ReducedVAT` | `X`: Der Kunde darf mit reduzierter Mehrwertsteuer bestellen, nur bei Reihengeschäften |
| `UnitFactorGroupID` | Gruppen-ID für kundenabhängige Stückelungen, passend zum Feld `UnitFactorGroups` in den Produktdaten |

Das Feld `PriceGroup` birgt eine Falle: Auch wenn Sie kundenabhängige Preise über die Kundennummer zuordnen, muss es einen nicht leeren Eintrag enthalten. Der Wert muss keiner existierenden Preisgruppe entsprechen, er dient nur als Schalter, damit der Shop die Funktion überhaupt aktiviert.

`DiscountList` hat folgenden Aufbau:

```
<g>(Type):(Rabattsatz)[:(Suchmaske)][:(abMenge-bisMenge)]</g>…
```

`Type` ist `1` für eine Produktnummer, `2` für einen Produktindex, jeweils mit optionalen Platzhaltern, oder `3` für eine UserDiscountCategory. Als Platzhalter dienen `?` für ein beliebiges Zeichen und `*` für beliebig viele.

```
<g>3:3.00:flyer:-999</g><g>3:2.00:flyer:1000-9999</g><g>3:1.00:flyer:10000-</g>
```

Dieses Beispiel gewährt in der Kategorie `flyer` bis 1000 Stück drei Prozent, bis 10.000 zwei Prozent und darüber ein Prozent. Angaben mit und ohne Mengen lassen sich kombinieren, dabei greift die erste von links zutreffende Regel. Wird `DiscountList` verwendet, ignoriert der Shop den allgemeinen Rabattsatz.

### Zahlung und Bonität

| Feldname | Inhalt |
| - | - |
| `PaymentMethods` | Kommagetrennte Liste der Zahlungsarten-Codes, die dem Kunden zur Verfügung stehen |
| `NoneDefaultPaymentMethods` | Zahlungsarten, die dem Kunden offenstehen, obwohl sie deaktiviert sind |
| `MaxOrderForUserAccount` | Überschreibt bei einem Wert größer 0 den `MaxOrderValue` der Zahlungsarten aus der `shop.config` |
| `CreditPassState` | `0` oder leer: nicht geprüft, `1`: positiv, `2`: negativ |
| `InfoScoreState` | `0` oder leer: nicht geprüft, `1`: positiv, `2`: negativ |
| `CreditCheckDate` | Datum einer erneuten Bonitätsprüfung im Format `YYYY-MM-DD` |
| `BillieDuration` | Zahlungsziel in Tagen bei der Zahlungsart Billie, gültig von 7 bis 120. Überschreibt den Standardwert von 30 Tagen. |
| `Currency` | Währung, in der dem Kunden nach der Anmeldung die Preise angezeigt werden |

Beispiele für Zahlungsarten-Codes sind `1` für Kreditkarte, `3` für Nachnahme, `4` für Lastschrift, `5` für Vorauskasse und `6` für Rechnung.

`CreditCheckDate` ist nützlich, wenn eine positive Bonitätsprüfung nicht unbegrenzt gelten soll, sondern beispielsweise nach einem Jahr erneuert wird.

### Rollen und Berechtigungen

| Feldname | Inhalt |
| - | - |
| `GroupLogin` | `X`: Die Zugangsdaten werden von mehreren Personen genutzt. Login- und Adressdaten lassen sich dann im Shop nicht ändern. |
| `SuperUserID` | ID eines Superusers mit besonderen Rechten, der sich beispielsweise als anderer Nutzer anmelden und für diesen bestellen kann |
| `SuperUserRestricted` | `X`: Der Superuser darf nur auf Kundendatensätze zugreifen, in deren `SuperUserIDList` seine ID steht |
| `SuperUserIDList` | Kommagetrennte Liste der SuperUserIDs, die auf diesen Datensatz zugreifen dürfen |
| `Releaser` | `X`: Der Kunde kann Bestellungen anderer Kunden freigeben |
| `ReleaseRequired` | `X`: Die Bestellungen des Kunden müssen vor der Ausführung freigegeben werden |
| `ReleaseID` | ID für das Freigabeverfahren |
| `Reseller` | `X`: Der Kunde kann einen Reseller-Aufschlag eingeben, der zur Gesamtsumme addiert wird |
| `Warranty` | Kommagetrennte Liste der Berechtigungscodes des Kunden |
| `OrderGenerator` | `X`: Dem angemeldeten Kunden wird ein Link zum Bestellgenerator angeboten |
| `StartPage` | Seite, die nach der Anmeldung angezeigt wird |

Jeder Kunde mit gefüllter `SuperUserID` gilt als Superuser. Die ID erscheint in den Bestelldaten, vergeben Sie deshalb je Superuser eine eigene, damit nachvollziehbar bleibt, wer bestellt hat.

Die Berechtigungscodes aus `Warranty` steuern, welche Bereiche des Shops ein Kunde sieht. Im Template fragen Sie sie so ab:

```
{ST-Warranty(1,abc)}
  Wird nur Kunden der Gruppe 1 oder abc angezeigt.
{/ST-Warranty(1,abc)}
```

### Werbeeinwilligungen

Für die Einwilligung zur Adressweitergabe und für Telefonwerbung gibt es je vier Felder:

| Feldname | Inhalt |
| - | - |
| `AddressSharingState` / `TeleMarketingState` | Status, siehe Tabelle unten |
| `AddressSharingLastChangeDate` / `TeleMarketingLastChangeDate` | Datum der letzten Änderung im Format `TT.MM.JJJJ` |
| `AddressSharingLastChangeTime` / `TeleMarketingLastChangeTime` | Uhrzeit der letzten Änderung im Format `SS:MM:SS` |
| `AddressSharingLastChangeIP` / `TeleMarketingLastChangeIP` | IP-Adresse bei der letzten Änderung |

| Wert | Bedeutung |
| - | - |
| 0 | Nicht gesetzt |
| 1 | Telefonisch abgelehnt |
| 2 | Telefonisch gegeben |
| 3 | Im Shop abgelehnt |
| 4 | Im Shop gegeben |

### Altersbeschränkung und Lieferung

| Feldname | Inhalt |
| - | - |
| `AgeRestricted` | Alter des Kunden. Bei einem Wert größer 0 sieht der angemeldete Kunde nur Produkte, deren Altersbeschränkung kleiner oder gleich diesem Wert ist. |
| `AgeResPasswd` | Passwort für Erziehungsberechtigte, mit dem sich `AgeRestricted` ändern lässt |
| `AgeResMail` | E-Mail-Adresse, an die das `AgeResPasswd` geschickt werden kann |
| `DeliveryDays` | Kommagetrennte Liste der Wochentage, an denen der Kunde beliefert werden kann, `1` für Montag bis `7` für Sonntag |
| `LastOrderDate` | Datum der letzten Bestellung im Format `YYYY-MM-DD` |

`LastOrderDate` ist für Bestellungen gedacht, die am Shop vorbei entstanden sind, beispielsweise telefonisch. Der Shop nutzt es für die Neukundenerkennung und beim Abholen von Adressdatenänderungen.

Das Feld `WebsaleIni` für eine alternative `shop.config` ist veraltet und sollte nicht mehr verwendet werden.

## custdelete.csv

Löscht einen Kunden vollständig, einschließlich aller Adressen und Bankverbindungen.

| Feldname | Inhalt | Pflichtfeld |
| - | - | - |
| `UserIndex` | Tabellenschlüssel in der Shop-Datenbank | ja, wenn `CustomerID` fehlt oder leer ist |
| `CustomerID` | Kundennummer | ja, wenn `UserIndex` fehlt, leer oder `0` ist |

Steht nur die Kundennummer in der Datei, löscht der Import alle Datensätze, die zu dieser Nummer passen. Bei Mehrfachkonten über die CustomerID trifft das also mehrere Kunden auf einmal.

## billupdate.csv und billcomplete.csv

Enthalten die Rechnungsadressen. Der Shop unterstützt bisher nur eine Rechnungsadresse je Kunde.

| Feldname | Inhalt | Pflichtfeld |
| - | - | - |
| `UserIndex` | Tabellenschlüssel in der Shop-Datenbank | ja beim Ändern, verboten bei der Neuanlage |
| `CustomerID` | Kundennummer | ja bei der Neuanlage |
| `TableIndex` | Tabellenschlüssel des Adressdatensatzes | derzeit optional, weil nur eine Rechnungsadresse je Kunde möglich ist |
| `ExternalID` | ID des Datensatzes aus Ihrem System | ja bei der Neuanlage, optional beim Update |

Die Adressfelder:

| Feldname | Inhalt |
| - | - |
| `Salutation` / `SalutationCode` | Anrede als Text oder als Code aus der `salutation.dat` |
| `Title` / `TitleCode` | Titel als Text oder als Code aus der `title.dat` |
| `FirstName`, `LastName` | Vorname, Nachname |
| `Company`, `Department` | Firma, Abteilung |
| `Street1`, `Street2` | Straße und Hausnummer, zweite Zeile |
| `Zip`, `City`, `State` | Postleitzahl, Ort, Bundesland |
| `CountryISO` | Dreistelliger ISO-Code des Landes |
| `PostOfficeBox`, `PostOfficeBoxZip` | Postfach und dessen Postleitzahl |
| `Phone`, `MobilePhone`, `Fax` | Telefonnummern |
| `BusinessPhone`, `BusinessFax` | Geschäftliche Nummern |
| `EMail2` | E-Mail-Adresse für die Rechnung |
| `BCCEMail` | Kommagetrennte Liste von Adressen, die Bestellbestätigungen als Blindkopie erhalten |
| `DateOfBirth` | Geburtsdatum im Format `TT.MM.JJJJ` |
| `CostCenter` | Kostenstelle |
| `TaxId` | Umsatzsteuer-ID |
| `TaxIds` | Umsatzsteuer-IDs für Reihengeschäfte |
| `UserType` | Kundentyp, muss einem in der `shop.config` konfigurierten Wert entsprechen |
| `UserDescr` | Kommentar, der im Shop bei der Adressauswahl erscheint |
| `Suffix1` bis `Suffix100` | Frei verwendbare Adressdatenfelder |

Verwenden Sie `SalutationCode` und `TitleCode` statt `Salutation` und `Title`. Die Texte pflegen Sie dann einmal in der `salutation.dat` beziehungsweise `title.dat`, statt sie in jedem Datensatz mitzuliefern. `Salutation` greift ohnehin nur, wenn `SalutationCode` leer ist.

`TaxIds` hat den Aufbau `<g>{3ISO LKZ}:{Prüfstatus}:{Ust-ID}</g>`:

```
<g>DEU:ok:DE123456789</g><g>BEL:unchecked:BE0999999999</g><g>AUT:failed:AT0999999999</g>
```

## delivupdate.csv und delivcomplete.csv

Enthalten die Lieferadressen und werden wie die Rechnungsadressen behandelt. Importieren Sie sie nur, wenn sie von der Rechnungsadresse abweichen.

Anders als bei den Rechnungsadressen ist `TableIndex` hier beim Ändern Pflicht und bei der Neuanlage verboten, weil der Shop mehrere Lieferadressen je Kunde führt.

Die Adressfelder entsprechen denen der Rechnungsadresse, mit zwei Unterschieden: Statt `EMail2` gibt es das Feld `EMail` für die Lieferadresse, und die geschäftlichen Telefonnummern sowie `TaxId` entfallen.

## bankupdate.csv und bankcomplete.csv

Enthalten die Bankverbindungen und werden ebenfalls wie die Rechnungsadressen behandelt. `TableIndex` ist beim Ändern Pflicht, bei der Neuanlage verboten.

| Feldname | Inhalt |
| - | - |
| `Owner` | Kontoinhaber |
| `Bank` | Name der Bank |
| `IBAN` | International Bank Account Number |
| `BIC` | Bank Identifier Code |
| `AccountNumber` | Kontonummer |
| `BankCode` | Bankleitzahl |
| `CountryISO` | Dreistelliger ISO-Code des Landes |
| `SEPAMandateType` | `0` nicht gesetzt, `1` einmaliges Mandat, `2` wiederkehrendes Mandat |
| `SEPADebitType` | `0` nicht gesetzt, `1` Basis-Lastschrift, `2` Firmen-Lastschrift |
| `SEPAMandateDate` | Datum der Mandatseinwilligung im Format `JJJJMMTT` |
| `SEPALastMandate` | Letzte SEPA-Mandatsnummer |
| `UserDescr` | Kommentar, der im Shop bei der Auswahl der Bankverbindung erscheint |

## Die delete-Dateien für Adressen und Bankverbindungen

`billdelete.csv`, `delivdelete.csv` und `bankdelete.csv` löschen einzelne Datensätze eines Kunden. Sie werden über dieselben Schlüsselfelder adressiert wie die zugehörigen update-Dateien.

## Verwandte Themen

* Wegweiser: [WS-SFTP-Kunden PRO](https://dokumentation.websale.de/v8s/schnittstellen/kundendaten/ws-sftp-kunden-pro.md)
* Wegweiser: [Adressierung der Datensätze](https://dokumentation.websale.de/v8s/schnittstellen/kundendaten/ws-sftp-kunden-pro/adressierung-der-datensaetze.md)
* Wegweiser: [Weitere Import-Dateien](https://dokumentation.websale.de/v8s/schnittstellen/kundendaten/ws-sftp-kunden-pro/weitere-import-dateien.md)


## Related topics

- [Weitere Import-Dateien](https://dokumentation.websale.de/v8s/schnittstellen/kundendaten/ws-sftp-kunden-pro/weitere-import-dateien.md)
- [WS-SFTP-Produkte-Pro](https://dokumentation.websale.de/v8s/schnittstellen/produkte-und-kategorien/ws-sftp-produkte-pro.md)
- [WS-SFTP-Kunden PRO](https://dokumentation.websale.de/v8s/schnittstellen/kundendaten/ws-sftp-kunden-pro.md)
- [Adressierung der Datensätze](https://dokumentation.websale.de/v8s/schnittstellen/kundendaten/ws-sftp-kunden-pro/adressierung-der-datensaetze.md)
- [WS-hreflang-Verlinkungen](https://dokumentation.websale.de/v8s/schnittstellen/marketing-seo-und-portale/ws-hreflang-verlinkungen.md)


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