Schnittstellenbeschreibung

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 Nebenbearbeitungsseite

  • joblistformat - 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