Skip to content

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? ​

AufgabeEmpfohlener Weg
BAS01-nahe Liste mit Metadaten ladenGET /api/checkTables/
Prüftabelleneintrag anlegen oder ändernPOST /api/checkTables/
Aktiv/Inaktiv umschaltenPOST /api/checkTables/setIsDisabled
Reihenfolge ändernPOST /api/checkTables/sortObjects
Mehrsprachige Namen pflegengetTranslationData + updateTranslations
Tabellenwerte aus Zeilen übernehmenaccuracyCheckOfColumns + listSave
Einen Wert kompakt per Code suchenGET /api/domains/{domain}
Treffer zählen oder komplex filternGeneric 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 ​

  1. Benötigte Prüftabellen und Abhängigkeiten bestimmen.
  2. Vorhandene Werte im Zielmandanten lesen.
  3. Fehlende Werte in Abhängigkeitsreihenfolge anlegen.
  4. Zurückgelieferte ID oder einen eindeutigen Suchschlüssel verwenden.
  5. 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.

SchreibweiseBeispielVerwendung
Vollqualifizierter Klassennamecom.reybex.domain.wws.UnitEmpfohlen für GET, Speichern und Löschen
Einfacher KlassennameUnitWird bei einigen Import- und Hilfsendpoints verwendet
Domain-NameunitWird 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 ​

FachwertdomainClassGeneric Domain
Einheitcom.reybex.domain.wws.Unitunit
Artikelgruppecom.reybex.domain.wws.MatGroupmatGroup
Artikelstatuscom.reybex.domain.wws.MatStatusmatStatus
Artikelartcom.reybex.domain.wws.MaterialTypematerialType
Markecom.reybex.domain.wws.Brandbrand
Steuerschlüsselcom.reybex.domain.wws.VatKeyvatKey
Lagercom.reybex.domain.wws.Warehousewarehouse
Lagerplatzcom.reybex.domain.wws.StockPlacestockPlace
Sprachecom.reybex.domain.wws.Languagelanguage
Währungcom.reybex.domain.pms.Currencycurrency
Zahlungsbedingungcom.reybex.domain.pms.Paymcondpaymcond
Zahlungsartcom.reybex.domain.pms.PaymentTypepaymentType
Versandartcom.reybex.domain.wws.Shippingshipping
Vertriebsbelegartcom.reybex.domain.wws.SalesDocTypesalesDocType
Einkaufsbelegartcom.reybex.domain.wws.PurDocTypepurDocType
Lagerbewegungsartcom.reybex.domain.wws.StockMoveTypestockMoveType

Endpoint-Übersicht ​

MethodePfadZweck
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/setIsDisabledEintrag aktivieren/deaktivieren
POST/api/checkTables/sortObjectssortOrder nach ID-Reihenfolge setzen
POST/api/checkTables/accuracyCheckOfColumnsSpaltennamen eines Tabellenimports prüfen
POST/api/checkTables/listSaveMehrere lokalisierte Tabellenzeilen speichern
GET/api/checkTables/getTranslationDataÜbersetzungszeilen laden/ergänzen
POST/api/checkTables/updateTranslationsÜbersetzungen speichern
GET/api/checkTables/exportHeadersAsCsvCSV-Inhalt samt lokalisierten Headern erzeugen
GET/api/checkTables/getProfitCenterPicturesBilder eines Profit Centers lesen
POST/api/checkTables/checkPriorityValuesPrioritä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:

  • id wird als String ausgegeben, damit lange IDs im Browser nicht gerundet werden.
  • Bei einem Feld name enthält die Antwort zusätzlich translatedName.
  • ToOne-Referenzen werden als Objekt und zusätzlich häufig als <feld>Name ausgegeben.
  • Collections wie translations oder andere hasMany-Felder werden in dieser Liste ausgelassen.
  • Feldrechte des angemeldeten Benutzers wirken auf die Abfrage und Metadaten.
  • meta.total ist 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:

  • name
  • code
  • title
  • firstname
  • stockplaceCode
  • zipCode
  • region
  • 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 ​

ParameterStandardBedeutung
page1Seite, beginnend bei 1
pageSize500Zeilen 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:

  1. domainClass
  2. 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-KlasseObjektschlüssel
Unitunit
MatGroupmatGroup
VatKeyvatKey
Warehousewarehouse
StockPlacestockPlace
SalesDocTypesalesDocType

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:

ZielSuchschlüssel
Lagercode, dann name
LagerplatzstockplaceCode, dann name; Lager immer mitgeben
ArtikelmatCode, dann sku
Kunde/LieferantcustomerNo

Gemeinsame wichtige Felder ​

