Darstellung
Kunden & Kontaktpersonen
Transaktion: SAL01 Kunden, SAL04 Kontaktpersonen
UI-Pfad: /customers, /contactPersons
API: /api/customer, Contact Person API
Business-Zweck
Der Kundenstamm (Debitor) ist Voraussetzung für jeden Vertriebsbeleg. Partner synchronisieren Kunden aus Shop, CRM oder ERP nach reybex, pflegen Adressen und Ansprechpartner und verknüpfen Zahlungsbedingungen, Preislisten und USt-Daten für korrekte Aufträge und Rechnungen.
Ohne gültigen Kunden schlagen POST /api/salesHead/ und Connector-Importe fehl oder erzeugen Dubletten.
Kernbegriffe
| Begriff | Bedeutung |
|---|---|
| Customer | Debitor (ContactType Debitor) |
customerNo | Interne Kundennummer (Nummernkreis SAL01) |
| CustomerAddress | Mehrere Adressen (Rechnung, Lieferung, …) |
| ContactPerson | Ansprechpartner (SAL04) |
salesPriceListHead | Standard-VK-Preisliste des Kunden |
isAddressMatchingUsed | Adress-Matching statt Neuanlage |
| Prospect | CRM-Interessent vor Umwandlung |
Fachlicher Ablauf / Workflow
- Kunde anlegen oder per Adress-Matching finden
- Adressen und Kontaktpersonen pflegen
- Zahlungsbedingung, Preisliste, USt-ID setzen
- In Aufträgen referenzieren (
customer, optionalreceiver)
Partner-Szenarien
Szenario 1 – Neukunde aus Shop-Bestellung
- Shop liefert Rechnungs- und Lieferadresse
POST /api/customer/nameDuplicate– Dublettenprüfung- Falls neu:
POST /api/customer/mit Adresse - Auftrag mit
customer.idanlegen
Szenario 2 – Adress-Matching
Wenn nur Adresse bekannt (B2C):
json
POST /api/customer/
{
"isAddressMatchingUsed": true,
"address": {
"name": "Max Mustermann",
"street1": "Hauptstraße 1",
"zipStreet": "10115",
"city": "Berlin",
"country": { "code": "DE" },
"email": "max@example.de"
}
}Backend sucht bestehenden Kunden oder legt neuen an.
Szenario 3 – CRM-Interessent wird Debitor
- Interessent in CRM gepflegt (CRM01)
GET /api/customer/convertProspectToCustomer/{id}- Debitor für SAL-Aufträge nutzbar
Szenario 4 – Zusätzliche Lieferadresse
json
POST /api/customer/saveAddress
{
"customer": { "id": 1000001 },
"addressline1": "Lager Tor 2",
"street1": "Industriepark 5",
"zipStreet": "90441",
"city": "Nürnberg",
"country": { "id": 1 },
"addressType": { "id": 2 }
}Auftrag mit abweichendem Empfänger:
json
{
"customer": { "id": 1000001 },
"receiver": { "id": 1000002 },
"customerAddress": { "id": 2000003 }
}Voraussetzungen
- Kontakttyp Debitor konfiguriert
- Nummernkreis Kundennummer
- Länder, Währungen, Zahlungsbedingungen in Stammdaten
- Optional: Preisliste (SAL09) vor Erstkauf
Auswirkungen im ERP
| Aktion | Auswirkung |
|---|---|
| Kunde anlegen | Debitor für SAL/PUR/FIN |
| Adresse ändern | Folgebelege nutzen Snapshot zum Belegzeitpunkt |
| USt-ID prüfen | EU-B2B-Steuerlogik in Belegen |
Sperre isLocked | Neue Aufträge blockiert |
| Preisliste am Kunden | Preisfindung in getSalesPrice |
Typische Fehlerquellen
| Fehler | Ursache | Lösung |
|---|---|---|
| Dublette Kunden | Kein Matching | nameDuplicate, customerNo aus Shop |
| Falsche USt | ustid ungültig | checkUstdId |
| Auftrag ohne Kunde | customer.id fehlt | Pflichtfeld setzen |
| Falsche Preise | Keine salesPriceListHead | SAL09 zuweisen |
| CRM-Kunde nicht buchbar | Noch Prospect | convertProspectToCustomer |
JSON-Beispiele
Kunde vollständig anlegen
json
POST /api/customer/
{
"name": "Beispiel AG",
"name2": "Einkauf",
"street": "Musterweg 10",
"zipcode": "80331",
"city": "München",
"country": { "code": "DE" },
"email": "einkauf@beispiel.de",
"phone": "+49 89 123456",
"ustid": "DE123456789",
"currency": { "id": 1 },
"language": { "id": 1 },
"paymcond": { "id": 100001 },
"salesPriceListHead": { "id": 200001 },
"vatKey": { "id": 1 }
}Kunde lesen
bash
curl -G "$BASE_URL/api/customer/1000001" \
-H "Authorization: Bearer $TOKEN"Adressen auflisten
bash
curl -G "$BASE_URL/api/customer/addresses/1000001" \
-H "Authorization: Bearer $TOKEN"