# Einrichtung

Zugang zum Shop, Läger, Belegtypen, Zuordnungen und die Reihenfolge bei der Erstinbetriebnahme.

# Shopdaten

Unter **Shopify → Einstellungen → Shopdaten** wird der Zugang zum Shop hinterlegt.
Ohne diese Angaben bleiben alle weiteren Auswahllisten in den Einstellungen leer, weil
sie ihre Inhalte direkt aus dem Shop laden.

<!-- TODO Screenshot: images/einrichtung-shopdaten.png -->

## Zugangsdaten

### Shopname

Nur der Name, **nicht** die vollständige Adresse. FINN.ghost bildet daraus
`https://<Shopname>.myshopify.com`.

<p class="callout info">Der Shopname ist der Teil vor <code>.myshopify.com</code> in der Adresse des Adminbereichs. Er bleibt gleich, auch wenn der Shop unter einer eigenen Domain erreichbar ist.</p>

### AccessToken

Das Zugangstoken einer eigenen App im Shopify-Adminbereich. Anzulegen unter
**Einstellungen → Apps und Vertriebskanäle → Apps entwickeln → App erstellen**.

Die App braucht Lese- und Schreibrechte auf Produkte, Bestände, Bestellungen,
Entwürfe, Kunden, Unternehmen, Dateien, Übersetzungen, Preislisten, Publikationen und
Versandeinstellungen. Im Zweifel alle Bereiche freigeben, die mit Produkten,
Bestellungen und Kunden zu tun haben.

<p class="callout warning">Shopify zeigt das Token nur einmal an. Wer es nicht notiert hat, muss ein neues erzeugen.</p>

Beim Speichern prüft FINN.ghost die Verbindung sofort und meldet, wenn sie nicht
zustande kommt.

## Verbindung prüfen

Die Verbindung ist in Ordnung, wenn sich die Auswahllisten in den Einstellungen
füllen — etwa die Standorte, die Sprachen oder die Versandarten. Bleiben sie leer,
stimmt etwas am Shopnamen oder am Token nicht. Die konkrete Meldung steht im Protokoll
unter **Shopify → Zeitsteuerung**.

## Grenzen der Shopify-Schnittstelle

Shopify begrenzt, wie viele Anfragen eine App pro Sekunde stellen darf. FINN.ghost
beachtet das selbst: Nähert sich das Kontingent der Grenze, legt die Schnittstelle eine
Pause ein und arbeitet dann weiter. Bei Überlast auf Shopify-Seite wird der Aufruf
automatisch wiederholt.

<p class="callout info">Das ist der Grund, warum ein Vollexport bei vielen Artikeln lange dauert und sich nicht beliebig beschleunigen lässt. Das Tempo gibt Shopify vor, nicht die Schnittstelle.</p>

## Nächster Schritt