FeldBedeutungEmpfehlung
idMandantenspezifische technische IDNur aus einer API-Antwort übernehmen
codeStabiler IntegrationsschlüsselKurz, eindeutig und nach Go-live nicht ändern
nameAnzeige und Basis der ÜbersetzungFachlich verständlich, kann übersetzt werden
isDisabledDatensatz deaktiviertFür Ausphasung statt DELETE verwenden
sortOrderReihenfolge in ListenBesser über sortObjects pflegen
typeNumerischer oder textlicher FachtypDomainabhängig; nicht mit is…-Flags verwechseln
parent…Hierarchische ÜberordnungParent zuerst anlegen
isCustomerSpecificKundenspezifischer DatensatzWird systemseitig gesteuert
uniqueNameTechnischer eindeutiger WertIn 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:

FeldWirkung
exchangeRatioFaktor zur übergeordneten Einheit; Standard 1
baseExchangeRatioFaktor zur Basiseinheit; Standard 1
parentUnitÜbergeordnete Einheit
einvoiceCodeE-Rechnungs-Code, z. B. UN/ECE-Code
isItem, isPack, isCarton, isPallet, isLayerLogistische Einordnung
isWeight, isTime, isDay, isHourFachliche Verwendung
toPrintEinheit 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:

FeldWirkung
parentMatGroupHierarchie; Parent zuerst anlegen
isNotProvisionableGruppe von Provisionsberechnung ausnehmen
isNotInMarginCalculationGruppe nicht in Margenberechnung verwenden
depositPricePfandbetrag 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
  }
}
FeldWirkung
useInSalesStatus im Vertrieb verwendbar
useInPurchaseStatus im Einkauf verwendbar
useInMrpStatus in MRP verwendbar
useInWarehouseStatus in Lagerprozessen verwendbar
isInactiveFachlich inaktiver Artikelstatus
isDisabledPrü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
  }
}
FeldWirkung
isPurchaseIm Einkauf verwendbar
isSalesIm Vertrieb verwendbar
isProductionFür Produktion relevant
isPurchaseSupplyBeschaffung per Einkauf
isStockedLagerführung als fachlicher Default
isToolWerkzeugtyp
numRangeNummernkreis 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
  }
}
FeldBedeutung
rateSteuersatz; beeinflusst Netto-/Bruttoberechnung
vatType0 Vorsteuer, 1 Umsatzsteuer, 2 EU Reverse Charge
datevPostKeyDATEV-Buchungsschlüssel
fiskalyTypeSteuerklassifikation für Kassenprozesse
isReducedErmäßigter Steuersatz
xInvoiceTypeZuordnung für E-Rechnung
salesVatAccount, purchaseVatAccountErlös-/Vorsteuerkonto
textBlockZugeordneter 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:

FeldWirkung
isStockkeepingLager führt Bestand
isStockplaceMustLagerplatz muss bei Buchungen angegeben werden
isDefaultStandardlager; pro Mandant nur eines
isAvailabilityCheckDisabledBestand dieses Lagers bei Verfügbarkeitsprüfung ignorieren
isActiveForAvailabilityCheckLager aktiv in Verfügbarkeitsprüfung
isExternalExternes Lager
isVirtualVirtuelles Lager
isConsignmentStockKonsignationsbestand
isProductionWarehouseProduktionslager
isFbaFBA-Lager
isTransitTransitlager
isNoMrpLager aus MRP ausschließen
incomingGoodsStockPlaceStandardplatz für Wareneingang
goodsIssueFactorFaktor für Warenausgang
isDefaultWarehouseForMobileMobiles 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
  }
}
FeldWirkung
stockplaceCodeEindeutig innerhalb eines Lagers
warehousePflichtbezug zum Lager
pickOrderReihenfolge zur Wegeoptimierung
isPickplaceFür Kommissionierung verwendbar
isStockkeepingLagerplatz führt Bestand
isDefaultStandardplatz des Lagers
isNegativeStockAllowedNegativbestand zulassen
isNegativeStockCheckedAgainstAvailPrüfung gegen verfügbaren Bestand
reservationCheckTypeArt der Reservierungsprüfung
ignorePickAvailabilityPick-Verfügbarkeit ignorieren
useForReturnDocumentFü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
  }
}
FeldBedeutung
moveTypeCodeFachlicher Code der Bewegungsart
statPostway0 Wareneingang, 1 Warenausgang, 2 nicht anzeigen
statFactor1 Zugang, -1 Abgang
fromStock, toStockQuell-/Zielbestandsart
priceEvaluationPreisbewertung durchführen
isShippingTypeVersandbewegung
isPickingPicking-Bewegung
doQualityControl0 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
  }
}
FeldBedeutung
nettoDaysZahlungsziel in Tagen
discountDays1 bis discountDays3Skontofristen
discountRate1 bis discountRate3Skontosätze
isPrintedZahlungsbedingung drucken
isImportDefaultStandard bei Importen
is360DayBasisZins-/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:

