Darstellung
Prüftabellen (CheckTables) – vollständige API-Referenz
Prüftabellen sind mandantenspezifische Wertelisten für Einheiten, Artikelgruppen, Steuerschlüssel, Lager, Zahlungsbedingungen, Belegarten und weitere fachliche Einstellungen. Integrationen sollten diese Werte zuerst lesen oder pflegen und anschließend über stabile Suchschlüssel referenzieren.
Basis ist https://core-backend.reybex.com/api (Staging: https://io-staging-partner.reybex.com/api). Authentifizierung wie im API:
bash
curl --header "authorization: Basic $TOKEN" \
"https://core-backend.reybex.com/api/checkTables/?domainClass=com.reybex.domain.wws.Unit"Fachlicher Überblick und vollständiges Verzeichnis: Prüftabellen (BAS01). Alle fachlichen Boolean- und Typ-Felder: Prüftabellen – Feldreferenz.
Grundlagen
Wann CheckTables und wann Generic Domain API?
| Aufgabe | Empfohlener Weg |
|---|---|
| BAS01-nahe Liste mit Metadaten laden | GET /api/checkTables/ |
| Prüftabelleneintrag anlegen oder ändern | POST /api/checkTables/ |
| Aktiv/Inaktiv umschalten | POST /api/checkTables/setIsDisabled |
| Reihenfolge ändern | POST /api/checkTables/sortObjects |
| Mehrsprachige Namen pflegen | getTranslationData + updateTranslations |
| Tabellenwerte aus Zeilen übernehmen | accuracyCheckOfColumns + listSave |
| Einen Wert kompakt per Code suchen | GET /api/domains/{domain} |
| Treffer zählen oder komplex filtern | Generic Domain API aus dem API |
Die CheckTables-API bildet Funktionen der Transaktion BAS01 ab. Die Generic Domain API ist oft einfacher, wenn eine Integration nur eine ID zu einem bekannten Code benötigt.
Fachlicher Ablauf
- Benötigte Prüftabellen und Abhängigkeiten bestimmen.
- Vorhandene Werte im Zielmandanten lesen.
- Fehlende Werte in Abhängigkeitsreihenfolge anlegen.
- Zurückgelieferte ID oder einen eindeutigen Suchschlüssel verwenden.
- Nicht mehr benötigte Werte deaktivieren, statt sie vorschnell zu löschen.
domainClass: wichtigste Steuerinformation
domainClass bestimmt, welche Prüftabelle gelesen oder geändert wird.
| Schreibweise | Beispiel | Verwendung |
|---|---|---|
| Vollqualifizierter Klassenname | com.reybex.domain.wws.Unit | Empfohlen für GET, Speichern und Löschen |
| Einfacher Klassenname | Unit | Wird bei einigen Import- und Hilfsendpoints verwendet |
| Domain-Name | unit | Wird von der Generic Domain API verwendet: /api/domains/unit |
Groß-/Kleinschreibung und Paket müssen stimmen. Die Schreibweise lässt sich über die jeweilige Domain-Seite ermitteln.
Häufig benötigte Domain-Klassen
| Fachwert | domainClass | Generic Domain |
|---|---|---|
| Einheit | com.reybex.domain.wws.Unit | unit |
| Artikelgruppe | com.reybex.domain.wws.MatGroup | matGroup |
| Artikelstatus | com.reybex.domain.wws.MatStatus | matStatus |
| Artikelart | com.reybex.domain.wws.MaterialType | materialType |
| Marke | com.reybex.domain.wws.Brand | brand |
| Steuerschlüssel | com.reybex.domain.wws.VatKey | vatKey |
| Lager | com.reybex.domain.wws.Warehouse | warehouse |
| Lagerplatz | com.reybex.domain.wws.StockPlace | stockPlace |
| Sprache | com.reybex.domain.wws.Language | language |
| Währung | com.reybex.domain.pms.Currency | currency |
| Zahlungsbedingung | com.reybex.domain.pms.Paymcond | paymcond |
| Zahlungsart | com.reybex.domain.pms.PaymentType | paymentType |
| Versandart | com.reybex.domain.wws.Shipping | shipping |
| Vertriebsbelegart | com.reybex.domain.wws.SalesDocType | salesDocType |
| Einkaufsbelegart | com.reybex.domain.wws.PurDocType | purDocType |
| Lagerbewegungsart | com.reybex.domain.wws.StockMoveType | stockMoveType |
Endpoint-Übersicht
| Methode | Pfad | Zweck |
|---|---|---|
| GET | /api/checkTables/?domainClass=… | Liste lesen |
| GET | /api/checkTables/{id}?domainClass=… | Endpoint akzeptiert eine ID; die CheckTables-Liste wird dennoch über domainClass aufgebaut |
| POST | /api/checkTables/ | Eintrag anlegen oder ändern |
| DELETE | /api/checkTables/ | Eintrag endgültig löschen |
| POST | /api/checkTables/setIsDisabled | Eintrag aktivieren/deaktivieren |
| POST | /api/checkTables/sortObjects | sortOrder nach ID-Reihenfolge setzen |
| POST | /api/checkTables/accuracyCheckOfColumns | Spaltennamen eines Tabellenimports prüfen |
| POST | /api/checkTables/listSave | Mehrere lokalisierte Tabellenzeilen speichern |
| GET | /api/checkTables/getTranslationData | Übersetzungszeilen laden/ergänzen |
| POST | /api/checkTables/updateTranslations | Übersetzungen speichern |
| GET | /api/checkTables/exportHeadersAsCsv | CSV-Inhalt samt lokalisierten Headern erzeugen |
| GET | /api/checkTables/getProfitCenterPictures | Bilder eines Profit Centers lesen |
| POST | /api/checkTables/checkPriorityValues | Priorität einer Versandart auf Eindeutigkeit prüfen |
Prüftabellen lesen
Liste einer Domain
bash
curl --get \
--header "authorization: Basic $TOKEN" \
--data-urlencode "domainClass=com.reybex.domain.wws.Unit" \
"https://core-backend.reybex.com/api/checkTables/"Response (gekürzt):
json
{
"data": [
{
"id": "47110001",
"code": "ST",
"name": "Stück",
"translatedName": "Stück",
"exchangeRatio": 1.0,
"isDisabled": false,
"sortOrder": 1
}
],
"meta": {
"total": 1
}
}Besonderheiten:
idwird als String ausgegeben, damit lange IDs im Browser nicht gerundet werden.- Bei einem Feld
nameenthält die Antwort zusätzlichtranslatedName. - ToOne-Referenzen werden als Objekt und zusätzlich häufig als
<feld>Nameausgegeben. - Collections wie
translationsoder anderehasMany-Felder werden in dieser Liste ausgelassen. - Feldrechte des angemeldeten Benutzers wirken auf die Abfrage und Metadaten.
meta.totalist die Anzahl der zurückgegebenen Zeilen der aktuellen Seite, nicht zwingend die Gesamtzahl aller Datensätze.
Suche
search ist eine einfache Teilstringsuche. Berücksichtigt werden vorhandene Felder aus:
namecodetitlefirstnamestockplaceCodezipCoderegion- bei Belegregeln zusätzlich Quell- und Zielbelegart
Bei StockPlace wird außerdem der Lagername einbezogen.
bash
curl --get \
--header "authorization: Basic $TOKEN" \
--data-urlencode "domainClass=com.reybex.domain.wws.Unit" \
--data-urlencode "search=Stück" \
--data-urlencode "page=1" \
--data-urlencode "pageSize=50" \
"https://core-backend.reybex.com/api/checkTables/"search unterstützt nicht die Operatoren eq(...), like(...) usw. Für feldgenaue Filter die Generic Domain API verwenden:
bash
curl --get \
--header "authorization: Basic $TOKEN" \
--data-urlencode "code=eq(ST)" \
--data-urlencode "take=1" \
"https://core-backend.reybex.com/api/domains/unit"Pagination und Sortierung
| Parameter | Standard | Bedeutung |
|---|---|---|
page | 1 | Seite, beginnend bei 1 |
pageSize | 500 | Zeilen pro Seite |
search | — | Teilstringsuche |
domainName | — | Zusätzlicher Filter, wenn die gewählte Domain ein Feld domainName besitzt |
Die technische Grundsortierung erfolgt nach id. Besitzt die Domain sortOrder, wird die geladene Seite anschließend danach sortiert. Für reproduzierbare Vollabzüge Seiten nacheinander abrufen.
Eintrag anlegen und ändern
Request-Aufbau
Der Body enthält:
domainClass- ein Objekt, dessen Schlüssel der einfache Klassenname mit kleinem Anfangsbuchstaben ist.
json
{
"domainClass": "com.reybex.domain.wws.Unit",
"unit": {
"name": "Stück",
"code": "ST",
"exchangeRatio": 1.0,
"isDisabled": false
}
}| Domain-Klasse | Objektschlüssel |
|---|---|
Unit | unit |
MatGroup | matGroup |
VatKey | vatKey |
Warehouse | warehouse |
StockPlace | stockPlace |
SalesDocType | salesDocType |
Bei einer Neuanlage fehlt id. Für eine Änderung enthält das innere Objekt die bekannte id aus einem vorherigen GET.
Response beim Speichern
Die Antwort ist UI-orientiert. Sie liefert nicht nur { "id": … }, sondern Feldnamen mit Domain-Präfix:
json
{
"unit_hid": 47110001,
"unit_name": "Stück",
"unit_code": "ST",
"unit_exchangeRatio": 1.0,
"unit_isDisabled": false
}Die neu erzeugte ID steht in <domain>_hid, zum Beispiel unit_hid, matGroup_hid oder warehouse_hid.
ToOne-Referenzen
Referenzen im inneren Objekt können mit bekannten IDs oder mit Suchschlüsseln gesendet werden. Für normale Integrationen Suchschlüssel bevorzugen:
json
{
"domainClass": "com.reybex.domain.wws.StockPlace",
"stockPlace": {
"stockplaceCode": "A-01-01",
"name": "Regal A-01-01",
"warehouse": { "code": "HAUPT" }
}
}Standard-Suchreihenfolge ist code, dann type, dann name. Besonderheiten:
| Ziel | Suchschlüssel |
|---|---|
| Lager | code, dann name |
| Lagerplatz | stockplaceCode, dann name; Lager immer mitgeben |
| Artikel | matCode, dann sku |
| Kunde/Lieferant | customerNo |
Gemeinsame wichtige Felder
| Feld | Bedeutung | Empfehlung |
|---|---|---|
id | Mandantenspezifische technische ID | Nur aus einer API-Antwort übernehmen |
code | Stabiler Integrationsschlüssel | Kurz, eindeutig und nach Go-live nicht ändern |
name | Anzeige und Basis der Übersetzung | Fachlich verständlich, kann übersetzt werden |
isDisabled | Datensatz deaktiviert | Für Ausphasung statt DELETE verwenden |
sortOrder | Reihenfolge in Listen | Besser über sortObjects pflegen |
type | Numerischer oder textlicher Fachtyp | Domainabhängig; nicht mit is…-Flags verwechseln |
parent… | Hierarchische Überordnung | Parent zuerst anlegen |
isCustomerSpecific | Kundenspezifischer Datensatz | Wird systemseitig gesteuert |
uniqueName | Technischer eindeutiger Wert | In normalen Requests nicht setzen |
code existiert nicht in jeder Prüftabelle. MaterialType besitzt beispielsweise name, aber kein code. In diesem Fall per name referenzieren.
Beispiele für Artikelstammdaten
Einheit anlegen
POST /api/checkTables/
json
{
"domainClass": "com.reybex.domain.wws.Unit",
"unit": {
"name": "Stück",
"code": "ST",
"einvoiceCode": "C62",
"exchangeRatio": 1.0,
"baseExchangeRatio": 1.0,
"isItem": true,
"isWeight": false,
"isTime": false,
"isDisabled": false
}
}Wichtige Felder:
| Feld | Wirkung |
|---|---|
exchangeRatio | Faktor zur übergeordneten Einheit; Standard 1 |
baseExchangeRatio | Faktor zur Basiseinheit; Standard 1 |
parentUnit | Übergeordnete Einheit |
einvoiceCode | E-Rechnungs-Code, z. B. UN/ECE-Code |
isItem, isPack, isCarton, isPallet, isLayer | Logistische Einordnung |
isWeight, isTime, isDay, isHour | Fachliche Verwendung |
toPrint | Einheit im Druck berücksichtigen |
Verpackungseinheit mit Parent
Die Einheit ST muss bereits vorhanden sein:
json
{
"domainClass": "com.reybex.domain.wws.Unit",
"unit": {
"name": "Karton",
"code": "KT",
"parentUnit": { "code": "ST" },
"exchangeRatio": 12,
"baseExchangeRatio": 12,
"isCarton": true,
"isDisabled": false
}
}Artikelgruppe anlegen
json
{
"domainClass": "com.reybex.domain.wws.MatGroup",
"matGroup": {
"name": "Handelsware",
"code": "HANDEL",
"isNotProvisionable": false,
"isNotInMarginCalculation": false,
"isDisabled": false
}
}Wichtige Felder:
| Feld | Wirkung |
|---|---|
parentMatGroup | Hierarchie; Parent zuerst anlegen |
isNotProvisionable | Gruppe von Provisionsberechnung ausnehmen |
isNotInMarginCalculation | Gruppe nicht in Margenberechnung verwenden |
depositPrice | Pfandbetrag auf Gruppenebene |
Untergruppe:
json
{
"domainClass": "com.reybex.domain.wws.MatGroup",
"matGroup": {
"name": "Lebensmittel",
"code": "LEBENSMITTEL",
"parentMatGroup": { "code": "HANDEL" },
"isDisabled": false
}
}Artikelstatus anlegen
json
{
"domainClass": "com.reybex.domain.wws.MatStatus",
"matStatus": {
"name": "Aktiv",
"code": "AKTIV",
"useInSales": true,
"useInPurchase": true,
"useInMrp": true,
"useInWarehouse": true,
"isInactive": false,
"isDisabled": false
}
}| Feld | Wirkung |
|---|---|
useInSales | Status im Vertrieb verwendbar |
useInPurchase | Status im Einkauf verwendbar |
useInMrp | Status in MRP verwendbar |
useInWarehouse | Status in Lagerprozessen verwendbar |
isInactive | Fachlich inaktiver Artikelstatus |
isDisabled | Prüftabellenwert selbst deaktiviert |
isInactive und isDisabled sind nicht dasselbe: Das erste Feld beschreibt den Artikelstatus, das zweite die Verwendbarkeit des Prüftabelleneintrags.
Artikelart anlegen
MaterialType besitzt keinen code; der Name ist der Suchschlüssel.
json
{
"domainClass": "com.reybex.domain.wws.MaterialType",
"materialType": {
"name": "Handelsware",
"isPurchase": true,
"isSales": true,
"isProduction": false,
"isPurchaseSupply": true,
"isStocked": true,
"isTool": false,
"isDisabled": false
}
}| Feld | Wirkung |
|---|---|
isPurchase | Im Einkauf verwendbar |
isSales | Im Vertrieb verwendbar |
isProduction | Für Produktion relevant |
isPurchaseSupply | Beschaffung per Einkauf |
isStocked | Lagerführung als fachlicher Default |
isTool | Werkzeugtyp |
numRange | Nummernkreis für automatische Artikelnummern |
Steuerschlüssel anlegen
json
{
"domainClass": "com.reybex.domain.wws.VatKey",
"vatKey": {
"name": "Umsatzsteuer 19 %",
"code": "19",
"rate": 19.00,
"vatType": 1,
"datevPostKey": "3",
"isReduced": false,
"isDisabled": false
}
}| Feld | Bedeutung |
|---|---|
rate | Steuersatz; beeinflusst Netto-/Bruttoberechnung |
vatType | 0 Vorsteuer, 1 Umsatzsteuer, 2 EU Reverse Charge |
datevPostKey | DATEV-Buchungsschlüssel |
fiskalyType | Steuerklassifikation für Kassenprozesse |
isReduced | Ermäßigter Steuersatz |
xInvoiceType | Zuordnung für E-Rechnung |
salesVatAccount, purchaseVatAccount | Erlös-/Vorsteuerkonto |
textBlock | Zugeordneter Textbaustein |
Marke anlegen
json
{
"domainClass": "com.reybex.domain.wws.Brand",
"brand": {
"name": "Eigenmarke",
"code": "EIGEN",
"manufacturer": "Beispiel GmbH",
"toPrint": true,
"isDisabled": false
}
}numberRanges kann die automatische Artikelnummer steuern. Ohne zugeordneten Nummernkreis wird beim Artikelanlegen gegebenenfalls der Nummernkreis der Artikelart verwendet.
Beispiele für Lager und Bestand
Lager anlegen
json
{
"domainClass": "com.reybex.domain.wws.Warehouse",
"warehouse": {
"name": "Hauptlager",
"code": "HAUPT",
"isStockkeeping": true,
"isStockplaceMust": true,
"isDefault": true,
"isExternal": false,
"isVirtual": false,
"isAvailabilityCheckDisabled": false,
"isNoMrp": false,
"isDisabled": false
}
}Beim Anlegen eines Lagers wird automatisch ein Standard-Lagerplatz mit Code und Name * erzeugt.
Wichtige Felder:
| Feld | Wirkung |
|---|---|
isStockkeeping | Lager führt Bestand |
isStockplaceMust | Lagerplatz muss bei Buchungen angegeben werden |
isDefault | Standardlager; pro Mandant nur eines |
isAvailabilityCheckDisabled | Bestand dieses Lagers bei Verfügbarkeitsprüfung ignorieren |
isActiveForAvailabilityCheck | Lager aktiv in Verfügbarkeitsprüfung |
isExternal | Externes Lager |
isVirtual | Virtuelles Lager |
isConsignmentStock | Konsignationsbestand |
isProductionWarehouse | Produktionslager |
isFba | FBA-Lager |
isTransit | Transitlager |
isNoMrp | Lager aus MRP ausschließen |
incomingGoodsStockPlace | Standardplatz für Wareneingang |
goodsIssueFactor | Faktor für Warenausgang |
isDefaultWarehouseForMobile | Mobiles Standardlager; pro Mandant nur eines |
Lagerplatz anlegen
Das Lager wird über seinen Code aufgelöst:
json
{
"domainClass": "com.reybex.domain.wws.StockPlace",
"stockPlace": {
"stockplaceCode": "A-01-01",
"name": "Regal A-01-01",
"warehouse": { "code": "HAUPT" },
"pickOrder": 10,
"isPickplace": true,
"isStockkeeping": true,
"isDefault": false,
"isNegativeStockAllowed": false,
"reservationCheckType": 0,
"isDisabled": false
}
}| Feld | Wirkung |
|---|---|
stockplaceCode | Eindeutig innerhalb eines Lagers |
warehouse | Pflichtbezug zum Lager |
pickOrder | Reihenfolge zur Wegeoptimierung |
isPickplace | Für Kommissionierung verwendbar |
isStockkeeping | Lagerplatz führt Bestand |
isDefault | Standardplatz des Lagers |
isNegativeStockAllowed | Negativbestand zulassen |
isNegativeStockCheckedAgainstAvail | Prüfung gegen verfügbaren Bestand |
reservationCheckType | Art der Reservierungsprüfung |
ignorePickAvailability | Pick-Verfügbarkeit ignorieren |
useForReturnDocument | Für Retourenbelege verwenden |
Ein stockplaceCode darf im selben Lager nicht doppelt vorkommen. Derselbe Code kann in unterschiedlichen Lagern vorkommen.
Lagerbewegungsart anlegen
json
{
"domainClass": "com.reybex.domain.wws.StockMoveType",
"stockMoveType": {
"name": "Wareneingang",
"moveTypeCode": "110",
"type": 0,
"statPostway": 0,
"statFactor": 1,
"isNegativeStock": false,
"priceEvaluation": true,
"isPicking": false,
"updateStatistics": true,
"doQualityControl": 0,
"isDisabled": false
}
}| Feld | Bedeutung |
|---|---|
moveTypeCode | Fachlicher Code der Bewegungsart |
statPostway | 0 Wareneingang, 1 Warenausgang, 2 nicht anzeigen |
statFactor | 1 Zugang, -1 Abgang |
fromStock, toStock | Quell-/Zielbestandsart |
priceEvaluation | Preisbewertung durchführen |
isShippingType | Versandbewegung |
isPicking | Picking-Bewegung |
doQualityControl | 0 keine Prüfung, 1 Prüfplan erzeugen, 2 erzeugen und öffnen |
Beispiele für Vertrieb und Einkauf
Belegarten und Zahlungskonditionen aus diesem Abschnitt verwenden Auftragsverwaltung und Einkauf-Verwaltung. Kunden und Lieferanten stehen unter Kunden- und Lieferantenverwaltung.
Währung anlegen
json
{
"domainClass": "com.reybex.domain.pms.Currency",
"currency": {
"name": "Euro",
"code": "EUR",
"isoCode": "EUR",
"symbol": "€",
"format": "#,##0.00",
"isRounded": false,
"roundingType": 2,
"isBaseForExchange": true,
"disableExchangeRateUpdate": false,
"isDisabled": false
}
}roundingType: 0 abrunden, 1 aufrunden, 2 kaufmännisch runden.
Sprache anlegen
json
{
"domainClass": "com.reybex.domain.wws.Language",
"language": {
"name": "Deutsch",
"code": "de"
}
}Sprachcodes konsistent kleingeschrieben pflegen, zum Beispiel de, en, fr.
Zahlungsbedingung anlegen
json
{
"domainClass": "com.reybex.domain.pms.Paymcond",
"paymcond": {
"name": "14 Tage netto, 2 % in 7 Tagen",
"code": "14N7S2",
"nettoDays": 14,
"discountDays1": 7,
"discountRate1": 2.00,
"discountDays2": 0,
"discountRate2": 0.00,
"isPrinted": true,
"isImportDefault": false,
"is360DayBasis": false,
"isDisabled": false
}
}| Feld | Bedeutung |
|---|---|
nettoDays | Zahlungsziel in Tagen |
discountDays1 bis discountDays3 | Skontofristen |
discountRate1 bis discountRate3 | Skontosätze |
isPrinted | Zahlungsbedingung drucken |
isImportDefault | Standard bei Importen |
is360DayBasis | Zins-/Fristberechnung auf 360-Tage-Basis |
Versandart anlegen
json
{
"domainClass": "com.reybex.domain.wws.Shipping",
"shipping": {
"name": "Standardversand",
"type": 0,
"freightCost": 5.90,
"cost": 4.00,
"isActive": true,
"isPrinted": true,
"isNoCalculateProfit": false,
"priority": 10,
"isDisabled": false
}
}type: 0 Straße, 1 Luft, 2 See. Eine gesetzte priority muss innerhalb der Versandarten eindeutig sein; vor dem Speichern kann sie mit checkPriorityValues geprüft werden.
Zahlungsart anlegen
json
{
"domainClass": "com.reybex.domain.pms.PaymentType",
"paymentType": {
"name": "Vorkasse",
"code": "VK",
"isPrinted": true,
"blockedDelivery": true,
"blockDeliveryIfNoTransaction": true,
"isCashRegister": false,
"isCash": false,
"createFinOpenItem": true,
"isDirectDebit": false,
"isDisabled": false
}
}Besonders kritisch sind blockedDelivery, blockDeliveryIfNoTransaction, bookDirectlyPayment, createFinOpenItem, isCashRegister und isDirectDebit, weil sie Beleg-, Liefer- und Finanzprozesse verändern.
Vertriebsbelegart anlegen
Beispiel für einen einfachen Auftragstyp:
json
{
"domainClass": "com.reybex.domain.wws.SalesDocType",
"salesDocType": {
"name": "Auftrag",
"type": "AB",
"isOrder": true,
"orderType": 0,
"isOffer": false,
"isDelnote": false,
"isInvoice": false,
"isCreditnote": false,
"multiplier": 1,
"checkAvailableStock": true,
"dontAllowZeroPrice": false,
"planMrp": true,
"useInMrp": true,
"printSetProducts": true,
"printGtins": true,
"isDisabled": false
}
}Wichtige Gruppen:
| Gruppe | Felder |
|---|---|
| Belegrolle | isOffer, isOrder, isDelnote, isInvoice, isCreditnote, isContract |
| Untertyp | offerType, orderType, delnoteType, invoiceType, creditnoteType, contractType |
| Bestand | checkAvailableStock, stockMoveType, warehouse, multiplier |
| Planung | planMrp, useInMrp |
| Druck | report, showPrintLogo, showPrintFooter, printSetProducts, printGtins |
| Validierung | dontAllowZeroPrice, checkVirtualMaterialType |
| E-Rechnung | dontSendEinvoice, xInvoiceType |
Belegarten haben viele Prozessfolgen. Bestehende Mandantenkonfiguration zuerst lesen und nur gezielt ändern.
Einkaufsbelegart anlegen
json
{
"domainClass": "com.reybex.domain.wws.PurDocType",
"purDocType": {
"name": "Bestellung",
"type": 2,
"lowerDeliveryTolerance": 10.0,
"upperDeliveryTolerance": 10.0,
"useInMrp": true,
"automaticOrderSendMail": false,
"isPurOrderClosedAfterFirstInbound": false,
"printDeliveryDate": true,
"isDisabled": false
}
}type: 0 Anfrage, 1 Rahmen-/Mengenkontrakt, 2 Bestellung, 3 Abruf. Die Toleranzfelder sind Prozentwerte.
Eintrag ändern
Zuerst nach Code suchen und die ID übernehmen:
bash
curl --get \
--header "authorization: Basic $TOKEN" \
--data-urlencode "code=eq(ST)" \
--data-urlencode "take=1" \
"https://core-backend.reybex.com/api/domains/unit"Anschließend POST /api/checkTables/ mit der bekannten ID:
json
{
"domainClass": "com.reybex.domain.wws.Unit",
"unit": {
"id": 47110001,
"name": "Stück",
"code": "ST",
"einvoiceCode": "C62",
"isItem": true
}
}Nur eine ID aus dem aktuellen Zielmandanten verwenden. IDs zwischen Test, Staging und Produktion sind nicht übertragbar.
Aktivieren und deaktivieren
POST /api/checkTables/setIsDisabled
json
{
"domainClass": "com.reybex.domain.wws.Unit",
"id": 47110001,
"isDisabled": true
}Response:
json
{ "success": true }Deaktivierte Werte:
- bleiben an bestehenden Artikeln und Belegen referenziert,
- werden in vielen Auswahllisten und Suchschlüsselauflösungen nicht mehr angeboten,
- können neue Integrationsrequests mit diesem Code scheitern lassen.
Vor dem Deaktivieren prüfen, ob externe Systeme den Code weiterhin senden.
Reihenfolge ändern
POST /api/checkTables/sortObjects
itemOrder enthält die IDs in der gewünschten Reihenfolge. Der erste Eintrag erhält sortOrder: 1.
json
{
"domainClass": "com.reybex.domain.wws.Unit",
"itemOrder": [47110001, 47110002, 47110003]
}Response:
json
{ "success": true }Nur Domains mit sortOrder verwenden. Alle IDs müssen zur angegebenen Domain und zum aktuellen Mandanten gehören.
Übersetzungen
Übersetzungen laden
GET /api/checkTables/getTranslationData
bash
curl --get \
--header "authorization: Basic $TOKEN" \
--data-urlencode "classOfObjectToTranslate=com.reybex.domain.wws.Unit" \
--data-urlencode "idOfObjectToTranslate=47110001" \
"https://core-backend.reybex.com/api/checkTables/getTranslationData"Fehlende Übersetzungszeilen für aktive Mandantensprachen werden beim Laden ergänzt.
Response:
json
{
"translationObjects": [
{ "id": "48110001", "language": "de", "name": "Stück" },
{ "id": "48110002", "language": "en", "name": null }
],
"classOfObjectToTranslate": "com.reybex.domain.wws.Unit"
}Übersetzungen speichern
IDs und Reihenfolge aus dem vorherigen GET übernehmen:
json
{
"domainClassName": "com.reybex.domain.wws.Unit",
"translationIds": [48110001, 48110002],
"propertyName": "name",
"propertyValues": ["Stück", "Piece"]
}POST /api/checkTables/updateTranslations
Response:
json
{ "success": true }translationIds[n] gehört zu propertyValues[n]. Reihenfolge nicht verändern und keine Übersetzungs-IDs aus einem anderen Mandanten verwenden.
Tabellenimport
Der Tabellenimport arbeitet mit den lokalisierten Spaltenbezeichnungen der Sprache des angemeldeten Benutzers, nicht mit stabilen API-Feldnamen. Für automatisierte Integrationen sind einzelne CheckTables-Requests oder die Generic Domain API robuster.
Spalten vorab prüfen
POST /api/checkTables/accuracyCheckOfColumns
json
{
"className": "Unit",
"columns": ["Einheit", "ME", "Kurs"]
}Response:
json
{
"checkList": [
{ "Einheit": true },
{ "ME": true },
{ "Kurs": true }
],
"missingRequiredFields": []
}Unbekannte Überschriften erhalten false. missingRequiredFields listet nicht enthaltene Pflichtfelder in der Sprache des Benutzers.
Mehrere Zeilen speichern
POST /api/checkTables/listSave
json
{
"className": "Unit",
"list": [
{
"Einheit": "Stück",
"ME": "ST",
"Kurs": 1
},
{
"Einheit": "Karton",
"ME": "KT",
"Kurs": 12
}
]
}Erfolg:
json
{ "success": true }Teilweise fehlgeschlagen:
json
{ "fails": [1] }Die Indizes in fails sind nullbasiert; 1 bezeichnet die zweite Zeile.
Weitere Regeln:
- Vorhandene Datensätze werden zunächst über lokalisierten Namen und/oder Code gesucht.
- Boolean-Werte:
trueoder1werden als wahr interpretiert. - ToOne-Referenzen werden nacheinander über
sku,customerNo,name, übersetzten Namen,code,accountCodeodertitlegesucht. - Mehrfachreferenzen werden als Text mit
|getrennt. - Nicht gefundene Referenzen führen zu
depending.object.not.found.
CSV-Inhalt exportieren
bash
curl --get \
--header "authorization: Basic $TOKEN" \
--data-urlencode "className=Unit" \
"https://core-backend.reybex.com/api/checkTables/exportHeadersAsCsv"Response:
json
{
"fileName": "Unit_csv_template",
"content": [69, 105, 110, 104, 101, 105, 116, 59]
}content ist ein Byte-Array, keine direkte Dateiantwort. Die Bytes in ISO-8859-9 dekodieren. Das Trennzeichen stammt aus der Mandantenkonfiguration, häufig ;.
Löschen
DELETE /api/checkTables/
json
{
"domainClass": "com.reybex.domain.wws.Unit",
"id": 47110001
}Erfolg:
json
{ "success": "success" }Das Löschen ist physisch. Fremdschlüssel und fachliche Prüfungen können es verhindern, zum Beispiel:
- Artikelstatus wird von einem Artikel verwendet.
- Zahlungsbedingung wird von einem nicht gelöschten Vertriebsbeleg verwendet.
- Versandart wird von einem Vertriebsbeleg verwendet.
- Carrier wird von Versandprodukten oder Versandarten verwendet.
- Ein beliebiger anderer Datensatz verweist auf den Wert.
Bei referenzierten Werten grundsätzlich deaktivieren statt löschen. Das Löschen eines Lagers betrifft außerdem zugehörige Lagerplatzdaten und ist für laufende Mandanten besonders riskant.
Spezielle Hilfsendpoints
Versandpriorität prüfen
POST /api/checkTables/checkPriorityValues
json
{
"id": 47120001,
"priority": 10
}Response bei eindeutiger Priorität:
json
{ "success": true }Bei einer bereits verwendeten Priorität kommt die fachliche Meldung shipping.priority.not.unique.
Profit-Center-Bilder lesen
bash
curl --get \
--header "authorization: Basic $TOKEN" \
--data-urlencode "profitCenterId=47130001" \
"https://core-backend.reybex.com/api/checkTables/getProfitCenterPictures"Ohne profitCenterId antwortet die API mit „Ressource nicht gefunden“.
Komplettes Onboarding für die Artikelanlage
Benötigte Werte lesen
bash
curl --get --header "authorization: Basic $TOKEN" \
--data-urlencode "domainClass=com.reybex.domain.wws.Unit" \
--data-urlencode "search=ST" \
"$API_BASE/checkTables/"
curl --get --header "authorization: Basic $TOKEN" \
--data-urlencode "domainClass=com.reybex.domain.wws.MatGroup" \
--data-urlencode "search=HANDEL" \
"$API_BASE/checkTables/"
curl --get --header "authorization: Basic $TOKEN" \
--data-urlencode "domainClass=com.reybex.domain.wws.MatStatus" \
--data-urlencode "search=AKTIV" \
"$API_BASE/checkTables/"
curl --get --header "authorization: Basic $TOKEN" \
--data-urlencode "domainClass=com.reybex.domain.wws.VatKey" \
--data-urlencode "search=19" \
"$API_BASE/checkTables/"Artikel mit Suchschlüsseln anlegen
Nach erfolgreicher Prüfung werden keine mandantenfremden IDs benötigt:
json
{
"matCode": "ART-1000",
"sku": "ART-1000",
"name": "Baumwoll-Tasche natur",
"salesPrice": 12.90,
"priceUnit": 1,
"isStocked": true,
"matGroup": { "code": "HANDEL" },
"matStatus": { "code": "AKTIV" },
"materialType": { "name": "Handelsware" },
"vatKey": { "code": "19" },
"warehouseUnit": { "code": "ST" },
"salUnit": { "code": "ST" },
"purUnit": { "code": "ST" }
}POST /api/material/ – weitere Artikeltypen und Folge-Requests: Artikelstamm-Verwaltung.
Migration zwischen Mandanten
Prüftabellen-IDs sind mandantenspezifisch. Für eine Migration:
- Werte im Quellmandanten mit fachlichem Schlüssel (
code,type,name) exportieren. - Abhängigkeiten bestimmen.
- Parent-Werte zuerst im Zielmandanten anlegen.
- Zielwerte erneut lesen und die neuen IDs ermitteln.
- Fachobjekte mit Suchschlüsseln oder Ziel-IDs übertragen.
| Nicht tun | Stattdessen |
|---|---|
| ID aus Staging nach Produktion kopieren | Im Ziel nach code/name auflösen |
| Kind vor Parent anlegen | Unit/Gruppe/Lager zuerst |
| Aktive Standardwerte überschreiben | Vorhandenen Datensatz vergleichen |
| Referenzierten Wert löschen | Deaktivieren |
| Lokalisierte Tabellenheader als dauerhaften Vertrag nutzen | Feldnamen oder Einzelrequests verwenden |
Fach-API neben den Prüftabellen
Dieselben Stammdaten haben eigene Controller. Anlegen und Ändern von Steuer und Rabattart bleibt bei Prüftabellen: POST /api/vatKey/ und POST /api/discountType/ speichern nicht, die Liste ohne Id ebenfalls nicht. GET /api/vatKey/{id} und GET /api/discountType/{id} lesen einen Satz. Unbekannte Id: HTTP 404.
OSS-Auswertung: GET /api/vatKey/oss und POST /api/vatKey/oss. dateFrom ist Pflicht, sonst dateFrom.not.set. dateTo begrenzt das Ende, ohne Angabe gilt der heutige Tag. Beide Werte im Kurzformat der Mandanten-Oberfläche. Der Export ist POST. Keine Zeilen: no.data.to.export. Für Österreich ohne FON-Nummer: fonNumber.not.set. Ohne passende Periode: period.not.found.
Einheit: GET /api/unit/{id} und POST /api/unit/. Der Körper ist der Datensatz.
Zahlungsbedingung: GET /api/paymcond/{id} und POST /api/paymcond/. Der Körper ist der Datensatz oder liegt unter paymcond. opSplits müssen in der Summe 100 ergeben, sonst opSplits.proportions.total.error.
Textbaustein: GET /api/textBlock/{id}, POST /api/textBlock/, DELETE /api/textBlock/. Mit isNew=1 liefert das Lesen eine leere Vorlage samt Sprachen. GET /api/textBlock/getTextBlock, GET /api/textBlock/getTextBlockForEmail, POST /api/textBlock/getDescription.
| Methode | Pfad | Zweck |
|---|---|---|
GET | /api/vatKey/{id} | Einen USt-Schlüssel |
POST | /api/vatKey/ | Speichert nicht. Anlegen über die Prüftabelle |
DELETE | /api/vatKey/ | Löscht nicht |
GET | /api/vatKey/oss | OSS-Zeilen, dateFrom |
POST | /api/vatKey/oss | OSS exportieren |
GET | /api/discountType/{id} | Eine Rabattart |
POST | /api/discountType/ | Speichert nicht. Anlegen über die Prüftabelle |
DELETE | /api/discountType/ | Löscht nicht |
GET | /api/unit/{id} | Eine Einheit oder die Liste |
POST | /api/unit/ | Einheit speichern |
GET | /api/paymcond/{id} | Eine Zahlungsbedingung oder die Liste |
POST | /api/paymcond/ | Zahlungsbedingung speichern |
GET | /api/textBlock/{id} | Ein Textbaustein oder die Liste |
POST | /api/textBlock/ | Textbaustein speichern |
DELETE | /api/textBlock/ | Textbaustein löschen |
GET | /api/textBlock/getTextBlock | Baustein zum Vorgang |
GET | /api/textBlock/getTextBlockForEmail | Bausteine für E-Mail |
POST | /api/textBlock/getDescription | Beschreibung |
GET | /api/finHead/finHeadModel | Modellwerte für FiBu-Kopf-Felder in dedizierten Listen |
Häufige Fehler
| Beobachtung | Ursache | Lösung |
|---|---|---|
| Domain nicht gefunden | domainClass falsch geschrieben oder falsches Paket | Vollqualifizierten Namen von der Domain-Seite übernehmen |
| Leere Liste | Falscher Mandant, Feldrechte oder Suchtext ohne Treffer | Ohne search testen; Anmeldung und Mandant prüfen |
| ID wirkt gerundet | ID als JavaScript-Zahl verarbeitet | CheckTables-ID als String behandeln |
depending.object.not.found | Referenz beim Tabellenimport nicht gefunden | Parent/Referenz zuerst anlegen; Name/Code prüfen |
| Lagerplatz-Code bereits vorhanden | Code im selben Lager doppelt | Anderen Code verwenden oder bestehenden Platz ändern |
| Standardlager bereits vergeben | Ein anderes Lager hat isDefault: true | Vorheriges Standardlager umstellen |
| Mobiles Standardlager bereits vergeben | isDefaultWarehouseForMobile schon gesetzt | Nur ein mobiles Standardlager verwenden |
| Löschen scheitert | Wert wird referenziert | Deaktivieren oder Referenzen fachlich auflösen |
| Sortierung ändert sich nicht | Domain besitzt kein sortOrder oder IDs falsch | Domain-Felder prüfen; IDs aus aktuellem GET verwenden |
| Übersetzung landet in falscher Sprache | Arrays anders sortiert als GET | IDs und Werte positionsgleich senden |
| Bulk-Header werden nicht erkannt | Header passen nicht zur Benutzersprache | Erst accuracyCheckOfColumns aufrufen |
Suche per eq(...) findet nichts | CheckTables-search kennt keine Operatoren | /api/domains/{domain} verwenden |
MaterialType wird per code nicht gefunden | Domain besitzt kein code | { "name": "Handelsware" } verwenden |
dateFrom.not.set | OSS ohne dateFrom | Beginn im Kurzformat senden |
no.data.to.export | Im Zeitraum liegen keine OSS-Zeilen | Zeitraum prüfen |
fonNumber.not.set | Österreich-Export ohne FON-Nummer am Mandanten | FON-Nummer hinterlegen |
period.not.found | Zum dateFrom gibt es keine Periode | Periode anlegen |
opSplits.proportions.total.error | Anteile der Zahlungsbedingung ergeben nicht 100 | Anteile auf 100 setzen |
Sicherheits- und Betriebsregeln
- Nur notwendige Prüftabellen für Integrationsbenutzer freigeben.
- Änderungen zuerst in Staging testen; Belegarten, Steuer, Lager und Bewegungsarten steuern Kernprozesse.
- Codes nach Produktivsetzung als stabilen Vertrag behandeln.
- Vor Massenänderungen Werte und Abhängigkeiten sichern.
- Bulk-Import zeilenweise auswerten;
failsbedeutet Teilerfolg. - Fachliche Standardwerte nicht anhand des Namens erraten, sondern im Zielmandanten lesen.