| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
|
Autor
|
Thema: Bauteilanzahl in asm auslesen (3421 mal gelesen)
|
Scorbilein Mitglied Konstrukteur
 Beiträge: 6 Registriert: 08.08.2012 Windows 7 x64 SP2, Inventor 2012 Professional
|
erstellt am: 25. Sep. 2012 11:32 <-- editieren / zitieren --> Unities abgeben:         
Einen schönen guten morgen. Ich habe folgendes Problem und es wäre sehr nett eine kl. Hilfestellung oder einen Ansatz zu bekommen um einen Durchbruch zu erlangen. Möchte eine eigene csv Liste aus der Assembly Umgebung von Inventor per Makro generieren. Habe dazu benutzerdefinierte IProperties in die Bauteile geschrieben. Erstens eine Schleife erstellt die mir filtert ob es sich um ein ipt oder iam in der Hauptbaugruppe handelt, dann schreibe ich ein CustomiProperty in das Bauteil (0 oder 1). 0 für ipt und 1 für iam. Das zweite CustomiProperty schreibt den Namen der übergeordneten Assembly in das Bauteil/Unterbaugruppe. Dies brauche ich um in Access die Bauteile/Unterbaugruppen korrekt zu einer übergeordneten Baugruppe zuzuweisen und somit die Inventorstruktur zu erhalten. Soweit so gut. Nun muss ich die csv Datei erstellen. Ich erstelle eine .txt Datei. Diese fülle ich mit den CustomiProperties. Diese kann ich noch ohne Probleme. Das Problem oder meine gedankliche Barriere liegt jedoch an dem Zusammenfassen gleicher Bauteile und das zählen derer Anzahl. Ich möchte quasi nicht gleiche Bauteile oder Baugruppen doppelt oder öfter in der csv datei enthalten haben. Ob Bauteile gleich sind unterscheide ich über den Titel. Grüße Alexander Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Scorbilein Mitglied Konstrukteur
 Beiträge: 6 Registriert: 08.08.2012 Windows 7 x64 SP2, Inventor 2012 Professional
|
erstellt am: 25. Sep. 2012 12:53 <-- editieren / zitieren --> Unities abgeben:         
1. Ansatz: Auslesen der Bauteilanzahl Array erstellen mit Anzahl an Zeilen gleich der Bauteilanzahl Titel in das Array schreiben. zweites array erstellen (Länge des ersten arrays) 1.Datensatz vom 1. Array Wert einlesen. 2.Datensatz vom 1. Array mit 1. Datensatz vergleichen. wenn gleich =>nächsten Datensatz wählen wenn ungleich => Datensatz in 2. Array schreiben wenn man alle Datensätze des ersten Arrays durchgearbeitet hat die Anzahl des 2.Array vom ersten abziehen => Anzahl an gleichen Bauteilen des 1. Datensatzes versuche das mal umzusetzen falls jemand einen besseren Vorschlag hat, bitte schreiben. Bin sehr dankbar für jede Hilfe mfg Alex Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik, Master Eng. IT-Security & Forensic
      

 Beiträge: 2912 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 25. Sep. 2012 17:20 <-- editieren / zitieren --> Unities abgeben:          Nur für Scorbilein
Hi Ich würde direkt in die Stückliste gehen und die Infos von dort holen. Vorteil: Stückzahl, Teilezusammenfassung und auch Phantombaugruppen, Unteilbare ect. werden berücksichtigt. Deine iProps wären dann mM nicht erforderlich. Jede Stücklistenzeile hat "Kindzeilen" wenn es eine Baugruppe mit Bauteilen ist. Über die ComponentDefinition der BOMRow kommst du an das referenzierte Dokument, also den Namen der Baugruppe/ des Bauteiles. Das Ganze mit Rekursion und fertig. Wie schreibst du dein Textfile? Zeilenweise? Dann könnte man das direkt mit einbinden. Welche Infos pro Exportzeile brauchst du genau? Ich grad etwas in Eile, kann mir das später aber mal genauer ansehen. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik, Master Eng. IT-Security & Forensic
      

 Beiträge: 2912 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 25. Sep. 2012 21:03 <-- editieren / zitieren --> Unities abgeben:          Nur für Scorbilein
