| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Kaufteile in der Struktur-Stückliste (255 / mal gelesen)
|
Lothar Boekels Ehrenmitglied V.I.P. h.c. Dipl.-Ing. Maschinenbau und CAD-Trainer

 Beiträge: 3850 Registriert: 15.02.2001 DELL Precision 7520 Win11Pro-64 Inventor mit Vault Professional 2025 --------------------- Während man es aufschiebt, verrinnt das Leben. Lucius Annaeus Seneca (ca. 4 v. Chr - 65 n. Chr.)
|
erstellt am: 26. Feb. 2025 16:34 <-- editieren / zitieren --> Unities abgeben:         
Noch mal ein Thema zur Strukturstückliste. Derzeit benutze ich das MuM-Inventortool für die Stücklistengenerierung. Was dabei aufgefallen ist, ist dass Kaufteile (wenn es denn Baugruppen sind) immer komplett mit ihrer ganzen Struktur in der Strukturstückliste erscheinen. Zuerst dachte ich, das sei ein MuM-Problem. Dann habe ich aber gesehen, dass entgegen den Angaben von Autodesk die Komponenten einer Einkauf-Baugruppe auch dort in der Strukturstückliste erscheinen, wenn sie als "Normal" oder "eingekauft" oder "untrennbar" deklariert sind. Ich habe hier z.B. ein Linearmodul von igus - eine Baugruppe, die natürlich wegen der Darstellung und des Gewichts wegen nicht mit Komponenten, die als "Referenz" gekennzeichnet sind daherkommen können. Für mich sinnvoll erscheint die Auszeichnung als Phantom. Dann sind auch alle Komponenten der Unterbaugruppen als Phantom zu deklarieren. Das kann dann ganz schön Zeit kosten. Dafür habe ich mir eine iLogic-Regel gebastelt:
Code:
Sub Main() Try ' Nachricht zum Start der Regel MessageBox.Show("Regel wird ausgeführt") ' Durchlaufen Sie alle Komponenten in der obersten Baugruppe For Each oComp As Inventor.ComponentOccurrence In ThisApplication.ActiveDocument.ComponentDefinition.Occurrences ' Rufen Sie die rekursive Funktion für jede Komponente auf ExcludePurchasedComponents(oComp) Next Catch ex As Exception MessageBox.Show("Fehler in Main: " & ex.Message) End Try End Sub Sub ExcludePurchasedComponents(oComp As Inventor.ComponentOccurrence) Try ' Überprüfen Sie, ob die übergeordnete Baugruppe als Kaufteil markiert ist Dim isInPurchasedBOMStructure As Boolean = oComp.BOMStructure = kPurchasedBOMStructure ' Rekursion für alle Unterkomponenten aufrufen ProcessSubComponents(oComp, isInPurchasedBOMStructure) Catch ex As Exception MessageBox.Show("Fehler in ExcludePurchasedComponents: " & ex.Message) End Try End Sub Sub ProcessSubComponents(oComp As Inventor.ComponentOccurrence, isInPurchasedBOMStructure As Boolean) Try ' Durchlaufen Sie alle Unterkomponenten der aktuellen Baugruppe For Each oSubComp As Inventor.ComponentOccurrence In oComp.SubOccurrences ' Überprüfen Sie die aktuelle BOMStructure der Unterkomponente Dim sBOMStructure_zuerst As String = oSubComp.BOMStructure.ToString() ' Setzen der Stücklistenstruktur der Unterkomponenten auf Phantom, wenn sie vorher auf "normal" stand If isInPurchasedBOMStructure AndAlso oSubComp.BOMStructure = kNormalBOMStructure Then ' Überprüfen, ob die Teilenummer mit "DIN" oder "ISO" beginnt Dim partNumber As String = oSubComp.Definition.Document.PropertySets.Item("Project").Item("Part Number").Value If Not partNumber.StartsWith("DIN") And Not partNumber.StartsWith("ISO") Then Dim subCompDef As Inventor.ComponentDefinition = oSubComp.Definition Try subCompDef.BOMStructure = Inventor.BOMStructureEnum.kPhantomBOMStructure Catch ex As Exception MessageBox.Show(oSubComp.Name & ": nicht behandelt!") End Try End If Dim sBOMStructure_danach As String = oSubComp.BOMStructure.ToString() ' Nachricht zur neuen BOMStructure If Not sBOMStructure_zuerst = sBOMStructure_danach Then MessageBox.Show(oSubComp.Name & ": " & vbCrLf & sBOMStructure_zuerst & vbCrLf & "in " & vbCrLf & sBOMStructure_danach, "Änderung BOMStructure:") End If End If ' Überprüfen Sie, ob die Unterkomponente ebenfalls eine gekaufte Baugruppe ist Dim isSubCompInPurchasedBOMStructure As Boolean = isInPurchasedBOMStructure OrElse oSubComp.BOMStructure = kPurchasedBOMStructure ' Aufruf der Funktion rekursiv für Unterbaugruppen ProcessSubComponents(oSubComp, isSubCompInPurchasedBOMStructure) Next Catch ex As Exception MessageBox.Show("Fehler in ProcessSubComponents: " & ex.Message) End Try End Sub
Das funktioniert so weit schon super. ABER: Anscheinend müssen immer alle Bauteile schon vorher ausgecheckt sein.
Dazu habe ich den Zweizeiler aus den Snippets genommen: Code:
Dim oControlDef As Inventor.ControlDefinition = ThisApplication.CommandManager.ControlDefinitions.Item("VaultCheckoutTop") oControlDef.Execute2(True) 'synchronous execution; wait for the commands ending before rule exits
Der checkt aber die Normteile nicht aus, so dass ich in dem ersten Code die "DIN" und "ISO"-Teile ausgeschlossen habe. Aber irgendwie kommt immer noch ein Fehler: "Fehler in ProcessSubComponents: Unbekannter Fehler (0x80004005 (E_FAIL))" Hat da jemand einen Tipp für mich? ------------------ mit freundlichem Gruß aus der Burggemeinde Brüggen Lothar Boekels Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
      

 Beiträge: 2788 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 26. Feb. 2025 21:09 <-- editieren / zitieren --> Unities abgeben:          Nur für Lothar Boekels
