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".
- 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
- Für jeden Eckpunkt im Pfad (ersetze "n" durch den Index des Eckpunkts, beginnend mit "0"), Werte für Fertigmass
- polygon2d_NumItems
- 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
- part_type - derzeit nur "XG CPDrilling"
- 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
- numerisch
- 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
- comment - Bemerkungen: Text
- salescontact - AnsprechpartnerVerkauf: Alpha60
Kunden
- customerno - Kundennummer: 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
- ownsupplierno - EigeneLieferantennummer: Alpha20
- comment - Bemerkungen: Text
- purchasecontact - AnsprechpartnerEinkauf: Alpha60
Kostenstellen
- costsource- Kostenstellennummer: Longint
- description - Bezeichnung: Text
- usagetype - Verwendungsklasse: Integer
- Zuschnitt
- Kante
- Belegen
- Lackieren
- Zusammenbau
- Sonstiges
- purchaserate - Stundensatz EK: Real
- calcrate - Stundensatz Selbstkosten: Real
- salesrate - Stundensatz Verkaufspreis: Real
Messaging (Table "Messages")
Hier wird hinterlegt, an welchen Datensätzen zuletzt Änderungen vorgenommen wurden, die dann entsprechend noch abzugleichen sind. Nach Abgleich wird der Eintrag auf verarbeitet gesetzt und kann dann jederzeit gelöscht werden.
Artikel (Items) brauchen weder projectno noch positionno.
Wenn ein Eintrag nicht mehr gebraucht wird, sollte es gelöscht werden. ("processed" ist eher temporär gedacht.)
- messid - Message ID: Integer (höchster Wert + 1)
- messdate - Datum: Datum (yyyy-mm-dd UTC)
- messtime - Uhrzeit: Zeit (hh:mm:ss UTC)
- creator - Erzeuger: Integer
- CAD = 0
- ERP = 1
- Schnittstellentreiber = 10
- messagetype - Nachrichtentyp: Integer
- Artikel aktualisiert = 0
- Kostenstellen aktualisiert = 1
- Lieferanten aktualisiert = 2
- Kunden aktualisiert = 3
- Projekte mit Positionen aktualisiert = 4
- Positionen aktualisiert (CAD) = 5
- Stückliste aktualisiert = 6
- Kalkulationen aktualisiert = 7
- Verbindungstests = 10
- Neue Position = 20
- Positionsbeschreibung hat sich geändert = 21
- Position wurde gelöscht = 22
- Position wurde umnummeriert = 23
- Tabelle processstates wurde aktualisiert = 30 (ab major = 2018)
- projectno - Projektnr: Alpha12
- Muß angegeben werden.
- positionno - Positionsnr: Real
- Muß angegeben werden.
- comment - Bemerkung: Text
- processed - Verarbeitet: Boolean
- 0 wenn noch nicht verarbeitet, 1 wenn verarbeitet
- docpath - Text - Pfad zum CAD-Dokument (nur bei Creator = 0 gefüllt) (ab major = 2018)
Version (Table "Version")
Diese Tabelle enthält die Major-Version der Datenbank. Diese Major-Version ist die selbe wie interiorcad bzw. profacto.
Diese Tabelle gibt es ab 2013. (Fehlt diese Tabelle wird angenommen, dass die Datenbank im 2012-Format ist.)
- major - Ganzzahl (NOT NULL; muss gleich oder größer 2013 sein).
Änderungen
Ab major = 2018 werden folgende Erweiterungen unterstützt:
polygonale Kanten
Maserrichtung für Trägermaterial und die vier Beläge. Wird durch spezielle Felder dokumentiert und durch eigene Massfelder auch explizit dargestellt.
Extinfo-Felder in diversen Tabellen, um CADs von Drittherstellern die Möglichkeit zu geben, eigene Informationen an ERPs zu transportieren
Prozessstatus-Tabelle mit dokumentierten Prozesstatus-Werten mitsamt Message-Type bei Aktualisierung
Übergabe Erzeugungsdatum und -jahr für Projekte
Übergabe von Dateipfad der CAD-Datei im Messaging
Übergabe der Pfade der CNC-Programme zum Bauteil
Ab major = 2019 werden folgende Erweiterungen unterstützt:
- Name in der Parts-Tabelle
Schema
-- This file MUST be encoded in UTF-8 BEGIN TRANSACTION; CREATE TABLE IF NOT EXISTS Costsources(costsource integer,description longvarchar(65536),usagetype integer,purchaserate float,calcrate float,salesrate float); CREATE TABLE IF NOT EXISTS Coverings(projectno varchar(12),positionno float,partid integer,unituid varchar(20),elementno integer,itemno varchar(20),front bit,back bit,edge1 bit,edge2 bit,edge3 bit,edge4 bit, extinfo text); CREATE TABLE IF NOT EXISTS Customers(customerno varchar(12),shortdesc varchar(80),name1 varchar(60),name2 varchar(60),street varchar(60),postalcode varchar(10),city varchar(60),countrycode varchar(10),phone varchar(20),fax varchar(20),email varchar(60),website varchar(60),ownsupplierno varchar(20),comment longvarchar(65536),purchasecontact varchar(60)); CREATE TABLE IF NOT EXISTS Items(itemno varchar(20),description longvarchar(65536),itemgroup varchar(20),purchaseprice float,calcprice float,salesprice float,length float,width float,thickness float,itemtype varchar(20),comment longvarchar(65536),shortdesc varchar(40),materialclass varchar(20),consumptionpersqm float,uom varchar(10),texturename varchar(40),picturelink longvarchar(65536),waste float,supplierid varchar(12),suppliername varchar(80),supplierorderno varchar(40)); CREATE TABLE IF NOT EXISTS MaterialCalculation(projectposcompound varchar(255),projectno varchar(255),positionno float,itemno varchar(20),description longvarchar(65536),comment longvarchar(65536),quantity float,purchasepriceunit float,calcpriceunit float,salespriceunit float,purchasepricetotal float,calcpricetotal float,salespricetotal float); CREATE TABLE IF NOT EXISTS Messages(messid integer,messdate timestamp,messtime timestamp,creator integer,messagetype integer,projectno varchar(12),positionno float,comment longvarchar(65536),processed bit, docpath text); CREATE UNIQUE INDEX IF NOT EXISTS Messages_messid_index ON Messages (messid); CREATE TABLE IF NOT EXISTS Parts(projectno varchar(12),positionno float,partno integer,partid integer,unituid varchar(32),unitid integer,caduuid varchar(20),quantity float,length float,width float,thickness float,thicknesspart float,itemno varchar(20),uom varchar(10),itemgroup varchar(20),laminate1front varchar(20),laminate2front varchar(20),laminate1back varchar(20),laminate2back varchar(20),laminate1frontthck float,laminate2frontthck float,laminate1backthck float,laminate2backthck float,edge1 varchar(20),edge2 varchar(20),edge3 varchar(20),edge4 varchar(20),edge1length float,edge2length float,edge3length float,edge4length float,edge1width float,edge2width float,edge3width float,edge4width float,edge1thck float,edge2thck float,edge3thck float,edge4thck float,e13corner integer,e41corner integer,e32corner integer,e42corner integer,e1laminate integer,e2laminate integer,e3laminate integer,e4laminate integer,markuplengthtech float,markupwidthtech float,markuplengthmat float,markupwidthmat float,sketch varchar(255),description longvarchar(65536),joblist varchar(255), joblistback varchar(255), joblistformat varchar(255), comment varchar(255), extinfo text, graindirection varchar(1), graindirectionl1f varchar(1), graindirectionl2f varchar(1), graindirectionl1b varchar(1), graindirectionl2b varchar(1), lengthoriginal float, widthoriginal float, joblistpath text, joblistbackpath text, joblistformatpath text, ispolygonal boolean, edges text, name text); CREATE TABLE IF NOT EXISTS Projectpositions(projectposcombi varchar(40),projectno varchar(12),positionno float,quantity float,itemno varchar(20),description longvarchar(65536),itemgroup varchar(20),length float,width float,thickness float,purchasepriceunit float,calcpriceunit float,salespriceunit float,purchasepricetotal float,calcpricetotal float,salespricetotal float, posuuid varchar(32), extinfo text); CREATE TABLE IF NOT EXISTS Projects(projectno varchar(12),projectname longvarchar(65536),description longvarchar(65536),deliverydate timestamp,deliveryweek integer,deliveryyear integer,customerno varchar(12),name1 varchar(60),name2 varchar(60),street varchar(60),postalcode varchar(10),city varchar(60),countrycode varchar(10),projectfolderpath longvarchar(65536), manager varchar(64), salutation varchar(64), firstname varchar(64), lastname varchar(64), projectstate varchar(32), engineername varchar(40), managername varchar(40), procstate varchar(40), procstateid integer, projectstateid integer, creationdate timestamp, creationyear integer); CREATE TABLE IF NOT EXISTS Suppliers(supplierno varchar(12),shortdesc varchar(80),name1 varchar(60),name2 varchar(60),street varchar(60),postalcode varchar(10),city varchar(60),countrycode varchar(10),phone varchar(20),fax varchar(20),email varchar(60),website varchar(60),owncustomerno varchar(20),comment longvarchar(65536),salescontact varchar(60)); CREATE TABLE IF NOT EXISTS TimeCalculation(projectposcompound varchar(255),projectno varchar(255),positionno float,costsource integer,description longvarchar(65536),comment longvarchar(65536),durationtime float,purchasepriceunit float,calcpriceunit float,salespriceunit float,purchasepricetotal float,calcpricetotal float,salespricetotal float); CREATE TABLE IF NOT EXISTS Worksteps(partid integer,elementno integer,costsource integer,durationtime float,comment longvarchar(65536),operationname varchar(40),cnc bit); CREATE TABLE IF NOT EXISTS Objects(unituid varchar(32), projectno varchar(12), positionno float, quantity float, itemno varchar(20), description longvarchar(65536), length float, width float, thickness float, purchasepriceunit float, extinfo text); -- New tables in interiorcad / profacto 2013 CREATE TABLE IF NOT EXISTS Paths (partuuid varchar(32), keyname varchar(32), keyvalue float); CREATE INDEX IF NOt EXISTS Paths_index ON Paths (partuuid, keyname); CREATE TABLE IF NOT EXISTS Machinings (machininguuid varchar(32), keyname varchar(32), keyvalue float); CREATE INDEX IF NOT EXISTS Machinings_index ON Machinings (machininguuid, keyname); -- New tables in pfic version 2017 (interiorcad 2016 F4) CREATE TABLE IF NOT EXISTS Fittings(projectno varchar(12),positionno float,partno integer,partid integer,unituid varchar(32),unitid integer,caduuid varchar(20),quantity float,itemno varchar(20),uom varchar(10),sketch varchar(255),description longvarchar(65536), comment varchar(255), extinfo text); -- New tables in pfic version 2018 (interiorcad 2018 F6) CREATE TABLE IF NOT EXISTS ProcessState (pstatid integer, pstatdescription varchar(64)); CREATE TABLE IF NOT EXISTS Shapes (caduuid varchar(20), shape text); CREATE TABLE IF NOT EXISTS Version (major integer NOT NULL); DELETE FROM Version; INSERT INTO Version (major) VALUES (2019); COMMIT TRANSACTION;
Steuerung
Zwei Dateien werden erzeugt, um die Steuerung des Austausches für beide Bereiche, ERP und CAD zentral zu definieren.
Diese befinden sich unter
- Windows: C:\Users\Public\Documents\extragroup\profacto\
- macOS: /Users/Shared/extragroup/profacto/
xml-Datei
profacto erstellt neben der Austauschdatenbank die Datei pfic.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <pfic dbcreator="ic" interiorcad="false" profacto="true" status="on" version="2014"> <features> <feature enabled="true" id="project-details-history"/> </features> </pfic>
dbcreator kann ic oder pfic annehmen, um zu differenzieren, ob die Schnittstelle und Austauschdatenbank vom CAD (ic) oder einem Installer (pfic) erstellt worden ist.
interiorcad kann true oder false annehmen und indiziert ob ein kompatibles CAD-Programm vorgefunden wurde oder sich selber als solches einträgt. profacto ist äquivalent für ein kompatibles ERP-Programm.
status kann on, off, auto, demo, corrupt, possible, impossible (veraltet) annehmen.
- on bedeutet, daß auf einer Seite (CAD oder ERP) die Schnittstelle vom Anwender gezielt aktiviert wurde.
- off bedeutet, daß auf einer Seite die Schnittstelle gezielt deaktiviert wurde.
- demo signalisiert, daß die Schnitstelle technisch funktioniert, jedoch der Treiber (OS X) nicht lizensiert worden ist. (ab profacto 2015 nicht mehr von Bedeutung, da kein Treiber mehr benötigt wird)
- corrupt verweist auf ein technisches Problem in der Datenbank nach der Installation.
- possible wird vom Installer gesetzt, um den Programmen die technische und lizenzseitige (OS X - ab profacto 2015 nicht mehr von Bedeutung, da kein Treiber mehr benötigt wird)) Verfügbarbarkeit zu signalisieren
- impossible (veraltet) wurde vom Installer gesetzt, um den Programmen zu signalisieren, daß es technisch nicht möglich sein wird die Schnittstelle zu verwenden.
Für eine korrekte Ausführung müssen die Attribute profacto und interiorcad auf "true" gesetzt werden, sofern profacto 2013 (für ERP-Software) oder neuer bzw. interiorcad 2013 (für CAD-Software) oder neuer, bzw. Drittsoftware vorhanden ist, mit der in beiden Richtungen kommuniziert werden kann.
lock-Datei
Während des Austausches prüft eine jede Anwendung ob eine lock-Datei neben der Austausch-DB liegt. In dieser Dateisteht für Support und technische Analyse auch das Datum.
Wird diese vom ERP erzeugt lautet der Name pflock, vom CAD entsprechend iclock. Beim Transfer von Daten wird erst geprüft, ob eine lock-Datei vorliegt, falls ja - so sollte die Anwendung einige Sekunden warten, bevor erneut geprüft wird. Falls keine vorliegt, wird die Datei erstellt und dann erst erfolgt der Transfer der Daten in die Austauschdatenbank. Nach erfolgtem Transfer wird die eigene lock-Datei getilgt und so für die andere Anwendung der Zugriff auf die Austauschdatenbank wieder frei gegeben.
Anwendungsdatei
Optional ist es eine Datei neben der Datenbank und der pfic.xml-Datei zu hinterlegen, die produktname.txt (also zum Beispiel topsolid.txt) lautet und darin die Version enthält. Dadurch kann auf einfache Weise in der korrespondierenden Anwendung zum Beispiel ein Symbol eingeblendet werden.
Einschränkungen der Kompatibilität mit bestimmten CAD-Systemen
Was fehlt ist die Definition der Kantenreihenfolge. Ist diese definiert, dann ergeben sich die Eckausprägungen von alleine und man muß nur noch definieren, ob die Ecken auf Gehrung oder auf Stoß ausgeprägt sind. Diese Information aus TopSolid wird in profacto derzeit nicht übernommen.
Zuordnung Baugruppen ID's in interiorcad
ID (AV) | Baugruppe (AV) | Bemerkung | Kantenzuordnung |
---|---|---|---|
73 | Generisches Bauteil | freies Bauteil | Kante 1 ist am NC-Anschlag, unten / vorne |
8 | Rückwand | im Korpusmöbel | Kante 1 ist links |
0 | Seite Links Stollen Links Vorne Stollen Links Hinten | im Korpusmöbel | Kante 1 ist vorne |
31 | Seite Rechts Stollen Rechts Vorne Stollen Rechts Hinten | im Korpusmöbel | Kante 1 ist vorne |
5 | Mittelseite Stollen Mittelseite Vorne Stollen Mittelseite Hinten | im Korpusmöbel | Kante 1 ist vorne |
32 | Boden Oben | im Korpusmöbel | Kante 1 ist vorne |
1 | Boden Unten | im Korpusmöbel | Kante 1 ist vorne |
26 | Travers Oben Vorne Travers Unten Vorne | im Korpusmöbel | Kante 1 ist vorne |
41 | Travers Oben Hinten Travers Unten Hinten | im Korpusmöbel | Kante 1 ist vorne |
11 | Konstruktionsboden | im Korpusmöbel | Kante 1 ist vorne |
2 | Fachoden | im Korpusmöbel | Kante 1 ist vorne |
3 | Tür Front | im Korpusmöbel | Kante 1 ist am Türanschlag |
16 | Schubkasten Front | im Korpusmöbel | Kante 1 ist unten |
7 | Sockel Vorne | im Korpusmöbel im Sockel Objekt | Kante 1 ist oben |
37 | Sockel Links | im Korpusmöbel im Sockel Objekt | Kante 1 ist oben |
38 | Sockel Rechts | im Korpusmöbel im Sockel Objekt | Kante 1 ist oben |
39 | Sockel Hinten | im Korpusmöbel im Sockel Objekt | Kante 1 ist oben |
40 | Sockelverstärker | im Korpusmöbel im Sockel Objekt | Kante 1 ist oben |
35 | Blende Oben Vorne | im Korpusmöbel | Kante 1 ist unten |
9 | Blende Seite Links | im Korpusmöbel | Kante 1 ist innen |
34 | Blende Seite Rechts | im Korpusmöbel | Kante 1 ist innen |
19 | Schubkasten Boden | im Systemschubkasten im Holzschubkasten | Kante 1 ist vorne |
20 | Schubkasten Rückwand | im Systemschubkasten im Holzschubkasten | Kante 1 ist oben |
25 | Schubkasten Vorderstück | im Holzschubkasten | Kante 1 ist oben |
17 | Schubkasten Zarge (Seitenteil rechts / links) | im Holzschubkasten | Kante 1 ist oben |