Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Bauteilanzahl in asm auslesen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Bauteilanzahl in asm auslesen (3222 mal gelesen)
Scorbilein
Mitglied
Konstrukteur

Sehen Sie sich das Profil von Scorbilein an!   Senden Sie eine Private Message an Scorbilein  Schreiben Sie einen Gästebucheintrag für Scorbilein

Beiträge: 6
Registriert: 08.08.2012

Windows 7 x64 SP2,
Inventor 2012 Professional

erstellt am: 25. Sep. 2012 11:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Sehen Sie sich das Profil von Scorbilein an!   Senden Sie eine Private Message an Scorbilein  Schreiben Sie einen Gästebucheintrag für Scorbilein

Beiträge: 6
Registriert: 08.08.2012

Windows 7 x64 SP2,
Inventor 2012 Professional

erstellt am: 25. Sep. 2012 12:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 25. Sep. 2012 17:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Scorbilein 10 Unities + Antwort hilfreich

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




Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 25. Sep. 2012 21:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Scorbilein 10 Unities + Antwort hilfreich

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

Sehen Sie sich das Profil von Scorbilein an!   Senden Sie eine Private Message an Scorbilein  Schreiben Sie einen Gästebucheintrag für Scorbilein

Beiträge: 6
Registriert: 08.08.2012

Windows 7 x64 SP2,
Inventor 2012 Professional

erstellt am: 26. Sep. 2012 17:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


CSVerstellen.txt


testcsv.txt

 
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

Sehen Sie sich das Profil von Scorbilein an!   Senden Sie eine Private Message an Scorbilein  Schreiben Sie einen Gästebucheintrag für Scorbilein

Beiträge: 6
Registriert: 08.08.2012

Windows 7 x64 SP2,
Inventor 2012 Professional

erstellt am: 03. Okt. 2012 15:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Quelltext-CSVerstellenV1.1.txt

 
Änderung da Bauteilzählen nicht richtig funktioniert hat

mfg alex

------------------
mfg Scorb

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz