Konfiguration
Die Konfiguration der Schnittstelle erfolgt über eine INI-Datei (z.B. config.ini). Die Standardwerte werden aus der defaultconfig.toml geladen und können in der INI-Datei überschrieben werden.
Optionale Parameter
Parameter die mit ; Optional gekennzeichnet sind, haben keinen Standardwert in der defaultconfig.toml und müssen nur bei Bedarf in der config.ini gesetzt werden. Der angegebene Wert entspricht dem Code-Fallback.
Shop-Verbindung
[SHOP]
; URL des Shopware 6 Shops
url = https://mein-shop.de
; API-Zugangsdaten der Shopware 6 Integration
consumer_key = SWIA...
consumer_secret = ...
; Shopware 6 API
api = shopware6
; Anzahl der Artikel pro API-Request
chunk_size = 10
; Anzahl der Preise pro API-Request
chunk_size_prices = 100
; Maximale Anzahl der Ergebnisse pro Suchanfrage
query_limit = 500
; Wartezeit in Sekunden zwischen Requests bei Fehler
retry_wait_time = 5
; Maximale Anzahl der Wiederholungen mit Wartezeit
max_retry_with_wait = 3
; Optional: Root-Kategorie-ID für Kategorie-Sync
root_category_id =
; Optional: Max. gleichzeitige TCP-Verbindungen (Standard: 10)
tcp_limit = 10
Shopware 6
[SW6]
; Name des Sales Channels
salesChannelName = Storefront
WinLine WebService
[EWL]
ewluser = a
ewlpw = b
wlewlserviceurl = http://127.0.0.1:80/ewlservice/
WinLine Mandant & Datenbank
[WL]
; WinLine Mandant
mcomp = 500M
; Kundennummer für Bestellungen ohne oder mit in der WinLine nicht gefundener Kundennummer
sammelkonto = 10000
; Alle Bestellungen auf Sammelkonto buchen
always_sammelkonto = False
; Verhalten bei fehlenden WL-Konten: ERROR, SKIP oder SAMMELKONTO
missing_wl_konto = ERROR
; Eigenschaftsfeldnummer für Webartikel-Markierung
webartikel = 5
; Eigenschaftsfeldnummer für Webkonto-Markierung (Personenkonto)
webkonto = 1104
; Eigenschaftsfeldnummer für Webkonto-Markierung (Kontakt)
webkonto_kontakt = 1
; Eigenschaftsfeldnummer für den Webkatalog
webkatalog = 1009
; Eigenschaftsfeld-Spalte für Shopware-Konfiguration (Standard: 14)
webeigenschaft = 14
; Preisfaktor aus dem Colli verwenden
preisfaktorauscolli = True
; Preislisten-Modul verwenden
syncprices_module = True
; interne WinLine Nummer(n) für die Webshop Preisliste(n) (kommagetrennt)
preislistennr = 1
; Default-Währung ISO-Code (leer = Mandant-Währung)
defaultwaerungiso =
; Shop-Variante aktivieren
shopvariante = False
; Inaktive Ausprägungen nicht übermitteln
skip_inaktiv_variants = True
; Ausprägungsgruppen die nicht als Varianten angelegt werden (kommagetrennt)
ignoreauspraegungsgruppen = 0
; Kategorien aus Eigenschaft (Nummer der Eigenschaft)
categories =
; Kategorien aus Artikeluntergruppen generieren
Kategorien_aus_Artikeluntergruppen = False
; Richtung der TrackingNr Übermittlung (True = Shop führend, False = WinLine führend)
trackingnrtowinline = False
; WinLine Feld für Sendungsverfolgungsnummer
trackingnrfield =
; Feld für die Shop-Bestellnummer im WinLine-Beleg
shoporderid = C063_Textzeile1
; Feld für den Bestellstatus im WinLine-Beleg
orderstatus = C071_Textzeile9
; Feld für den Bezahlstatus im WinLine-Beleg
paymentstatus = C072_Textzeile10
; Feld für den Lieferstatus im WinLine-Beleg
deliverystatus = C071_Textzeile9
; Nutze Rechnungsadresskonto aus dem Personenkonto für die Belege
rechnungsadresskonto = True
; Optional: Nutze Lieferadresskonto aus dem Personenkonto für die Belege
lieferadresskonto = False
; Encoding der XML-Dateien
encoding = utf-8
; Bestellungen per EXIM importieren
orders_via_exim = True
; EXIM Tabelle für Beleg-Kopf
exim_order_head = energyConnectShop
; EXIM Tabelle für Beleg-Mitte
exim_order_body = energyConnectShopM
; Testmodus (keine Daten an Shop übermitteln)
test_mode = False
; Verzeichnis für XML-Export (leer = WebService verwenden)
xmlpath =
; Sammelkonto für Gastbestellungen
guest_sammelkonto = 10000
; WinLine-Feld für Shop-Belegnummer
shopbelegnummernfeld = C064_Textzeile2
; Artikelnummer statt ID verwenden
usenumberinsteadofid = False
; Shopware-Feld für Tracking-Nummer
shoptrackingnrfield = trackingCodes
; Kundenimport per EXIM
customers_via_exim = True
; EXIM-Tabelle für Kunden
exim_customers = EXIM_KONTAKT
; Optional: Rechnungen nach Trackingnr. prüfen (Standard: False)
check_invoices_for_tracking = False
; Optional: Feld für Shopware-Kunden-ID (Standard: C002_Kontonummer)
customer_shopware_id_field = C002_Kontonummer
; Optional: Verzeichnis für Kunden-XML-Export (Standard: ./xml/customers)
xmlpath_customers = ./xml/customers
; Optional: Zusatzfeld für Shopware-ID Kontakte
swid_kontakt =
; Optional: Zusatzfeld für Shopware-ID Personenkonten
swid_pkonto =
; Optional: Filter-ID-Länge (Standard: 0)
filter_id_length = 0
SQL-Verbindung
[SQL]
driver = ODBC Driver 18 for SQL Server
server = localhost
database = CWLDATEN
uid = meso
pwd = meso
charset = utf8
; Maximale Anzahl SQL-Parameter pro Query
max_sql_parameter = 2000
; SQL-Debug-Modus
debug = False
; Temp-Tabellen mit doppeltem Hash
temptable_two_hash = False
; Verschlüsselte Verbindung
encrypt = True
; SSL-Zertifikat immer vertrauen (nur für Entwicklung)
trustservercertificate = True
[SQLSYS]
database = CWLSYSTEM
; uid/pwd werden per Referenz aus [SQL] geerbt (${SQL:uid}, ${SQL:pwd})
[SQLARCHIV]
; database muss auf die Archiv-Datenbank gesetzt werden (kein Standardwert in defaultconfig.toml)
; uid/pwd werden per Referenz aus [SQL] geerbt (${SQL:uid}, ${SQL:pwd})
Shop-Felder
[SHOPFIELDS]
; Lieferadresse aus dem Shop übernehmen
addressfromshop = True
; Rechnungsadresse aus dem Shop übernehmen
billfromshop = True
; WinLine Vorlage mit Liefer- und Rechnungsadresse
wlvorlageLR = wooCommerceAdressenLR
; WinLine Vorlage ohne Adressen
wlvorlageKA = sw_noadd_nodis
; Mitarbeiterkonten verwenden
mitarbeiterkonten = False
; WebService-Vorlage Kunden
wlvorlagekunden = Shopware6Kunden
; WebService-Vorlage Kontakte
wlvorlagekontakt = Shopware6Kontakt
Bestellungsimport
[ORDERS]
; Reihenfolge der Belegabrufe (JSON-Array mit Segmentnamen)
import_sequences = ["Bestellung"]
[Bestellung]
; Optional: Statustyp für die Suche (OrderState, order_delivery, order_transaction)
status_type = OrderState
; Status zum Abrufen der Bestellungen
status_fetch = OrderState.open
; Status nach erfolgreichem Import
status_success = OrderState.inProgress
; Status bei Importfehler
status_fail = OrderState.open
; WinLine Belegstufe (nicht_drucken, Angebot, Auftrag, Lieferschein, Rechnung)
import_belegstufe = Lieferschein
; Prüfen ob Bestellung bereits importiert wurde
check_existing = True
Lieferung
[Lieferung]
; Status zum Abrufen
status_fetch = OrderDeliveryState.open
; Status nach erfolgreichem Import
status_success = OrderDeliveryState.shipped
; Status bei Importfehler
status_fail = OrderDeliveryState.open
; Status nach Tracking-Übermittlung
status_tracking = OrderDeliveryState.shipped
; WinLine Belegstufe
import_belegstufe = Lieferschein
Bezahlung
[Bezahlung]
; Status zum Abrufen (kommagetrennt für mehrere)
status_fetch = OrderTransactionState.refunded,OrderTransactionState.refunded_partially
; Status nach erfolgreichem Import
status_success = OrderTransactionState.inProgress
; Status bei Importfehler
status_fail = OrderTransactionState.inProgress
; WinLine Belegstufe
import_belegstufe = Rechnung
; Gutschrift erstellen
gutschrift = False
Shop-Eigenschaften
[SHOPPROPERTY]
; Lieferstatus nach Tracking-Übermittlung
orderstatus_tracking = OrderDeliveryState.shipped
E-Mail-Benachrichtigungen
[MAIL]
; SMTP-Server
server =
; SMTP-Port
port = 0
; STARTTLS verwenden
use_tls = False
; SMTP-Benutzername
username =
; SMTP-Passwort
password =
; Betreff-Prefix für Fehlerbenachrichtigungen
subject_prefix = [SHOPWARE FEHLERLOG]
; Absender-Adresse
sender =
; Empfänger-Adresse
receiver =
; Maximale Anzahl gepufferter Nachrichten
capacity = 1000
; Log-Level für E-Mail-Versand
level = DEBUG
; E-Mail-Versand aktivieren
tosend = False
Archiv
[ARCHIV]
; interne WinLine ID (Archiv) für das Schlagwort: Webshop Grafik
archiv_webshop_grafik = 102
; interne WinLine ID (Archiv) für das Schlagwort: Webdokument
archiv_webdokument = 103
; interne WinLine ID (Archiv) für das Schlagwort: Artikelnummer
archiv_artikelnummer = 41
; interne WinLine ID (Archiv) für das Schlagwort: Artikelbezeichnung
archiv_beschreibung = 42
; Optional: Liste der Zusatzfelder für zusätzliche Grafiken (kommagetrennt)
zusatzgrafiken =
Bildkonvertierung
[CONVERT]
; Zielformat für LibreOffice Konvertierung
targetformat = html:HTML:EmbedImages
; Maximale Bildgröße (Breite,Höhe)
scale_images = 1280,720
; Hintergrundfarbe für Bilder (R,G,B)
background_color = 255,255,255
Artikeleigenschaften
[PROPERTY]
; Bedarfslistenbestand verwenden
bedarfslistenbestand = False
; Artikelmedien aus der WinLine verwenden
useartiklemedia = False
; Archiv-Bilder verwenden
usearchivimages = True
Cross-Selling
[CROSS]
; Cross-Selling aktivieren
crossselling_aktiv = True
; Keine Synchronisation bei Wert
notsync = 0
; Prioritätsbereich für Ersatzteile
ersatzteilevon = 1
ersatzteilebis = 99
; Prioritätsbereich für Zubehör
zbhrvon = 100
zbhrbis = 199
; Prioritätsbereich für Ersatz & Zubehör
ezvon = 200
ezbis = 299
Dynamisches Cross-Selling
[DYNACROSS]
; Name der Cross-Selling-Gruppe im Shop
cross_name = Unsere Vorschläge
; Optionales WinLine Zusatzfeld fuer Anzeige-Namen je Cross-Selling
cross_name_feld = C228_Zusatzfeld28
; WinLine Zusatzfeld für die Gruppen-Zuordnung
cross_gruppe_feld = C229_Zusatzfeld29
; WinLine Zusatzfeld für die Anzeige-Zuordnung
cross_anzeige_feld = C230_Zusatzfeld30
; Trennzeichen fuer mehrere Gruppen/Anzeige-Namen in den Zusatzfeldern
cross_trennzeichen = ,
; Sortierung (cheapestPrice / name / releaseDate)
sort_by = cheapestPrice
; Sortierrichtung (ASC / DESC)
sort_direction = ASC
cross_gruppe_feld, cross_anzeige_feld und cross_name_feld koennen mehrere Werte enthalten. Die Werte werden mit cross_trennzeichen getrennt, getrimmt und in Reihenfolge verarbeitet. Aus jedem Wert aus cross_gruppe_feld wird ein Shopware-Tag erzeugt und dem Artikel zugeordnet. Die dynamischen Produktgruppen filtern exakt auf diese Tags, damit Gruppennamen auch Teilstrings anderer Gruppennamen sein duerfen. Fehlt fuer einen Eintrag ein Wert aus cross_name_feld, wird cross_name als Anzeigename verwendet. cross_name kann ebenfalls eine getrennte Liste enthalten; ist nur ein Name gepflegt, gilt dieser weiter fuer alle fehlenden Anzeigenamen. Beim Start-Sync wird ein Custom-Field-Set fuer dynamische Produktgruppen angelegt, damit die Schnittstellen-Markierungen im Shopware-Backend an der dynamischen Produktgruppe sichtbar sind. Diese sichtbaren Marker verwenden eigene technische Namen fuer dynamische Produktgruppen, damit keine vorhandenen Custom Fields mit gleichem Namen kollidieren.
Bestehende Cross-Sellings und dynamische Produktgruppen in Shopware werden beim normalen Artikelsync nicht geloescht. Wenn von der Schnittstelle erzeugte Cross-Sellings bewusst entfernt werden sollen, muss der Wartungsbefehl ess.exe clearCrossSellings explizit ausgefuehrt werden. Von der Schnittstelle erzeugte dynamische Produktgruppen koennen mit ess.exe clearDynamicProductGroups bereinigt werden. Beide Befehle nutzen Markierungen in Shopware und lassen manuell gepflegte Eintraege unangetastet.
Mehrsprachigkeit
[LANGUAGES]
; Liste der Sprachen (JSON-Array)
languages = ["Deutsch"]
[Deutsch]
; Name des Sales Channels für diese Sprache
salesChannelName =
; Beschreibungsfeld-Nummer
descriptionfield = 0
; Position der Sprache
position = 1
; Separate Kategorien für diese Sprache
separate_categorie = False
; Hauptsprache
primary_shop = True
; Locale-Code
local_code = de-DE
; Encoding
encoding = utf-8
Mapping
[MAPPING]
; Pfad zum Mapping-Ordner
mapping_path = conf\mapping\
Sonstige Einstellungen
[OTHER]
; Temporärer Ordner
tmppath =
; Pfad zu XML-Preferences für den Kundenimport
xml_preferences = conf\mapping\xml_preferences
; Bestellungen als Batch-XML
batch_orders = False
; Optional: Systemzertifikate für SSL verwenden (Standard: False)
truststore = False
; Optional: Kunden als Batch verarbeiten (Standard: False)
batch_customers = False
; Optional: Statische Dateinamen verwenden (Standard: False)
static_file_name = False
[LIBREOFFICE]
; Pfad zu LibreOffice
sofficepath = C:\Program Files\LibreOffice\program\soffice.exe
Feature-Flags
Über Feature-Flags können einzelne Funktionen der Schnittstelle aktiviert oder deaktiviert werden.
[FEATURES]
; Menge2 aus der WinLine als Preis verwenden
MENGE2 = False
; UVP aus dem allgemeinen Brutto-Preis ermitteln
UVP_FROM_ALLGEMEIN_BRUTTO = False
; UVP aus dem allgemeinen Netto-Preis ermitteln
UVP_FROM_ALLGEMEIN_NETTO = False
; Höchster Preis hat Priorität
PRICE_PRIORITY_HIGHEST = False
; Dynamisches Cross-Selling aktivieren
DYNAMIC_CROSS_SELLING = False
; Mapping für den Kundenimport verwenden
USE_MAPPING_FOR_CUSTOMERS = True
; Preisduplikate entfernen (z.B. bei überschneidender Gültigkeit)
REMOVE_PRICE_DUPLICATES = True
; Rabattmatrix-Preise zusammenfassen statt kundenindividuell zu übertragen
SUMMARIZE_ACCOUNT_MATRIX = True
; Kunden als Kontakte/Ansprechpartner in der WinLine anlegen
CUSTOMERS_AS_CONTACT = True
; Bestellungen per WebService in das aktuelle Wirtschaftsjahr importieren
WEBSERVICE_COMPANYYEAR = True
; Wenn Kategorien aus Eigenschaften oder Artikeluntergruppen aktiv sind, aber fuer
; einen Artikel keine Kategorie ermittelt wird, wird die Root-Kategorie des
; Shopware-Verkaufskanals gesetzt.
DEFAULT_CATEGORY_FALLBACK = False
DEFAULT_CATEGORY_FALLBACK ordnet Artikel ohne ermittelte Kategorie der Root-Kategorie des Shopware-Verkaufskanals zu. Das Feature greift nur, wenn Kategorien aus Eigenschaften oder Artikeluntergruppen konfiguriert sind und beide Quellen fuer den konkreten Artikel leer bleiben.
Exklusive Features
Einige Features schließen sich gegenseitig aus. Folgende Kombinationen sind nicht gleichzeitig verwendbar:
MENGE2undUVP_FROM_ALLGEMEIN_NETTOMENGE2undUVP_FROM_ALLGEMEIN_BRUTTOUVP_FROM_ALLGEMEIN_BRUTTOundUVP_FROM_ALLGEMEIN_NETTOMENGE2undPRICE_PRIORITY_HIGHESTUVP_FROM_ALLGEMEIN_NETTOundPRICE_PRIORITY_HIGHESTUVP_FROM_ALLGEMEIN_BRUTTOundPRICE_PRIORITY_HIGHEST