Schnittstellenbeschreibung
Einführung
Die Schnittstelle zwischen profacto und CAD ist eine offene Schnittstelle. Das bedeutet, dass grundsätzlich auch andere CAD-Systeme auf diese Weise mit profacto angebunden werden können oder andere ERP-Systeme auf diese Weise mit einem CAD kommunizieren können. In erster Linie geht es darum, dem Anwender eine optimale Bedienung von CAD und ERP zu ermöglichen, bei der beide Systeme transparent in Ihren Arbeitsprozess eingebunden werden.
Wir beschreiben hier die Datenstrukturen, die zum Datenaustausch zwischen CAD und ERP nötig sind und erläutern des Weiteren, wie eine Anbindung so umgesetzt werden muss, dass die Daten ohne viel Zutun des Anwenders ausgetauscht werden.
Der Datenaustausch erfolgt pro Anwenderarbeitsplatz über eine sqlite3-Datenbank. Es ist nicht möglich, gleichzeitig vom ERP und CAD aus in diese Austauschdatei zu schreiben, weshalb unter allen Umständen verhindert werden muss, dass die Austauschdatenbank im Netz abgelegt und von mehreren Nutzern gleichzeitig verwendet wird.
Es können Projekt- bzw. Stammdaten (Platten, Kanten, Beläge, Beschichtungen, Beschläge) vom ERP an das CAD und Stücklisten (Möbel, Bauteile, Arbeitsplatten und Rahmen) vom CAD an das ERP übergeben werden.
Der Stammdatenexport aus dem ERP wird sinnvollerweise über einen Menübefehl angestoßen, um Daten zu definierten Zeitpunkten zu übergeben. Das CAD verleibt sich die Ausgabe automatisch ein. Der Anwender muss also in interiorcad nichts weiter tun.
Die Projektdaten von profacto lassen sich über die Projektdetails von interiorcad auswählen bzw. ganz allgemein in einem Projektbrowser des CAD. profacto gibt aktuell Projekte und Positionen aus.
Die Ausgabe von Stücklisteninformationen an das ERP erfolgt stets automatisch. Das ERP prüft in regelmässigen Intervallen, ob Daten vorliegen. Voraussetzung ist dass die Objekte (Möbel, Platten, Rahmen, Bauteile) im CAD einer Projektposition zugeordnet wurden - ansonsten kommen keine Stücklisteninformationen im ERP an. Aktuell werden Stücklistenteile und Beschichtungen sowie Objekte übergeben.
Information über Aktualisierungen der Austauschdatenbank erfolgt über die Tabelle Messages.
Version
Dies ist die Version 2.1 der ERP-CAD-Schnittstelle. Während wir uns nach Kräften bemühen, das Datenformat abwärtskompatibel zu halten, es kann in zukünftigen Versionen zu strukturellen Änderungen kommen, die wir hier dokumentieren.
Version 1.0 war eine rein intern genutzte Fassung der Schnittstelle. Die aktuelle Version ist aktuell im Einsatz für profacto 2013 oder neuer bzw. interiorcad 2013 oder neuer. Bitte installieren Sie jeweils die aktuellste Version.
Feldtypen
Real: klassische Fließkommazahl (sqlite3: float)
Longint: 64bit Integer (sqlite3: integer)
Integer: 32bit Integer.(sqlite3: integer)
AlphaN: Feld mit fester Maximallänge (sqlite3: varchar(N) )
Text: Feld mit variabler Länge, max. 32000 Zeichen (sqlite3: varchar(32000) ; Vorsicht: sqlite3 kann zwar auch text, aber profacto kann es nicht über ODBC ansprechen.)
Boolean: Wahrheitswert, True (1) oder False (0) (sqlite3: bit)
Datum: Datumsformat (sqlite3: timestamp)
UUID: als Text(32), im Format mit geschweifter Klammer, nicht im kompakten Binärformat. (sqlite3: varchar(32) )
Tabellen
Projektdaten
Projekte (Table "Projects")
projectno - Projektnr.: Alpha12 - Projekt-Nr
projectname - Kommission: Text - Kommission
description - Bauvorhaben: Text - Bauvorhaben
deliverydate - Fixtermin: Datum - Fixtermin
deliveryweek - Lieferwoche: Integer - Liefer-Kalenderwoche
deliveryyear - Lieferwochenjahr: Integer - Liefer-Jahr
customerno - Kundennr: Alpha12 - Kundennummer
name1 - Name1: Alpha60 - Anrede - Firmenname 1
name2 - Name2: Alpha60 - Nachname - Firmenname 2 (kann in ic konkateniert werden)
street - Strasse: Alpha60 - Strasse
postalcode - PLZ: Alpha10 - PLZ
city - Ort: Alpha60 - Ort
countrycode - Land: Alpha10 - Leer
projectfolderpath - Projektordner: Text (Verknüpfen mit [Alias]TypNr=[Auftrag]AuftragsNr & [Alias]Bemerkung="Projektordner") - Leer
CAD, NC etc. Dateien sollten im Projektordner abgelegt werden
manager - Alpha64 - in interiorcad "Sachbearbeiter", in profacto "Vertreter" - - Anwendungsempfehlung: Personalkürzel bzw. Personalnummer
salutation - Alpha64 - Anrede Ansprechpartner
firstname - Alpha64 - Vorname Ansprechpartner
lastname - Alpha64 - Nachname Ansprechpartner
projectstate- Projektstatus (übersetzt) - Alpha64
engineername - Arbeitsvorbereiter Klartext - Alpha64
managername - Vertreter Klartext (derzeit nur Personalnr) - Alpha64
procstate - Prozessstatus - suchbarer Text - Alpha (deprecated, ergibt keinen Sinn das zu pflegen)
ProcstateID - Prozessstatus - Integer (ab major = 2018)
ProjectstateID - Projektstatus - Integer (ab major = 2018)
creationdate - Datum - Erstellungsdatum des Projekts (ab major = 2018)
creationyear - Integer - Jahr der Erstellung des Projekt (ab major = 2018)
Prozessstatus (Table „Processstates“) (ab major = 2018)
pstatid - Integer - Nummer des Prozessstatus wie in projects übergeben
pstatdescription - Alpha64 - Beschreibung des Prozessstatus
Projektpositionen (Table "Projectpositions")
projectno - Projektnr.: Alpha12 - Projekt-Nr
positionno - Positionsnr.: Real - Positions-Nr
quantity - Anzahl: Real - Anzahl
itemno - Artikelnr: Alpha20 - Leer
description - Bezeichnung: Text - Bezeichnung
itemgroup Artikelgruppe: Alpha20 - Leer
length - Länge: Real - Leer
width - Breite: Real - Leer
thickness - Dicke: Real - Leer
purchasepriceunit - EK Einzel: Real - Leer
calcpriceunit - Selbstkosten Einzel: Real - Leer
salespriceunit - Verkaufspreis Einzel: Real - Leer
purchasepricetotal - EK Gesamt: Real - *Leer
calcpricetotal - Selbstkosten Gesamt: Real - Leer
salespricetotal - Verkaufspreis Gesamt: Real - Leer
posUUID - Alpha32 - UUID der Position für bessere Synchronisation zwischen pf und ic
Objekte (Table "Objects")
unituid - Eindeutige Objekt-Id: Alpha32 - UUID aus DataTracker
projectno - Projektnr.: Alpha12 - Projekt-Nr
positionno - Positionsnr.: Real - Positions-Nr
quantity - Anzahl: Real - Immer "1.0"
itemno - Artikelnr: Alpha20 - Name des KMs
description - Bezeichnung: Text - "No description yet"
length - Länge: Real - Objektmaße: Höhe des KMs
width - Breite: Real - Objektmaße: Breite des KMs
thickness - Dicke: Real - Objektmaße: Tiefe des KMs
purchasepriceunit - Einzelpreis: Real - Immer "0.0"
Extinfo - Text - Erweiterte Informationen vom CAD (ab major = 2018)
Stücklistenübergabe
Stückliste (Table "Parts")
projectno - Projektnr: alpha12 - Projekt-Nummer
positionno - Positionsnr: Real - Positions-Nummer
partno - Teilenr: Real - Part Number (pro Möbel eindeutig?)
partid - TeileID: LongInt - Wird von SQL hochgezählt (auto-increment key?)
Eine von PF einmal vergebene ID
unituid - Eindeutige KorpusID: Alpha32 - UUID aus DataTracker (UUID des KMs (Classic oder neu), Bauteil-UUID bei freien Bauteilen)
unitid - Baugruppennummer: Longint - AV-Baugruppen ID (diese finden sich ganz unten: "Zuordnung Baugruppen ID's in interiorcad")
Referenziert die ID der Baugruppe, zu der das Teil gehört
Baumstruktur, z.B. Schubkasten, Rahmenfront
caduuid - CAD-UUID: Alpha32 - UUID - on the fly (ab interiorcad 2016 F4, Bauteil-UUID, außer bei KM Classic)
quantity - Anzahl: Real - Board Count
length - Länge: Real - Bauteillänge
Das Längenmass gibt immer die Maserungsrichtung an
width - Breite: Real - Bauteilbreite
thickness - Dicke: Real - Bauteildicke
thicknesspart - Dicke Bauteil: Real - Leer
itemno - Artikelnummer: Alpha20 - Bestellnummer
uom - Mengeneinheit: Alpha10 - immer: "Stk"
itemgroup - Artikelgruppe: Alpha20 - Leer
wird vom ERP gefüllt
laminate1front - Belag 1 Vorne: Alpha20 Belag außen
laminate2front - Belag 2 Vorne: alpha20 Leer
laminate1back - Belag 1 Hinten: Alpha20 Belag innen
laminate2back - Belag 2 Hinten: Alpha20 Leer
laminate1frontthck - Belag 1 Vorne Dicke: Real Leer
laminate2frontthck - Belag 2 Vorne Dicke: Real Leer
laminate1backthck - Belag 1 Hinten Dicke: Real Leer
laminate2backthck - Belag 2 Hinten Dicke: Real Leer
Edge1 - Kante1: Alpha20 - Lang vorne - Kante1
Edge2 - Kante2: Alpha20 - Lang hinten - Kante2
edge3 - Kante3: Alpha20 - kurz oben oder links - Kante3
edge4 - Kante4: Alpha20 - kurz unten oder rechts - Kante4
edge1length - Kante1Länge: Real - Leer
edge2length - Kante2Länge: Real - Leer
edge3length - Kante3Länge: Real - Leer
edge4length - Kante4Länge: Real - Leer
edge1width - Kante1Breite: Real - Bauteildicke
edge2width - Kante2Breite: Real - Bauteildicke
edge3width - Kante3Breite: Real - Bauteildicke
edge4width - Kante4Breite: Real - Bauteildicke
edge1thck - Kante1Dicke: Real - Kantendicke1
edge2thck - Kante2Dicke: Real - Kantendicke2
edge3thck - Kante3Dicke: Real - Kantendicke3
edge4thck - Kante4Dicke: Real - Kantendicke4
e13corner - K13Ecke: Integer - Kantenreihenfolge aus interiorcad
KabEcke Definiert die Kantenverbindung zwischen a und b
a geht durch = 0
b geht durch = 1
Gehrung = 2
Derzeit (Stand: Ende 2014) umdefiniert auf Kantenreihenfolge. Das heißt: 4stellige Zahl mit den Ziffern 1-4 in beliebiger Permutation, z.B. 1432 oder 3421
e41corner - K41Ecke: Integer - Leer
e32corner - K32Ecke: Integer - Leer
e42corner - K42Ecke: Integer - Gehrungsreihenfolge aus interiorcad
Derzeit (Stand: Ende 2014) umdefiniert auf Gehrung pro Ecke, dargestellt als 1 für Gehrung und 0 für keine Gehrung. Die Zahl wird bei Verarbeitung in einen vierstelligen String umformatiert, aus 11 wird also "0011", aus 110 wird "0110", aus 1101 wird "1101".
e1laminate - K1überfurniert: Integer - Leer
0 nicht
1 normal
2 postforming - von interiorcad nicht unterstützt
e2laminate - K2überfurniert: Integer - Leer
e3laminate - K3überfurniert: Integer - Leer
e4laminate - K4überfurniert: Integer - Leer
markuplengthtech - Zumass Länge konstruktiv: Real - Leer
markupwidthtech - Zumass Breite konstruktiv: Real - Leer
markuplengthmat - Zumass Länge materialspezifisch: Real - Leer
markupwidthmat - Zumass Breite materialspezifisch: Real - Leer
sketch - Skizze: Link zur Bauteilskizze, Text - Leer
description - Beschreibung: Text - Bauteilbeschreibung
joblist - CNC-Programmname Vorderseite (ohne Dateiendung), Text - NCProgramName Hauptbearbeitungsseite
joblistback - CNC-Programmname Rückseite (ohne Dateiendung), Text - NCProgramName Nebenbearbeitungsseitejoblistformat - CNC-Programmname Formatierung (ohne Dateiendung), Text - NCProgramName Formatierung
comment - Bemerkung - Alpha255
Extinfo - Zusatzinformationen von CAD (ab major = 2018)
graindirection - enum (L,W,N) - Maserrichtung Bauteil (ab major = 2018)
graindirectionl1f - enum (L,W,N), Maserrichtung Belag 1 außen (ab major = 2018)
graindirectionl2f - enum (L,W,N), Maserrichtung Belag 2 außen (ab major = 2018)
graindirectionl1b - enum (L,W,N), Maserrichtung Belag 1 innen (ab major = 2018)
graindirectionl2b - enum (L,W,N), Maserrichtung Belag 2 innen (ab major = 2018)
lengthoriginal - Real - Länge des Bauteils ohne Berücksichtigung Maserrichtung (ab major = 2018)
Widthoriginal - Real - Breite des Bauteils ohne Berücksichtigung Maserrichtung (ab major = 2018)
Joblistpath - Text - Pfad zum CNC-Programm Vorderseite (ab major = 2018)
Joblistbackpath - Pfad zum CNC-Programm Rückseite (ab major = 2018)
Joblistformatpath - Pfad zum CNC-Programm Formatierung (ab major = 2018)
Ispolygonal - boolean - definiert, ob das Bauteil polygonal, also nicht rechteckig ist (ab major = 2018)
edges - JSONString - edgeCode, miterCode, Array von Objekten mit den Feldern edgeid, join (Gehrung, durchlaufend, nicht durchlaufend, ohne), width, length, thickness, material, hasEdge. ist hasEdge false, so sind die übrigen Attribute außer edgeid nicht vorhanden (ab major = 2018)
name - text - Name des Parts (leer wenn nicht vorhanden bzw. nicht bestimmbar) (ab major = 2019)
Konturen (Table „shapes“) (ab major = 2018)
caduuid - UUID - Verweis auf Bauteil
Shape - JSON-String - Objekt mit folgenden Attributen: type (edges, shape with edges, shape without edges, bold edges), edgeid, poly (Array von Objekten mit den Attributen x1,x2,y1,y2,vertextype)
Beschläge (Table "Fittings")
projectno - Projektnr: alpha12 - Projekt-Nummer
positionno - Positionsnr: Real - Positions-Nummer
partno - Teilenr: Real - Part Number (wird derzeit nicht verwendet, interiorcad ab 2016 F4 zählt beim Export der Beschläge einfach diese Nummer hoch)
partid - TeileID: LongInt - wird derzeit nicht verwendet
Eine von PF einmal vergebene ID
unituid - Eindeutige KorpusID: Alpha32 - Kommas-separierte Liste von Part-UUID (caduuid aus Parts), wo der Beschlag hängt
unitid - Baugruppennummer: Longint - Leer
Referenziert die ID der Baugruppe, zu der das Teil gehört
Baumstruktur, z.B. Schubkasten, Rahmenfront
caduuid - CAD-UUID: Alpha32 - UUID - on the fly
quantity - Anzahl: Real - Element Count
itemno - Artikelnummer: Alpha20 - Bestellnummer
uom - Mengeneinheit: Alpha10 - immer: "Stk"
sketch - Skizze: Link zur Bauteilskizze, Text - Leer
description - Beschreibung: Text - Bauteilbeschreibung
comment - Bemerkung - Alpha255
Extinfo - JSON-String - Zusatzinformation von CAD (ab major = 2018)
Beschichtungen (Table "Coverings")
Gehört immer mit zur Stückliste
projectno - Projektnr: alpha12 - Projekt-Nummer
positionno - Positionsnr: Real - Positions-Nummer
partid - TeileID: LongInt - BauteilID
Referenziert das Stücklistenbauteil
unituid - Eindeutige KorpusID: Alpha32 - UUID aus DataTracker - interiorcad-seitig hinzugefügt
elementno - Lfdnr: Integer - Wird hochgezählt
itemno - Artikelnummer: Alpha20 - Beschichtung aus DataTracker
front - Vorderseite: Boolean - immer true
back - Rückseite: Boolean - immer true
edge1 - Kante1: Boolean - immer true
edge2 - Kante2: Boolean - immer true
edge3 - Kante3: Boolean - immer true
edge4 - Kante4: Boolean - immer true
extinfo - JSON-String - Zusatzinformationen von CAD (ab major = 2018)
Bauteilpfade (Table "Paths")
PartUUID - Alpha32 - Verweist auf die CADUUID in der Tabelle Parts
Keyname - Alpha32 - Name es Eintrags. Folgende Werte werden unterstützt:
polygon2d_NumItems
Für jeden Eckpunkt im Pfad (ersetze "n" durch den Index des Eckpunkts, beginnend mit "0"), Werte für Fertigmass
polygon2d_n_point_x
polygon2d_n_point_y
polygon2d_n_point_type
polygon2d_n_point_radius
polygon2d_n_point_visible
Keyvalue - Real - Wert des Eintrags
Bearbeitungen (Table "Machinings)
Eine Bearbeitung ist ein eigenständiges Objekt mit einer eigenen UUID im Datatracker. Die Bearbeitung verweist dann über einen der Keynames auf das zugehörige Bauteil.
MachiningUUID - Alpha32
Keyname - Alpha32
part_type - derzeit nur "XG CPDrilling"
rout_diameter - Durchmesser
rout_depth - Tuefe
rout_partuuid - Verweis auf die CAMUUID im Stücklistenteil
rout_matrixux - hier die Rotationsmatrix
rout_matrixuy
rout_matrixuz
rout_matrixvx
rout_matrixvy
rout_matrixvz
rout_matrixwx
rout_matrixwy
rout_matrixwz
rout_matrixoffsetx - hier stehen die Koordinaten
rout_matrixoffsety
rout_matrixoffsetz
Keyvalue - Alpha64
Arbeitsgänge
Z.B. Platte Sägen, Kanten anleimen, zusammenfügen...
partid - TeileID: Longint
elementno - Lfdnr: Integer
costsource - Kostenstelle: Longint
durationtime - Zeit: Real
comment - Bemerkung: Text
operationname - Arbeitsgangname: Alpha40
cnc - CNC: Boolean
Stammdaten
Artikel (Table "Items")
itemno - Artikelnr: Alpha20
description - Bezeichnung: Text
comment - Kommentar: Text
shortdesc - Kurzbezeichnung: Alpha40
itemgroup - Artikelgruppe: Alpha20
itemtype - Artikeltyp: Alpha20
numerisch
Platte = 0
Belag = 1
Beschichtung = 2
Kante = 3
Beschläge = >1000
materialclass - Materialklasse: Alpha 20
zur Einteilung in äquivalente Oberflächen für Materialtausch
length - Länge: Real
width - Breite: Real
thickness - Stärke: Real
consumptionpersqm - Verbrauch pro m2: Real
uom - Mengeneinheit kalkulatorisch: alpha10
purchaseprice - EK-Preis: Real
calcprice - Selbstkostenpreis: Real
salesprice - Verkaufspreis: Real
texturename - Texturname: Alpha40
picturelink - Link zu Bilddatei: Text
waste - Verschnittprozentwert: Real
supplierid - Lieferantennummer: Alpha12
suppliername - Kurzbezeichnung es Lieferanten: Alpha80
supplierorderno - Bestellnummer des Lieferanten: Alpha40
Lieferanten
supplierno - Lieferantennummer: Alpha12
shortdesc - Kurzbezeichnung: Alpha80
name1 - Name1: Alpha60
name2 - Name2: Alpha60
street - Strasse: Alpha60
postalcode - PLZ: Alpha10
city - Ort: Alpha60
countrycode - Land: Alpha10
phone - Tel: Alpha20
fax - Fax: Alpha20
email - Email: Alpha60
website - Website: Alpha60
owncustomerno - EigeneKundennr: Alpha20