Moin Die Zeile kann nicht funktionieren, da intern die PropertySets anders aufgeteilt sind und andere Namen haben.
Code: Dim partNumber As String = oSubComp.Definition.Document.PropertySets.Item("Project").Item("Part Number").Value
Mach daraus Code: Dim partNumber As String = oSubComp.Definition.Document.PropertySets.Item("Design Tracking Properties").Item("Part Number").Value
oder Code: Dim partNumber As String = oSubComp.Definition.Document.PropertySets.Item("{32853F0F-3444-11D1-9E93-0060B03C1CA6}").Item("Part Number").Value
Weiter hab ich den Code nicht untersucht. Bin auch der Meinung, dass gekaufte und unteilbare Baugruppen nur in den Modelldaten aufgedröselt werden sollen, aber nicht in der strukturierten Ansicht. Ich meine, das war früher auch so. Mit dem jetzigen Verhalten gibt es doch gar keinen Unterschied mehr zwischen Normal, Gekauft und Unteilbar. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lothar Boekels Ehrenmitglied V.I.P. h.c. Dipl.-Ing. Maschinenbau und CAD-Trainer

 Beiträge: 3850 Registriert: 15.02.2001 DELL Precision 7520 Win11Pro-64 Inventor mit Vault Professional 2025 --------------------- Während man es aufschiebt, verrinnt das Leben. Lucius Annaeus Seneca (ca. 4 v. Chr - 65 n. Chr.)
|
erstellt am: 27. Feb. 2025 09:22 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von rkauskh:
Bin auch der Meinung, dass gekaufte und unteilbare Baugruppen nur in den Modelldaten aufgedröselt werden sollen, aber nicht in der strukturierten Ansicht. Ich meine, das war früher auch so. Mit dem jetzigen Verhalten gibt es doch gar keinen Unterschied mehr zwischen Normal, Gekauft und Unteilbar.
Hallo Ralf, vielen Dank für deine Zeit. Das mit den Stücklisten ist so ein Thema, das bei Autodesk wohl nur am Rand behandelt wird, dabei haben alle die ganz kleinen Büros gar kein ERP oder so was. Da kommt es schon drauf an, dass man da ordentliche Stücklisten generieren kann. Aber Jammern führt ja meist zu nichts. ------------------ mit freundlichem Gruß aus der Burggemeinde Brüggen Lothar Boekels Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lothar Boekels Ehrenmitglied V.I.P. h.c. Dipl.-Ing. Maschinenbau und CAD-Trainer

 Beiträge: 3850 Registriert: 15.02.2001 DELL Precision 7520 Win11Pro-64 Inventor mit Vault Professional 2025 --------------------- Während man es aufschiebt, verrinnt das Leben. Lucius Annaeus Seneca (ca. 4 v. Chr - 65 n. Chr.)