[Läger und Standorte](https://wiki.dako-it.com/books/finnghost-fur-shopify/page/lager-und-standorte)

# Läger und Standorte

Shopify führt Bestände je **Standort**. FINN.ghost muss deshalb wissen, welches
SelectLine-Lager zu welchem Shopify-Standort gehört. Die Zuordnung liegt unter
**Shopify → Einstellungen → Lager**.

<!-- TODO Screenshot: images/einrichtung-lager.png -->

<p class="callout danger">Ohne mindestens eine Zuordnung wird kein Bestand übertragen. Im Protokoll erscheint dann die Meldung, dass keine Läger definiert sind.</p>

## Die Zuordnung

Links stehen die Standorte aus dem Shop, rechts wählt man das SelectLine-Lager.

### Alle Läger

Neben den einzelnen Lägern steht die Auswahl **Alle Läger** zur Verfügung. Damit wird
der Gesamtbestand über alle Läger an diesen Standort gemeldet.

Das ist die richtige Wahl für den Normalfall: ein Shopify-Standort, ein Lagerbestand.
Erst wenn der Shop tatsächlich mehrere Standorte getrennt führt — etwa Zentrallager und
Filiale —, ordnet man einzelne Läger zu.

<p class="callout info">Ist genau ein Standort mit <em>Alle Läger</em> zugeordnet, schreibt FINN.ghost beim Bestellimport kein Lager in den Beleg. Bei echter Standorttrennung wird dagegen das Lager des Fulfillments übernommen, und zusätzlich der Lagerplatz aus den SelectLine-Lagerstammdaten.</p>

## Weitere Einstellungen in diesem Bereich

### Bestand verwenden

Schaltet die Bestandsführung im Shop insgesamt ein oder aus. Ist sie aus, verkauft
Shopify unbegrenzt weiter, weil es keine Bestandsangabe kennt.

### Reservierten Bestand ignorieren

Standardmäßig wird der reservierte Bestand abgezogen, also nur der wirklich freie
Bestand gemeldet. Mit dieser Einstellung wird der volle Lagerbestand gemeldet.

### Offene Aufträge von Bestand abziehen

Zieht die noch nicht gelieferten Mengen aus offenen Aufträgen des Bestell-Belegtyps
zusätzlich ab. Sinnvoll, wenn Aufträge in der SelectLine längere Zeit offen liegen,
bevor sie geliefert werden, und der Shop diese Ware nicht mehr anbieten soll.

## Nächster Schritt

[Belege](https://wiki.dako-it.com/books/finnghost-fur-shopify/page/belege)

# Belege

Unter **Shopify → Einstellungen → Belege** wird festgelegt, wie Bestellungen in die
SelectLine-Belegkette einlaufen und was aus der Belegkette zurück in den Shop gemeldet
wird.

<!-- TODO Screenshot: images/einrichtung-belege.png -->

## Belegtypen

Zur Auswahl stehen jeweils alle Verkaufsbelege der SelectLine.

### Bestellungen

In diesen Belegtyp wird der Warenkorb aus dem Shop übertragen.

### Vorkasse

Bestellungen mit einer Vorkasse-Zahlungsart landen stattdessen in diesem Belegtyp.
Welche Zahlungsarten als Vorkasse gelten, wird unter
[Zahlungs- und Versandarten](https://wiki.dako-it.com/books/finnghost-fur-shopify/page/zahlungs-und-versandarten) festgelegt.

Ist der Vorkassebeleg in der SelectLine als gezahlt verbucht, markiert FINN.ghost die
Bestellung im Shop als bezahlt.

### Versand

Erreicht ein Beleg diesen Belegtyp — üblicherweise der Lieferschein —, meldet die
Schnittstelle die Bestellung im Shop als versendet und überträgt die Paketnummern aus
der Paketverwaltung.

### Rechnung

Wird für die Gutschriftverarbeitung gebraucht: Zu einer Rückerstattung im Shop entsteht
in der SelectLine eine Rechnung als Vorgänger und darauf die Gutschrift. Siehe
[Gutschriften und Storni](https://wiki.dako-it.com/books/finnghost-fur-shopify/page/gutschriften-und-storni).

### Belegtyp Bestelländerungen

Die Gegenrichtung: Wird ein Beleg dieses Typs in der SelectLine geändert, überträgt
FINN.ghost die Änderung **zurück in die Shopify-Bestellung** — geänderte Mengen,
entfernte und hinzugefügte Positionen, angepasste Versandkosten.

<p class="callout warning">Das ist die einzige Stelle, an der die Schnittstelle die Bestellung im Shop inhaltlich verändert. Wer das nicht möchte, lässt das Feld leer. Näheres unter <a href="sfy-rueckmeldung">Versand und Rückmeldungen</a>.</p>

## Versandmeldung

### Trackingnummern importieren

Kehrt die Richtung um: Statt den Versand aus der SelectLine an Shopify zu melden,
übernimmt FINN.ghost die in Shopify erfassten Sendungen. Zu einer vollständig
versendeten Bestellung entsteht der Versandbeleg als Nachfolger, und die
Trackingnummern werden in die Paketverwaltung geschrieben.

Das ist der Weg für Shops, in denen der Versand über Shopify oder einen dort
angebundenen Dienstleister abgewickelt wird.

<p class="callout info">Beide Richtungen schließen sich aus. Ist der Import aktiv, wird kein Versand mehr an Shopify gemeldet.</p>

### Nur Lieferstatus senden, wenn Paketnummer vorhanden

Meldet den Versand erst, wenn mindestens eine Paketnummer erfasst ist. Findet sich am
Versandbeleg keine, sucht FINN.ghost zusätzlich in den Vorgängerbelegen.

### Kunde über Versand informieren

Legt fest, ob Shopify die Versandbenachrichtigung an den Kunden schickt.
Voreingestellt ist **aus** — sinnvoll, wenn die Kundenkommunikation über die SelectLine
läuft.

## Positionen

### Versandposition immer anlegen

Normalerweise entsteht eine Versandposition nur, wenn die Bestellung Versandkosten
enthält. Mit dieser Einstellung wird sie immer angelegt, auch mit Betrag 0.

### Bezeichnung vom Versandartikel aus SelectLine verwenden

Standardmäßig übernimmt die Versandposition die Bezeichnung der Versandart aus dem
Shop. Mit dieser Einstellung gilt stattdessen die Bezeichnung des Artikels aus der
SelectLine.

### Rabattpositionen aufsummieren pro Rabattcode

Ohne diese Einstellung entsteht pro rabattierter Artikelposition eine eigene
Rabattposition. Bei einem Rabattcode über den ganzen Warenkorb ergibt das viele kleine
Zeilen. Mit der Einstellung wird pro Rabattcode **eine** Position gebildet.

## Nächster Schritt

[Zahlungs- und Versandarten](https://wiki.dako-it.com/books/finnghost-fur-shopify/page/zahlungs-und-versandarten)

# Zahlungs- und Versandarten

Damit eine Bestellung als Beleg entstehen kann, muss FINN.ghost wissen, welche
Zahlungsbedingung und welche Lieferbedingung der SelectLine zu einer Zahlungsart und
Versandart im Shop gehört.

<!-- TODO Screenshot: images/einrichtung-zahlungsbedingungen.png -->

## Zahlungsbedingungen

<p class="callout warning">Die Liste der Zahlungsarten füllt sich erst, nachdem Bestellungen importiert wurden. Shopify bietet keine Abfrage der verfügbaren Zahlungsarten an — FINN.ghost merkt sich deshalb jede Zahlungsart, die in einer Bestellung vorkommt. Nach der Einrichtung sollte man den Bereich also erneut aufrufen und die neu erschienenen Zahlungsarten zuordnen.</p>

Zu jeder Zahlungsart gibt es vier Spalten.

### SelectLine

Die Zahlungsbedingung, die in den Beleg geschrieben wird.

### Bankbezug

Die Kasse oder Bank, die als Bankbezug im Beleg gesetzt wird. Erleichtert später den
Zahlungsabgleich in der Buchhaltung.

### Import

Normalerweise werden nur Bestellungen übernommen, deren offener Betrag 0 ist — also
vollständig bezahlte. Zahlungsarten wie **Rechnung** erreichen diesen Zustand nie; für
sie wird dieser Haken gesetzt.

<p class="callout info">Bei Shopify Plus mit B2B-Bestellungen entfällt die Prüfung ohnehin, weil dort mit Zahlungsziel gearbeitet wird.</p>

### Vorkasse

Bestellungen dieser Zahlungsart gehen in den Vorkasse-Belegtyp statt in den
Bestell-Belegtyp.

### Geschenkkarten

Mit Geschenkkarten bezahlte Anteile werden nicht als Zahlungsart behandelt, sondern als
**Rabattposition** auf den Promotion-Artikel gebucht, mit dem Hinweis auf die letzten
Zeichen der Karte. Steuer 0.

Wird eine Bestellung ausschließlich mit Geschenkkarte bezahlt, gilt die Zuordnung der
Zahlungsart `gift_card`.

## Lieferbedingungen

Hier wird jeder Versandart des Shops eine Lieferbedingung der SelectLine zugeordnet.

Die Liste kommt aus den Shopify-Versandprofilen. Zusätzlich steht immer der Eintrag
**Abholung** zur Verfügung — Shopify meldet bei Abholung im Laden den Shopnamen als
Versandart, und FINN.ghost bildet das auf diesen Eintrag ab.

<p class="callout warning">Findet sich zu einer Versandart keine Zuordnung, wird die Bestellung trotzdem importiert — der Beleg bleibt dann aber ohne Lieferbedingung. Im Protokoll steht ein Hinweis. Nach dem Anlegen neuer Versandarten im Shop lohnt deshalb ein Blick in diesen Bereich.</p>

## Versanddienstleister

Unter **Shopify → Einstellungen → Versand** lassen sich die
SelectLine-Transportdienstleister auf die Bezeichnungen abbilden, die Shopify für die
Sendungsverfolgung erwartet. Ohne Zuordnung wird die SelectLine-Bezeichnung
unverändert übergeben.

<p class="callout info">Trifft Shopify den Dienstleister nicht, zeigt es dem Kunden zwar die Paketnummer, aber keinen Verfolgungslink. Die Zuordnung lohnt sich daher für die gängigen Dienstleister.</p>

## Platzhalterartikel

Nicht jede Position einer Bestellung entspricht einem Artikel aus der SelectLine.
Versandkosten und Rabatte brauchen deshalb Platzhalterartikel, die unter
**Shopify → Einstellungen → Artikel** hinterlegt werden.

### Promotion Artikel

Auf diesen Artikel werden Rabatte, Rabattcodes und Geschenkkarten gebucht.

<p class="callout danger">Ist kein Promotion-Artikel hinterlegt, werden Rabatte stillschweigend übersprungen — der Beleg in der SelectLine ist dann teurer als die Bestellung im Shop. Das ist die häufigste Ursache für Betragsabweichungen.</p>

### Versandartikel – Standard und Ermäßigt

Auf diese Artikel werden die Versandkosten gebucht. FINN.ghost ermittelt, welche
Steuersätze in der Bestellung vorkommen, und **verteilt die Versandkosten anteilig**
nach dem jeweiligen Warenwert. Steuersätze unter 16 % laufen auf den ermäßigten
Versandartikel.

<p class="callout info">Enthält eine Bestellung Ware mit 19 % und mit 7 %, entstehen dadurch zwei Versandpositionen mit dem jeweils passenden Steuersatz. Wer das nicht möchte, aktiviert <strong>Steuer vom Versandartikel aus SelectLine verwenden</strong> — dann entsteht eine Position mit dem Steuersatz des Artikels.</p>

### Konten für Rabattpositionen

Zusätzlich lässt sich je Steuersatz ein Erlöskonto für die Rabattpositionen festlegen.
Ohne diese Angabe übernimmt die Rabattposition Konto und Steuer der vorangehenden
Artikelposition — damit landet der Rabatt auf demselben Konto wie der rabattierte
Umsatz.

## Nächster Schritt

[Sprachen und Märkte](https://wiki.dako-it.com/books/finnghost-fur-shopify/page/sprachen-und-markte)

# Sprachen und Märkte

Shopify bündelt Länder, Währungen und Sprachen in **Märkten**. Zu jedem Markt gehört
ein **Katalog** mit einer **Preisliste** und einer **Publikation**. FINN.ghost kann
diese Struktur mit Preisen aus SelectLine-Preisgruppen versorgen.

<!-- TODO Screenshot: images/einrichtung-maerkte.png -->

## Sprachzuordnung

Unter **Shopify → Einstellungen → Sprachzuordnung** wird jeder Shop-Sprache eine
SelectLine-Sprache zugeordnet.

Übersetzt werden Produkttitel und Beschreibung aus den Fremdbezeichnungen zum Artikel.
Zusätzlich schreibt der Bestellimport die Sprache der Bestellung in den Beleg, sodass
Belegformulare in der Sprache des Kunden gedruckt werden können.

<p class="callout info">Es werden nur Titel und Beschreibung übersetzt. Metafelder, Sammlungen und Merkmalsbezeichnungen bleiben einsprachig.</p>

## Märkte

Der Bereich **Märkte** zeigt die im Shop eingerichteten Märkte mit ihren Katalogen,
Preislisten und Währungen. Er dient der Übersicht — eingerichtet werden Märkte im
Shopify-Adminbereich.

## Preiszuweisung zu Katalogen

Hier entsteht die eigentliche Zuordnung: Je Katalog wird festgelegt, aus welcher
SelectLine-**Preisgruppe** und in welcher **Währung** der Preis kommt.

Die Aufgabe *Preise exportieren* schreibt daraufhin für jeden Artikel den Preis in die
Preisliste des Katalogs und veröffentlicht den Artikel in der zugehörigen Publikation.

<p class="callout warning">Findet sich für einen Artikel in der zugeordneten Preisgruppe kein Preis, wird der Katalogpreis dieses Artikels wieder <strong>entfernt</strong>. Damit fällt der Artikel im betreffenden Markt auf den Standardpreis zurück. Wer in einem Markt bewusst nur einen Teil des Sortiments anbieten will, sollte das im Shopify-Adminbereich über die Publikation steuern, nicht über fehlende Preise.</p>

## Währungen in Bestellungen

### Präsentationswährungen

Kauft ein Kunde in einer anderen Währung als der Shop-Grundwährung, liefert Shopify
beide Beträge. Standardmäßig übernimmt FINN.ghost den Betrag in der Shop-Währung.

Trägt man eine Währung in die Liste der Präsentationswährungen ein, werden für
Bestellungen in dieser Währung stattdessen die Beträge **in der Kundenwährung** in den
Beleg geschrieben, und der Beleg erhält diese Währung.

<p class="callout info">Ergänzend lässt sich je Währung ein Fibukonto festlegen, das bei neu angelegten Kunden gesetzt wird.</p>

## Nächster Schritt

[SelectLine-Makros](https://wiki.dako-it.com/books/finnghost-fur-shopify/page/selectline-makros)

# SelectLine-Makros

An drei Stellen kann das Modul ein SelectLine-Makro ausführen. Damit lassen sich
kundenspezifische Nachbearbeitungen ohne Programmierung einhängen. Die Felder liegen
unter **Shopify → Einstellungen → Makros**.

<!-- TODO Screenshot: images/einrichtung-makros.png -->

## Bestellung angelegt

Läuft, nachdem der Beleg vollständig aufgebaut ist — nach Kopf, allen Positionen, den
Versandkosten und der Kontenzuweisung der Rabattpositionen. Übergeben werden **Belegtyp**
und **Belegnummer**.

Das ist der Platz für alles, was mit einem fertigen Shop-Beleg passieren soll:
Kommissionierung anstoßen, Zusatzfelder befüllen, Belege drucken, eigene Prüfungen
laufen lassen.

<p class="callout danger">Läuft das Makro auf einen Fehler, wird der gerade angelegte Beleg <strong>gelöscht</strong> und die Bestellung im Shop mit dem Tag <code>ImportError</code> versehen. Sie wird dann nicht erneut versucht, bis der Tag entfernt wird. Makros an dieser Stelle sollten ihre Fehler daher selbst abfangen. Siehe <a href="sfy-bestellungen">Bestellungen</a>.</p>

## Kunde angelegt

Läuft, nachdem beim Bestellimport ein neuer Kunde entstanden ist. Übergeben wird die
**Nummer** des neuen Kunden.

Bei reinen Aktualisierungen bestehender Kunden läuft kein Makro. Und auch nicht beim
Kundenexport in den Shop — nur beim Anlegen aus einer Bestellung.

## Artikel exportieren

Soll vor dem Export **jedes einzelnen** Artikels laufen und bekommt die **Nummer** des
Artikels. Gedacht für berechnete Felder, die der Shop braucht — etwa einen
zusammengesetzten Beschreibungstext.

<p class="callout danger">Dieses Feld hat derzeit <strong>keine Wirkung</strong>. Die Schnittstelle liest an dieser Stelle die entsprechende Einstellung des Moduls FINN.webshop, nicht die hier eingetragene. Wer ein Artikelmakro braucht, sollte sich an den Support wenden — bitte nichts in dieses Feld eintragen, es würde stillschweigend ignoriert.</p>

## Hinweise

- Makronamen werden ohne Prüfung übernommen. Ein Tippfehler zeigt sich erst zur Laufzeit
  als Fehler.
- Die Makros laufen unter dem API-Benutzer aus den SelectLine-Einstellungen, nicht unter
  einem interaktiven Benutzer.
- Ein Makro, das vor jedem Artikel läuft, wird bei einem Vollexport entsprechend oft
  aufgerufen. Bei 20.000 Artikeln sind das 20.000 Aufrufe — jede Sekunde Laufzeit
  multipliziert sich.

## Nächster Schritt

[Erstinbetriebnahme](https://wiki.dako-it.com/books/finnghost-fur-shopify/page/erstinbetriebnahme)

# Erstinbetriebnahme

Die einzelnen Übertragungen bauen aufeinander auf. Bei einem leeren Shop lohnt es sich,
die Läufe **einmal in dieser Reihenfolge** von Hand anzustoßen, unter
**Shopify → Zeitsteuerung**.

<p class="callout warning">Diese Reihenfolge gilt für die Erstbefüllung. Im laufenden Betrieb spielt sie keine Rolle mehr — dann zieht die Schnittstelle fehlende Metafelder und Sammlungen selbst nach.</p>

## Reihenfolge

### 1. Sachmerkmale und Extrafelder aktualisieren

Legt im Shop die Metafeld-Definitionen an, in denen später die SelectLine-Felder
landen. Dieser Schritt muss zuerst laufen.

<p class="callout info">Ohne die Definitionen wären die Werte am Produkt vorhanden, aber im Adminbereich nicht als gepflegte Felder sichtbar. Der Artikelexport zieht fehlende Definitionen bei Bedarf selbst nach — beim Erstlauf ist der eigene Durchgang aber schneller.</p>

### 2. Artikelgruppen exportieren

Legt die Sammlungen an, in die die Artikel später einsortiert werden.

### 3. Artikel exportieren (alle)

Der große Lauf. Er legt Produkte, Varianten, Bilder, Metafelder und Sammlungszuordnungen
an und exportiert direkt danach den Bestand jeder Variante.

<p class="callout info">Für einen ersten Eindruck kann man stattdessen <strong>Artikel exportieren (alle, ohne Bilder)</strong> starten — das ist deutlich schneller. Die Bilder holt der nächste Vollauf nach.</p>

### 4. Preise exportieren

Setzt Preis und Streichpreis je Variante und füllt die Katalogpreise der Märkte.

### 5. Bestand exportieren

Korrekturlauf über alle Artikel. Setzt außerdem den Status archivierter und
freigegebener Artikel richtig.

### 6. Exportiere Kunden

Überträgt die Kunden mit gesetztem Kundenkennzeichen — bei Shopify Plus als
Unternehmen mit Kontakten.

### 7. Dateien aktualisieren

Lädt die Journaldateien der konfigurierten Kategorien hoch und hängt sie an die
Produkte.

### 8. Bestellungen importieren

Erst zum Schluss einschalten. Vorher fehlen im Shop die Artikel, auf die sich
Bestellungen beziehen würden.

<p class="callout danger">Der erste Importlauf holt alle Bestellungen, die seit dem Einschalten geändert wurden. In einem Shop, der vorher schon live war, kann das viele Altbestellungen bedeuten. Wer das nicht will, sollte den Zeitpunkt vorher mit dem Support abstimmen.</p>

## Danach

Wenn die Erstbefüllung durchgelaufen ist, werden die Aufgaben mit einem Zeitplan
versehen. Empfehlungen dazu stehen unter
[Zeitplan der Übertragungen](https://wiki.dako-it.com/books/finnghost-fur-shopify/page/zeitplan-der-ubertragungen).

## Kontrolle

| Prüfpunkt                      | Wo                                                            |
| ------------------------------ | ------------------------------------------------------------- |
| Anzahl der Produkte im Shop     | Shopify-Adminbereich, verglichen mit den freigegebenen Artikeln  |
| Sammlungen                      | Shopify-Adminbereich unter *Produkte → Sammlungen*                |
| Preise an Stichproben           | Produkt im Shop aufrufen, Preis mit der SelectLine vergleichen    |
| Bestände an Stichproben         | Shopify-Adminbereich unter *Produkte → Bestand*                   |
| Meldungen im Protokoll          | **Shopify → Zeitsteuerung**                                       |

<p class="callout info">Das Protokoll enthält auch Hinweise auf übersprungene Artikel. Diese Meldungen sind keine Fehler, sondern zeigen fehlende Angaben — die Liste ist eine gute Arbeitsgrundlage für die Datenpflege. Näheres unter <a href="sfy-pruefen">Wenn etwas nicht im Shop ankommt</a>.</p>