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.
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.
Prozessstatus (Table „Processstates“) (ab major = 2018)
Projektpositionen (Table "Projectpositions")
Konturen (Table „shapes“) (ab major = 2018)
Gehört immer mit zur Stückliste
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.
Z.B. Platte Sägen, Kanten anleimen, zusammenfügen...
supplierid - Lieferantennummer: Alpha12
suppliername - Kurzbezeichnung es Lieferanten: Alpha80
supplierorderno - Bestellnummer des Lieferanten: Alpha40
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.)
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.)
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
-- 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; |
Zwei Dateien werden erzeugt, um die Steuerung des Austausches für beide Bereiche, ERP und CAD zentral zu definieren.
Diese befinden sich unter
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.
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.
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.
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.
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.
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 |