|
erstellt am: 27. Feb. 2025 09:34 <-- editieren / zitieren --> Unities abgeben:         
Für alle anderen: Ich mache das jetzt so, dass ich die Baugruppe, die ich nicht weiter aufgelöst haben möchte mit einem iProperty "BOMauflösen" (Ja/Nein) versehen habe, dass im betreffenden Fall auf "Nein" setze. mit dem MuM Multitool für Inventor schreibe ich die Stückliste in eine Excel-Tabelle und ebenfalls dieses iProperty. Hier in Spalte "L". Dann habe ich mir ein Makro für Excel gemacht, dass die Zeilen mit den Komponenten dieser Baugruppe wieder entfernt. Hier das Makro für Excel: Code:
Sub LöscheKomponentenVonGekauftenBaugruppen()' Makro ' Tastenkombination "Strg+Alt+d" ' Bereinigt Strukturstücklisten ' ' Wenn in Spalte "L" ein "Nein" steht, so sollen deren ' Komponenten nicht in der Stückliste erscheinen. ' Dazu wird die Positionsnummer der entsprechenden Zeile gemerkt und mit den nachfolgenden Zeilen verglichen. ' Beginnt die dortige Positionsnummer mit dem gleichen String, so ist es eine Komponente und die Zeile kann gelöscht werden. ' Bis ein Unterschied auftaucht. Dann beginnt das ganze von vorne mit der nächten Stelle, wo die Auflösung nicht gewünscht ist. ' Dim ws As Worksheet Dim letzteZeile As Long Dim i As Long Dim gemerkterWert As String Dim abschnittBeginn As Long Dim abschnittEnde As Long Set ws = ActiveSheet ' Verwendet das aktive Arbeitsblatt letzteZeile = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row abschnittBeginn = 6 ' Beginne bei Zeile 6 Do While abschnittBeginn <= letzteZeile abschnittEnde = abschnittBeginn Do While abschnittEnde <= letzteZeile And ws.Cells(abschnittEnde, 1).Value <> "" abschnittEnde = abschnittEnde + 1 Loop i = abschnittBeginn Do While i < abschnittEnde If ws.Cells(i, 12).Value = "Nein" Then ' Spalte "L" -> 12 gemerkterWert = ws.Cells(i, 1).Value i = i + 1 Do While i < abschnittEnde And InStr(1, ws.Cells(i, 1).Value, gemerkterWert, vbTextCompare) = 1 ws.Rows(i).Delete abschnittEnde = abschnittEnde - 1 ' Aktualisiere abschnittEnde nach dem Löschen letzteZeile = letzteZeile - 1 ' Aktualisiere letzteZeile nach dem Löschen Loop Else i = i + 1 End If Loop abschnittBeginn = abschnittEnde + 1 Loop End Sub
Dieses Makro habe ich in die PERSONAL.XLSB eingefügt, so dass es immer zur Verfügung steht. Ich hoffe, das hilft hier dem einen oder anderen. ------------------ mit freundlichem Gruß aus der Burggemeinde Brüggen Lothar Boekels Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
      

 Beiträge: 2788 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 27. Feb. 2025 11:09 <-- editieren / zitieren --> Unities abgeben:          Nur für Lothar Boekels
Moin Laut Aussage Autodesk bewirkt die Stücklistenstruktur nur, dass in der "Nur Bauteile" Ansicht die Bestandteile von gekauften/unteilbaren Baugruppen nicht auftauchen und stattdessen die Baugruppe wie ein Bauteil angezeigt wird. Soweit ist das nachvollziehbar. Und die Empfehlung in der strukturierten ist, nach dem Export herauslöschen. Du könntest auch deine Stückliste selbst zeilenweise exportieren und dabei die nicht benötigten wegfiltern. Aber wenn deine Lösung schon fertig läuft, kein Grund nochmal von vorn anzufangen. ERP's müssen ja auch mit dem Ausgangsmaterial arbeiten. Da wir dann gern manuell drin herum korrigiert und eine erneute Übergabe schießt das alles ins Nirvana. Der Ansatz aus der CAD-BOM im ERP eine zweite Stückliste abzuleiten, umzustrukturieren und über Verlinkungen synchron zu halten ist mir noch nicht funktionierend untergekommen. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lothar Boekels Ehrenmitglied V.I.P. h.c. Dipl.-Ing. Maschinenbau und CAD-Trainer

 Beiträge: 3850 Registriert: 15.02.2001 DELL Precision 7520 Win11Pro-64 Inventor mit Vault Professional 2025 --------------------- Während man es aufschiebt, verrinnt das Leben. Lucius Annaeus Seneca (ca. 4 v. Chr - 65 n. Chr.)
|
erstellt am: 27. Feb. 2025 12:59 <-- editieren / zitieren --> Unities abgeben:         
so ist es. Mit dem Makro einfach mal auf den Auslöser drücken kann ja nicht falsch sein, da nur das gelöscht wird, was noch da ist. Wenn es schon weg ist, ist es halt schon weg. ------------------ mit freundlichem Gruß aus der Burggemeinde Brüggen Lothar Boekels Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |