Autor
|
Thema: Vom Sruckturbaum Teile Zählen und die Gesamtstückzahl auslesen. (4088 mal gelesen)
|
K.Siebert Mitglied Tech Zeichner
Beiträge: 415 Registriert: 19.05.2007 Win XP Catia V5 R19 Catia V5 R24
|
erstellt am: 07. Mrz. 2009 15:08 <-- editieren / zitieren --> Unities abgeben:
Hallo liebe CAD.de Gemeinde, Ich sitze gerade an einem CATScript und stehe vor dem Problem das ich Elemente (Parts/Producte) im Sruckturbaum Zählen möchte und die Gesamtstückzahl mir ausgeben möchte aber wie. Hat jemand ein paar Codezeilen für mich ? Oder weiß jemand wo so was steht?
------------------ Sei Schlau bleib Dumm !!?!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 07. Mrz. 2009 15:25 <-- editieren / zitieren --> Unities abgeben: Nur für K.Siebert
Hallo, anbei eine Lösung für Excel. Für CATIA brauchst du die Ein- und Ausgabezeilen ändern.
Code: Sub StuliEintraegeZaehlen() Dim iAssyCount As Integer Dim i1stLoop As Integer Dim i2ndLoop As Integer Dim sSearchString As String Dim s2ndLoopString As String Dim iSearchStringCount As Integer Dim iStuliArrayCount As Integer Dim aAssyArray() 'input array Dim aStuliArray() 'output array iStuliArrayCount = 0 ReDim aStuliArray(1 To 3000, 1 To 2) 'Hat in Excel die letzte belegte Zeile gesucht iAssyCount = LastRowOfSheet(ActiveWorkbook.Sheets.Item("eingangsdaten"), "A", 1) aAssyArray = Sheets.Item("eingangsdaten").Range("A1:A" + CStr(iAssyCount)).Value 'Algorithmus: 'Es wird die aAssyArray durchgelaufen. Jede Zeile dieser Array wird in aStuliArry 'geschrieben, falls es noch nicht existiert. Falls ein Eintrag mit der selber Name 'schon vorhanden war, wird der Zähler (2. Spalte) inkrementiert 'Bei jeder Treffer wird der Eintrag aus der Originalarray gelöscht For i1stLoop = 1 To iAssyCount iSearchStringCount = 0 sSearchString = CStr(aAssyArray(i1stLoop, 1)) If Len(sSearchString) > 0 Then iSearchStringCount = iSearchStringCount + 1 iStuliArrayCount = iStuliArrayCount + 1 For i2ndLoop = i1stLoop + 1 To iAssyCount s2ndLoopString = CStr(aAssyArray(i2ndLoop, 1)) If Len(s2ndLoopString) > 0 Then If s2ndLoopString = sSearchString Then iSearchStringCount = iSearchStringCount + 1 aAssyArray(i2ndLoop, 1) = "" End If End If Next aStuliArray(iStuliArrayCount, 1) = sSearchString aStuliArray(iStuliArrayCount, 2) = iSearchStringCount End If Next 'Am Ende wird alles ausgegeben Sheets.Item("ergebnist_mit_stueckzahlen").Range("A1:B3000").Value = aStuliArray End Sub
Ist nicht die schönste Lösung, hatte aber funktioniert.Obere Teil ist für das Zählen und für eine Ebene. Ich würde z.B. die Dateinamen oder Partnumber in die Eingangsliste nehmen. Dafür (rekursives Einlesen der CATIA-Baum) gibt es hier schon einige Einträge. Ich hoffe, es hilft dir weiter. Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
K.Siebert Mitglied Tech Zeichner
Beiträge: 415 Registriert: 19.05.2007 Win XP Catia V5 R19 Catia V5 R24
|
erstellt am: 07. Mrz. 2009 19:21 <-- editieren / zitieren --> Unities abgeben:
|
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 08. Mrz. 2009 13:21 <-- editieren / zitieren --> Unities abgeben: Nur für K.Siebert
Hallo K.Sieber, anbei die ganze für CATIA adaptiert und etwas ausgiebiger kommentiert. Ich habe es in VBA unter R16 getestet. Die Arrays habe ich global deklariert und die zweidimensionale aus den alten auf zwei eindimensonale ersetzt. Code: Option Explicit'arrays fangen beim Index 0 an... Dim aAssyArray() As String 'input array Dim iAssyArrayCount As Integer Dim aStuliPartNumbers() As String 'output array, Benennung Dim aStuliCounts() As Integer 'output array, Anzahl Sub CATMain() Dim oActDoc As Document If CATIA.Documents.Count = 0 Then MsgBox ("Kein Dokument geöffnet!") Exit Sub End If Set oActDoc = CATIA.ActiveDocument If TypeName(oActDoc) <> "ProductDocument" Then MsgBox ("Kein Product geladen!") Exit Sub End If 'Array wird auf 100 Einträge initialisiert 'im RekursivDurchBaum ist die Redimensionierung vorhanden ReDim aAssyArray(100) iAssyArrayCount = 0 Dim oProduct As Product Set oProduct = oActDoc.Product Dim oProducts As Products Set oProducts = oProduct.Products 'Alle CATParts aus Baum ins globale Array sammeln RekursivDurchBaum oProducts If iAssyArrayCount > 0 Then 'Arraydimension zurechtschneiden ReDim Preserve aAssyArray(iAssyArrayCount - 1) StuliEintraegeZaehlen 'Ausgabe der Ergebnis ins Immedate Window (VBA) Dim i As Integer Dim sTemp As String For i = LBound(aStuliPartNumbers) To UBound(aStuliPartNumbers) sTemp = CInt(aStuliCounts(i)) & " St. von " & aStuliPartNumbers(i) Debug.Print sTemp 'hier kann auch ein Msgbox stehen ' MsgBox (sTemp) Next End If End Sub Function RekursivDurchBaum(oProducts As Products) Dim oProduct As Product Dim oRefProduct As Product Dim oRefDocument As Document For Each oProduct In oProducts If oProduct.Products.Count > 0 Then RekursivDurchBaum oProduct.Products Else Set oRefProduct = oProduct.ReferenceProduct Set oRefDocument = oRefProduct.Parent If TypeName(oRefDocument) = "PartDocument" Then 'Du bist an einen Part 'jetzt kannst du entscheiden, nach was du zählen willst: ' 'Dateiname ' aAssyArray(iAssyArrayCount) = oRefDocument.Name 'PartNumber aAssyArray(iAssyArrayCount) = oRefProduct.PartNumber iAssyArrayCount = iAssyArrayCount + 1 'dieser Block ist nur da, falls die Anzahl der Products über 100 kommen sollte If UBound(aAssyArray) <= iAssyArrayCount Then ReDim Preserve aAssyArray(iAssyArrayCount + 20) End If End If End If Next End Function Sub StuliEintraegeZaehlen() Dim i1stLoop As Integer Dim i2ndLoop As Integer Dim iSearchStringCount As Integer Dim sSearchString As String Dim iStuliArrayCount As Integer Dim s2ndLoopString As String ReDim aStuliPartNumbers(20) 'output array, Benennung ReDim aStuliCounts(20) 'output array, Anzahl iStuliArrayCount = 0 'Algorithmus: 'Es wird die aAssyArray durchgelaufen. Jede Zeile dieser Array wird in aStuli* 'geschrieben, falls es noch nicht existiert. Falls ein Eintrag mit der selber Name 'schon vorhanden war, wird der Zähler (2. Spalte) inkrementiert 'Bei jeder Treffer wird der Eintrag aus der Originalarray gelöscht 'habe im Vergleich zur Vorgänger lieber zwei Eindimensionale Arrays genommen, somit sind die 'einfacher zu handhaben 'äußere Schleife For i1stLoop = 0 To iAssyArrayCount - 1 iSearchStringCount = 0 sSearchString = CStr(aAssyArray(i1stLoop)) 'nach diesen wird weitergesucht If Len(sSearchString) > 0 Then 'also Eintrag im Original noch nicht gelöscht iSearchStringCount = iSearchStringCount + 1 'ein Eintrag haben wir jedenfalls schon gefunden 'innere Schleife For i2ndLoop = i1stLoop + 1 To iAssyArrayCount - 1 s2ndLoopString = CStr(aAssyArray(i2ndLoop)) If Len(s2ndLoopString) > 0 Then 'also Eintrag im Original noch nicht gelöscht If s2ndLoopString = sSearchString Then 'wir haben noch ein Exemplar gefunden iSearchStringCount = iSearchStringCount + 1 aAssyArray(i2ndLoop) = "" 'OriginalEintrag löschen End If End If Next 'nachdem die Gesamtstückzahl ermittelt wurde, wird es ins Ausgangsarray geschreiben aStuliPartNumbers(iStuliArrayCount) = sSearchString aStuliCounts(iStuliArrayCount) = iSearchStringCount 'wieder der Array Dimensionscheck iStuliArrayCount = iStuliArrayCount + 1 If UBound(aStuliPartNumbers) <= iStuliArrayCount Then ReDim Preserve aStuliPartNumbers(iStuliArrayCount + 5) ReDim Preserve aStuliCounts(iStuliArrayCount + 5) End If End If Next If iStuliArrayCount > 0 Then 'Arraydimension zurechtschneiden ReDim Preserve aStuliPartNumbers(iStuliArrayCount - 1) ReDim Preserve aStuliCounts(iStuliArrayCount - 1) End If End Sub
Das müsste es tun. Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
K.Siebert Mitglied Tech Zeichner
Beiträge: 415 Registriert: 19.05.2007 Win XP Catia V5 R19 Catia V5 R24
|
erstellt am: 09. Mrz. 2009 10:50 <-- editieren / zitieren --> Unities abgeben:
|
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 05. Jul. 2016 13:59 <-- editieren / zitieren --> Unities abgeben: Nur für K.Siebert
Hallo Zoltan, dein Beitrag ist ja schon ne Weile her. Hoffe du bist noch aktiv hier im Forum. Wie könnte man deaktivierte Parts und Produkte aus der Zählung ausschließen? ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 05. Jul. 2016 14:55 <-- editieren / zitieren --> Unities abgeben: Nur für K.Siebert
|
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 06. Jul. 2016 07:26 <-- editieren / zitieren --> Unities abgeben: Nur für K.Siebert
Moin Bernd, danke für den Link. hab das ganze jetzt mal eingebunden. Funktioniert auch,leider werden dann alle folgenden Produkte nicht mehr gezählt. Kannst du mir unter die Arme greifen? Code: Function RekursivDurchBaum(oProducts As Products) Dim Paras As Parameters Dim oProduct As Product Dim oRefProduct As Product Dim oRefDocument As Document For Each oProduct In oProducts If oProduct.Products.Count > 0 Then RekursivDurchBaum oProduct.Products Else Set Paras = oProduct.Parameters If Paras.Item(Paras.Count).ValueAsString = "false" Then Exit Function 'MsgBox "Deactivated" End If Set oRefProduct = oProduct.ReferenceProduct Set oRefDocument = oRefProduct.Parent If TypeName(oRefDocument) = "PartDocument" Then 'Du bist an einen Part 'jetzt kannst du entscheiden, nach was du zählen willst: ' 'Dateiname ' aAssyArray(iAssyArrayCount) = oRefDocument.Name 'PartNumber aAssyArray(iAssyArrayCount) = oRefProduct.PartNumber iAssyArrayCount = iAssyArrayCount + 1 'dieser Block ist nur da, falls die Anzahl der Products über 100 kommen sollte If UBound(aAssyArray) <= iAssyArrayCount Then ReDim Preserve aAssyArray(iAssyArrayCount + 20) End If End If End If Next End Function
------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 06. Jul. 2016 09:29 <-- editieren / zitieren --> Unities abgeben: Nur für K.Siebert
Servus Uwe Du musst dir an der Stelle an dem du den Parameter abfragst den String des Parameters zusammensetzen (bitte mal im Watchfenster prüfen). Im groben (ungetestet) müsste es so sein: Code:
Set Paras = oProducts.Parent.Parameters StrParameter = oProducts.Parent.Name & "\" & oProduct.Name & "\Component Activation State" If Not Paras.Item(StrParameter) Then Exit function end if
Achtung der Name des Parameters ist abhängig von der Spracheinstellung. ggf kann es in einer Componente Probleme geben Gruß Bernd Edit: Die Parameter sind in der enstprechenden Baugruppe/Comonente angesiedelt und nicht im Product 8Unterbaugruppe/Einzelteil) selbst. Ich hab das oben im Code ergänzt. ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 06. Jul. 2016 14:23 <-- editieren / zitieren --> Unities abgeben: Nur für K.Siebert
Hallo Bernd, habe das in dem Beitrag so verstanden das Code: If Paras.Item(Paras.Count).ValueAsString = "false" Then
Eindeutiger ist. Zitat: das funktioniert natürlich auch, aber der Zugriff ist dann nicht eindeutig. Wenn in der Parameter-Collection des Products mehrere SubProducts/Parts stecken, dann erfolgt der Zugriff immer auf den ersten Parameter der gefunden wird. Eindeutig wird es erst, wenn man den gesamten Pfad angibt, oder eben aber mit count. So kann ich bei der Rekursion immer das aktuelle Produkt abfragen.
Eigentlich funktioniert es wohl auch. Leider werden die Inhalte von deaktivierten Produkten trotzdem gezählt. Habe deine Variante auch getestet, aber leider mit folgender Fehlermeldung. Code: Object doesn´t support this property or method
in folgender Zeile. Code: If Not Paras.Item(StrParameter) Then
------------------ Gruß Uwe Auch Catia ist nur ein Mensch! [Diese Nachricht wurde von moppesle am 06. Jul. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 06. Jul. 2016 14:35 <-- editieren / zitieren --> Unities abgeben: Nur für K.Siebert
Servus Uwe Kann sein dass bei dem Code schon der richtige Parameter ausgewertet wurde (ich hab es nicht getestet), aber das "Exit Function" ist dort falsch. Du musst nicht die Funktion beenden, sondern den nächsten Aufruf der Schleife auslösen (zB "Next oProduct") Gruß Bernd EDIT: In meinem Code ist ein Fehler: es wird nicht der Wert des Parameters angesprochen: Paras.Item(StrParameter).Value ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 06. Jul. 2016 20:59 <-- editieren / zitieren --> Unities abgeben: Nur für K.Siebert
Hallo Bernd, hab das so weit, das in einem Produkt die Parts richtig gezählt werden. Wenn nun ein Produkt hinzukommt bleibt das Makro mit Automations error stehen.
Code: If Paras.Item(StrParameter).Value Then
Code: Function RekursivDurchBaum(oProducts As Products) Dim Paras As Parameters Dim oProduct As Product Dim oRefProduct As Product Dim oRefDocument As Document Dim StrParameter 'As Parameter For Each oProduct In oProducts If oProduct.Products.Count > 0 Then RekursivDurchBaum oProduct.Products Else Set Paras = oProducts.Parent.Parameters StrParameter = oProducts.Parent.Name & "\" & oProduct.Name & "\Component Activation State" 'If Not Paras.Item(StrParameter).Value Then If Paras.Item(StrParameter).Value Then Set oRefProduct = oProduct.ReferenceProduct Set oRefDocument = oRefProduct.Parent If TypeName(oRefDocument) = "PartDocument" Then 'PartNumber aAssyArray(iAssyArrayCount) = oRefProduct.PartNumber iAssyArrayCount = iAssyArrayCount + 1 End If Else 'dieser Block ist nur da, falls die Anzahl der Products über 100 kommen sollte If UBound(aAssyArray) <= iAssyArrayCount Then ReDim Preserve aAssyArray(iAssyArrayCount + 20) End If End If End If Next End Function
hast du ne Idee?
------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 07. Jul. 2016 08:09 <-- editieren / zitieren --> Unities abgeben: Nur für K.Siebert
Servus Uwe Ändere mal folgende Zeile: Code: If oProduct.Products.Count > 0 Then RekursivDurchBaum oProduct.ReferenceProduct.Products Else
Erklärung: Beim Pfad benötigst du hier für die Unterbaugruppe den Namen und nicht den Exemplarnamen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 07. Jul. 2016 08:43 <-- editieren / zitieren --> Unities abgeben: Nur für K.Siebert
Servus Bernd, danke dir nun läufts durch. Leider werden aber Parts die sich in einem Produkt befinden das deaktiviert ist mitgezählt. Könnte man das beheben? ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 07. Jul. 2016 08:52 <-- editieren / zitieren --> Unities abgeben: Nur für K.Siebert
Servus Indem du "RekursivDurchBaum" für die Unterbaugruppe erst aufrufst nachdem du geprüft hast ob die Baugruppe aktiv ist (über den Parameter). Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 07. Jul. 2016 09:12 <-- editieren / zitieren --> Unities abgeben: Nur für K.Siebert
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 07. Jul. 2016 13:15 <-- editieren / zitieren --> Unities abgeben: Nur für K.Siebert
Servus Uwe Vermutlich reicht es wenn du die Zeilen "If oProduct.Products.Count > ..." in die Schleife "If Paras.Item(StrParameter).Value Then ..." verschiebst. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 08. Jul. 2016 08:52 <-- editieren / zitieren --> Unities abgeben: Nur für K.Siebert
Hallo Bernd, du kennst ja mein Programmierkenntnisse. Funktioniert nicht. Liegt aber wohl an mir. Habe das folgendermaßen eingesetzt. bleibt aber wiederum in der Zeile:
Code: If Paras.Item(StrParameter).Value Then
hängen. Code: Function RekursivDurchBaum(oProducts As Products) Dim Paras As Parameters Dim oProduct As Product Dim oRefProduct As Product Dim oRefDocument As Document Dim StrParameter 'As Parameter For Each oProduct In oProducts If oProduct.Products.Count > 0 Then RekursivDurchBaum oProduct.Products Else Set Paras = oProducts.Parent.Parameters StrParameter = oProducts.Parent.Name & "\" & oProduct.Name & "\Component Activation State" 'If Not Paras.Item(StrParameter).Value Then If oProduct.Products.Count > 0 Then RekursivDurchBaum oProduct.Products End If If Paras.Item(StrParameter).Value Then Set oRefProduct = oProduct.ReferenceProduct Set oRefDocument = oRefProduct.Parent If TypeName(oRefDocument) = "PartDocument" Then 'PartNumber aAssyArray(iAssyArrayCount) = oRefProduct.PartNumber iAssyArrayCount = iAssyArrayCount + 1 End If Else 'dieser Block ist nur da, falls die Anzahl der Products über 100 kommen sollte If UBound(aAssyArray) <= iAssyArrayCount Then ReDim Preserve aAssyArray(iAssyArrayCount + 20) End If End If End If Next End Function
------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 08. Jul. 2016 09:07 <-- editieren / zitieren --> Unities abgeben: Nur für K.Siebert
Servus Uwe Der Aufruf der Rekursion ist an der falschen Stelle und das "ReferenceProduct" fehlt wieder. Zum Test ist es besser eine kleine Testbaugruppe zu erstellen (zB nur mit dem Sonderfall) und mit dem Formeleditor prüfen wie die Parameter heißen. Probier es mal so (ungetestet): Code: Function RekursivDurchBaum(oProducts As Products) Dim Paras As Parameters Dim oProduct As Product Dim oRefProduct As Product Dim oRefDocument As Document Dim StrParameter 'As Parameter 'Schleife über alle Products For Each oProduct In oProducts 'Parameter Activation-State prüfen Set Paras = oProducts.Parent.Parameters 'Name des Paramters zusammensetzen.ACHTUNG Name ist sprachabhängig!! StrParameter = oProducts.Parent.Name & "\" & oProduct.Name & "\Component Activation State" 'Wenn der Parameter true ist ist das Teil/Baugruppe aktiv If Paras.Item(StrParameter).Value Then 'Bei einer Komponente oder Unterbaugruppe Rekursion starten If oProduct.Products.Count > 0 Then RekursivDurchBaum oProduct.ReferenceProduct.Products End If 'Part oder CATProduct Set oRefProduct = oProduct.ReferenceProduct Set oRefDocument = oRefProduct.Parent If TypeName(oRefDocument) = "PartDocument" Then 'PartNumber in Array schreiben aAssyArray(iAssyArrayCount) = oRefProduct.PartNumber iAssyArrayCount = iAssyArrayCount + 1 End If Else 'dieser Block ist nur da, falls die Anzahl der Products über 100 kommen sollte If UBound(aAssyArray) <= iAssyArrayCount Then ReDim Preserve aAssyArray(iAssyArrayCount + 20) End If End If Next End Function
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 08. Jul. 2016 10:20 <-- editieren / zitieren --> Unities abgeben: Nur für K.Siebert
Danke dir Bernd. Funktioniert. Testbaugruppe hatte ich, auf den Dreh bin ich schon gekommen. Leider haperts bei mir der Logik des strukturellen Aufbaus. Dazu Programmiere ich zu wenig. Habe halt in der Regel ein anderes Geschäft zu tun. ------------------ Gruß Uwe
Auch Catia ist nur ein Mensch! [Diese Nachricht wurde von moppesle am 08. Jul. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |