| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | Technikerschüler der staatlichen Feintechnikschule Schwenningen zu Besuch bei SolidCAM GmbH in Schramberg, eine Pressemitteilung
|
Autor
|
Thema: Stücklistenoptionen definieren / sperren (1892 / mal gelesen)
|
StMoll Mitglied CAD Administrator
Beiträge: 43 Registriert: 22.01.2019 SolidWorks 2018 SP 5.0 Windows 10 Enterprise HP Z440 Workstation NVIDIA Quadro K2200
|
erstellt am: 05. Jun. 2019 09:31 <-- editieren / zitieren --> Unities abgeben:
Guten Tag zusammen, ich habe eine Frage zu den Stücklistenoptionen in SolidWorks. Es geht mir im Besonderen um die Optionen zum Verhalten beim ersetzten von Komponenten und/oder löschen von Komponenten. Hier gibt es bekanntlich vier Auswahlmöglichkeiten. Diese vier Auswahlmöglichkeiten möchte ich vordefinieren damit nicht jeder nach Lust und Laune Stücklisten erstellt, sondern Stücklisten immer nach dem selben Muster aufgebaut sind. Direkt über die Optionen lässt sich das nicht lösen. Über Templates ebenfalls nicht. Jetzt bin ich auf der Suche nach einem Tool oder einer API Lösung hierfür. Bevor ich mich kopfüber in die Programmierung stürze, dachte ich, ich frage erstmal nach ob schon jemand etwas in der Hinterhand hat. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ConZept Mitglied Maschinenbautechniker
Beiträge: 15 Registriert: 19.02.2019 SolidWorks 2018 / SP 4.0 Win7x64 /HP Z440
|
erstellt am: 05. Jun. 2019 10:25 <-- editieren / zitieren --> Unities abgeben: Nur für StMoll
Hallo, ist auf alle Fälle per API möglich. Siehe IBomFeature Interface. Hier gibts die Option KeepMissingItems und die KeepReplacedCompOption für die vier Auswahlmöglichkeiten. Kannst dich also in die Programmierung stürzen ------------------ Gruß ConZept Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StMoll Mitglied CAD Administrator
Beiträge: 43 Registriert: 22.01.2019 SolidWorks 2018 SP 5.0 Windows 10 Enterprise HP Z440 Workstation NVIDIA Quadro K2200
|
erstellt am: 05. Jun. 2019 10:41 <-- editieren / zitieren --> Unities abgeben:
Danke für den Link. Die API-Befehle hatte mir der DPS Support schon geschickt. Ich habe nur die Hoffnung dass jemand das Problem schon fertig programmiert hat, bevor ich mit meinem gefährlichen Halbwissen loslege. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ConZept Mitglied Maschinenbautechniker
Beiträge: 15 Registriert: 19.02.2019 SolidWorks 2018 / SP 4.0 Win7x64 /HP Z440
|
erstellt am: 05. Jun. 2019 12:34 <-- editieren / zitieren --> Unities abgeben: Nur für StMoll
Kann dir schon was vorgekautes (und angepasstes) Liefern, aber dann lernst du ja nichts Wenn du Hilfe brauchst beim Makro basteln kann ich dir helfen. Finde das wichtig, selbst zu verstehen warum das Makro das macht, was es soll. Falls es irgendwelche Änderungen bei der Arbeitsweise gibt und evtl. Makros angepasst werden müssen - bist du schon mal ein Schritt voraus und weißt wo man ansetzen muss. Schau dir mal Dieses Beispiel an. Helfe dir gerne was zu basteln ;-) Falls du aber zu lazy bist, kann ich dir auch was liefern. ------------------ Gruß ConZept Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StMoll Mitglied CAD Administrator
Beiträge: 43 Registriert: 22.01.2019 SolidWorks 2018 SP 5.0 Windows 10 Enterprise HP Z440 Workstation NVIDIA Quadro K2200
|
erstellt am: 05. Jun. 2019 13:14 <-- editieren / zitieren --> Unities abgeben:
|
StMoll Mitglied CAD Administrator
Beiträge: 43 Registriert: 22.01.2019 SolidWorks 2018 SP 5.0 Windows 10 Enterprise HP Z440 Workstation NVIDIA Quadro K2200
|
erstellt am: 16. Jul. 2019 09:17 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, mein Makro habe ich inzwischen fertig und es macht auch was es soll. In diesem Zuge nochmals vielen Dank an ConZept für die Unterstützung. Es gibt jedoch noch einen Punkt der mich stört und den ich nicht gelöst bekomme. Ich habe eine Zeichnung mit 9 Konfigurationen. SWX benötigt für zum Einfügen der Stückliste 15 Sekunden. Mein Makro benötigt 31 Sekunden. Ich konnte einen Ablauf im Makro als Übeltäter ausmachen, jedoch kann ich meine vermeintliche Lösung nicht testen da ich es, wie gesagt, nicht umgesetzt bekomme. Es wird die Stückliste angelegt mit der Standard-Konfiguration und im Anschluss werden die restlichen Konfigurationen ausgelesen und übergeben. Ich setzte also Configuration = "" und füge über InsertBomTabe4 die BOM ein. Dieser Vorgang ist der Zeitfresser. Wenn ich die Konfigurationen direkt bei der Stücklistenerstellung bereits übergeben könnte würde dass das Makro vermutlich deutlich schneller machen. Ich bin einmal so frei und setzte hier den gesamten Code rein: (Templatepfad entfernt)
Code:
'Was das Marco macht: / What this macro does: 'Überprüfen ob eine Zeichnung geöffnet ist. / Checks if a drawing is active. 'Überprüfen ob eine Ansicht ausgewählt ist. / Checks if a view is selected. 'Überprüfen ob die Zeichnung zu ASM oder PRT gehört. / Checks if the drawing belongs to an ASM or PRT. 'Stückliste einfügen mit definierten Einstellungen. / Insert BOM with defined settings. 'Alle Konfigurationen hinzufügen. / Adding of all configurations. 'Den Namen der Stückliste definieren. / Setting the name of the Bill of Materials. 'Getroffene Einstellungen im Direktbereich anzeigen. / Shows all settings in the immediate window. 'Geschrieben von MOSF im Juni/Juli 2019 / Written by MOSF in June/July 2019 '************************************************************************************************ Option ExplicitDim SwApp As SldWorks.SldWorks Dim TableTemplate As String Dim Configuration As String Dim swBomAnnotation As SldWorks.BomTableAnnotation Dim swBomFeature As SldWorks.BomFeature Dim swDrawing As SldWorks.ModelDoc Dim swView As SldWorks.View Dim ModelDoc As SldWorks.ModelDoc2 Dim swSelectMngr As SldWorks.SelectionMgr Dim ItemNbr As SldWorks.BomFeature Dim Visible As Variant Dim Names As Variant Dim boolstatus As Boolean Dim AtIndex As Long Dim swViewModel As ModelDoc2 Dim ConfigName As String Dim ConfigNames() As String Dim i As Long Dim swConfig As SldWorks.Configuration Sub Stueckliste() Set SwApp = Application.SldWorks SwApp.Visible = True Set ModelDoc = SwApp.ActiveDoc If ModelDoc.GetType() <> swDocDRAWING Then 'Fehler wenn das Dokument keine Zeichnung ist. / Error if Document isn´t a Drawing. Call MsgBox("Dokument ist keine Zeichnung (.slddrw!) / Document is not a Drawing (.slddrw)", vbOKOnly) Exit Sub End If 'Auswahl der Ansicht für BOM / Selecting the View used for the BOM. Set swDrawing = ModelDoc Set swSelectMngr = ModelDoc.SelectionManager Set swView = swSelectMngr.GetSelectedObject6(1, 0) If swView Is Nothing Then 'Fehler wenn keine Ansicht gewählt wurde. / Error if no View was selected. Call MsgBox("Keine Ansicht ausgewählt. Bitte Ansicht auswählen! / No View selected. Please select a View)", vbOKOnly) Exit Sub End If Set swViewModel = swView.ReferencedDocument 'Überprüfung ob Zeichnung zu Baugruppe oder Einzelteil gehört. / Check if the Drawing belongs to a Part or an Assembly. If swViewModel.GetType = 2 Then 'Einfügen der Stückliste Assembly / Insert of the Assembly BOM. TableTemplate = "----Hier Template einfügen----" Configuration = "" Set swBomAnnotation = swView.InsertBomTable4(True, 0.4, 0.3, _ swBOMConfigurationAnchor_BottomLeft, _ swBomType_TopLevelOnly, _ Configuration, _ TableTemplate, _ False, _ swNumberingType_e.swIndentedBOMNotSet, _ True) Set swBomFeature = swBomAnnotation.BomFeature 'Konfigurationen auslesen und einfügen in BOM. / Readout and insert the Names of the Configurations. Names = swBomFeature.GetConfigurations(False, Visible) Visible(0) = True boolstatus = swBomFeature.SetConfigurations(True, Visible, Names) 'Gefundene Konfigurationen werden im Direktbereich aufgelistet / Found Configuration names will be shown in the immediate window. ConfigNames = swViewModel.GetConfigurationNames For i = 0 To UBound(ConfigNames) ConfigName = ConfigNames(i) Set swConfig = ModelDoc.GetConfigurationByName(ConfigName) Debug.Print "Vorhandene Configurationen / Found configurations: " & ConfigName Next i ' Name der Stückliste definieren / set the Name of the Bill of Materials swBomFeature.Name = "Bill of Materials BAUER" 'Definition der Stuecklistenoption. / Definition of BOM Settings. swBomFeature.DisplayAsOneItem = True swBomFeature.PartConfigurationGrouping = swDisplay_ConfigurationOfSamePart_AsSeparateItem swBomFeature.KeepReplacedCompOption = swKeepBothNewItemNumber swBomFeature.StrikeoutMissingItems = False swBomFeature.KeepCurrentItemNumbers = True swBomFeature.ZeroQuantityDisplay = swZeroQuantityDashed ElseIf swViewModel.GetType = 1 Then 'Einfügen der Stückliste Einzelteil / Insert of the Part BOM TableTemplate = "----Hier Template einfügen----" Configuration = "" Set swBomAnnotation = swView.InsertBomTable4(True, 0.4, 0.3, _ swBOMConfigurationAnchor_BottomLeft, _ swBomType_PartsOnly, _ Configuration, _ TableTemplate, _ False, _ swNumberingType_e.swIndentedBOMNotSet, _ True) Set swBomFeature = swBomAnnotation.BomFeature 'Konfigurationen auslesen und einfügen in BOM. / Readout and insert the Names of the Configurations. Names = swBomFeature.GetConfigurations(False, Visible) Visible(0) = True boolstatus = swBomFeature.SetConfigurations(True, Visible, Names) 'Gefundene Konfigurationen werden im Direktbereich aufgelistet / Found Configuration names will be shown in the immediate window. ConfigNames = swViewModel.GetConfigurationNames For i = 0 To UBound(ConfigNames) ConfigName = ConfigNames(i) Set swConfig = ModelDoc.GetConfigurationByName(ConfigName) Debug.Print "Vorhandene Configurationen / Found configurations: " & ConfigName Next i 'Name der Stückliste definieren / set the Name of the Bill of Materials swBomFeature.Name = "Bill of Materials BAUER" End If 'Ausgabe der getroffenen Einstellungen im Direktbereich. / Showing the Settings in the Immediate Window. Debug.Print "----------------------------------------------------------------" Debug.Print "Basic structur of the BOM. 1=Parts Only / 2=Top Level only / 3=Indented : " & swBomFeature.TableType Debug.Print "Numbering of the BOM. 1=Detailed / 2=Flat / 0=None / 3=Not Set: " & swBomFeature.NumberingTypeOnIndentedBOM Debug.Print "Display if a value is zero. 1=Dashed / 2=Zero / 3=Blank: " & swBomFeature.ZeroQuantityDisplay Debug.Print "Display as one item? " & swBomFeature.DisplayAsOneItem Debug.Print "Sequence start number: " & swBomFeature.SequenceStartNumber Debug.Print "Keep missing items? " & swBomFeature.KeepMissingItems Debug.Print "Strikeout missing items? " & swBomFeature.StrikeoutMissingItems Debug.Print "Replace missing components as defined in swKeepReplacedCompOption_e: " & swBomFeature.KeepReplacedCompOption Debug.Print "Keep current item numbers when reordering rows? " & swBomFeature.KeepCurrentItemNumbers swDrawing.ForceRebuild End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|