GruppeFelder
BelegrolleisOffer, isOrder, isDelnote, isInvoice, isCreditnote, isContract
UntertypofferType, orderType, delnoteType, invoiceType, creditnoteType, contractType
BestandcheckAvailableStock, stockMoveType, warehouse, multiplier
PlanungplanMrp, useInMrp
Druckreport, showPrintLogo, showPrintFooter, printSetProducts, printGtins
ValidierungdontAllowZeroPrice, checkVirtualMaterialType
E-RechnungdontSendEinvoice, 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: true oder 1 werden als wahr interpretiert.
  • ToOne-Referenzen werden nacheinander über sku, customerNo, name, übersetzten Namen, code, accountCode oder title gesucht.
  • 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:

  1. Werte im Quellmandanten mit fachlichem Schlüssel (code, type, name) exportieren.
  2. Abhängigkeiten bestimmen.
  3. Parent-Werte zuerst im Zielmandanten anlegen.
  4. Zielwerte erneut lesen und die neuen IDs ermitteln.
  5. Fachobjekte mit Suchschlüsseln oder Ziel-IDs übertragen.
Nicht tunStattdessen
ID aus Staging nach Produktion kopierenIm Ziel nach code/name auflösen
Kind vor Parent anlegenUnit/Gruppe/Lager zuerst
Aktive Standardwerte überschreibenVorhandenen Datensatz vergleichen
Referenzierten Wert löschenDeaktivieren
Lokalisierte Tabellenheader als dauerhaften Vertrag nutzenFeldnamen 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.

MethodePfadZweck
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/ossOSS-Zeilen, dateFrom
POST/api/vatKey/ossOSS 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/getTextBlockBaustein zum Vorgang
GET/api/textBlock/getTextBlockForEmailBausteine für E-Mail
POST/api/textBlock/getDescriptionBeschreibung
GET/api/finHead/finHeadModelModellwerte für FiBu-Kopf-Felder in dedizierten Listen

Häufige Fehler ​

BeobachtungUrsacheLösung
Domain nicht gefundendomainClass falsch geschrieben oder falsches PaketVollqualifizierten Namen von der Domain-Seite übernehmen
Leere ListeFalscher Mandant, Feldrechte oder Suchtext ohne TrefferOhne search testen; Anmeldung und Mandant prüfen
ID wirkt gerundetID als JavaScript-Zahl verarbeitetCheckTables-ID als String behandeln
depending.object.not.foundReferenz beim Tabellenimport nicht gefundenParent/Referenz zuerst anlegen; Name/Code prüfen
Lagerplatz-Code bereits vorhandenCode im selben Lager doppeltAnderen Code verwenden oder bestehenden Platz ändern
Standardlager bereits vergebenEin anderes Lager hat isDefault: trueVorheriges Standardlager umstellen
Mobiles Standardlager bereits vergebenisDefaultWarehouseForMobile schon gesetztNur ein mobiles Standardlager verwenden
Löschen scheitertWert wird referenziertDeaktivieren oder Referenzen fachlich auflösen
Sortierung ändert sich nichtDomain besitzt kein sortOrder oder IDs falschDomain-Felder prüfen; IDs aus aktuellem GET verwenden
Übersetzung landet in falscher SpracheArrays anders sortiert als GETIDs und Werte positionsgleich senden
Bulk-Header werden nicht erkanntHeader passen nicht zur BenutzerspracheErst accuracyCheckOfColumns aufrufen
Suche per eq(...) findet nichtsCheckTables-search kennt keine Operatoren/api/domains/{domain} verwenden
MaterialType wird per code nicht gefundenDomain besitzt kein code{ "name": "Handelsware" } verwenden
dateFrom.not.setOSS ohne dateFromBeginn im Kurzformat senden
no.data.to.exportIm Zeitraum liegen keine OSS-ZeilenZeitraum prüfen
fonNumber.not.setÖsterreich-Export ohne FON-Nummer am MandantenFON-Nummer hinterlegen
period.not.foundZum dateFrom gibt es keine PeriodePeriode anlegen
opSplits.proportions.total.errorAnteile der Zahlungsbedingung ergeben nicht 100Anteile 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; fails bedeutet Teilerfolg.
  • Fachliche Standardwerte nicht anhand des Namens erraten, sondern im Zielmandanten lesen.

Weiterführende Dokumentation ​

Nur für reybex-Partner. Nicht für Endkunden bestimmt.