So, da bin ich wieder. Mal als Diskussionsgrundlage: Code: Private Sub ExportBOMToCSV()If Not ThisApplication.ActiveDocument.DocumentType = kAssemblyDocumentObject Then MsgBox "Funktion nur in Baugruppen möglich." Exit Sub End If Dim sFileName As String sFileName = "C:\Temp\Export.csv" Dim oAssDoc As AssemblyDocument Set oAssDoc = ThisApplication.ActiveDocument Dim oBOM As BOM Set oBOM = oAssDoc.ComponentDefinition.BOM Dim oBOMRow As BOMRow Dim sParentDoc As String Dim iCount As Integer Dim sPartName As String Dim oDoc As Document Dim sLine As String For Each oBOMRow In oBOM.BOMViews.Item("Strukturiert").BOMRows Set oDoc = oBOMRow.ComponentDefinitions.Item(1).Document iCount = oBOMRow.TotalQuantity sPartName = oDoc.PropertySets.Item("Inventor User Defined Properties").Item("Bauteilnummer").Value sParentDoc = oAssDoc.PropertySets.Item("Inventor User Defined Properties").Item("Bauteilnummer").Value 'Debug 'MsgBox iCount & " x " & sPartName & " in " & sParentDoc sLine = iCount & ";" & sPartName & ";" & sParentDoc TextFileAppendLine sFileName, sLine If Not oBOMRow.ChildRows Is Nothing Then Call processAllChildRows(oBOMRow, oDoc, sFileName) End If Next Close #F End Sub Private Sub processAllChildRows(ByVal oBOMRow As BOMRow, ByVal oParentDoc As AssemblyDocument, ByRef sFileName As String) Dim oChildBOMRow As BOMRow Dim sLine As String For Each oChildBOMRow In oBOMRow.ChildRows Set oDoc = oChildBOMRow.ComponentDefinitions.Item(1).Document iCount = oBOMRow.TotalQuantity sPartName = oDoc.PropertySets.Item("Inventor User Defined Properties").Item("Bauteilnummer").Value sParentDoc = oParentDoc.PropertySets.Item("Inventor User Defined Properties").Item("Bauteilnummer").Value 'Debug 'MsgBox iCount & " x " & sPartName & " in " & sParentDoc sLine = iCount & ";" & sPartName & ";" & sParentDoc TextFileAppendLine sFileName, sLine If Not oChildBOMRow.ChildRows Is Nothing Then Call processAllChildRows(oChildBOMRow, oDoc, sFileName) End If Next End Sub ' Einzelne Zeile an eine Textdatei anhängen ' sFilename: vollständiger Name der Datei ' sLine : Inhalt, der gespeichert werden soll ' =============================================== Public Sub TextFileAppendLine(ByVal sFileName As String, ByVal sLine As String) Dim F As Integer ' Datei zum "Anhängen" von Daten öffnen ' und Textzeile ans Ende anfügen F = FreeFile Open sFileName For Append As #F Print #F, sLine Close #F End Sub
------------------ MfG Ralf [Diese Nachricht wurde von rkauskh am 25. Sep. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Scorbilein Mitglied Konstrukteur
 Beiträge: 6 Registriert: 08.08.2012 Windows 7 x64 SP2, Inventor 2012 Professional
|
erstellt am: 26. Sep. 2012 17:56 <-- editieren / zitieren --> Unities abgeben:         
Hallo Ralf, danke schon einmal für deine Antwort. Den Quellcode von dir schau ich mir noch an, da dieser sicherlich einfacher zu verstehen ist als meiner und ich denk sicherlich für spätere Zwecke gebrauchen kann. Das Textfile möchte ich Zeilenweise schreiben, genau. Infos pro Exportzeile sind: Positionsnummer Stückanzahl der Bauteile Norm/ Teilenummer = Bauteilnummer Lieferant Material und dann halt meine 2 iProp mit Unterscheidung ob iam oder ipt und das Andere das den Namen der Baugruppe enthält in dem sich die Teile befinden. Hänge noch meinen "FAST" fertigen code an. Es fehlt eigentlich nur mehr das die txt-Datei oder csv-Datei den Namen oder eine bestimmte Nummer bekommt und das der Pfad gleich der Projektpfad des Inventordokuments ist. Habe auch einen Teil von Ralfs Code reingepackt. Die zweite Datei ist das Ergebnix was mein Programm ausspuckt  _______________ mfg Alexander Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
Scorbilein Mitglied Konstrukteur
 Beiträge: 6 Registriert: 08.08.2012 Windows 7 x64 SP2, Inventor 2012 Professional
|
erstellt am: 03. Okt. 2012 15:40 <-- editieren / zitieren --> Unities abgeben:         
|