Autor
|
Thema: Instanzen eines Produktes finden und löschen (785 mal gelesen)
|
Erich Mitglied Senior Consultant selbstständig
Beiträge: 198 Registriert: 03.10.2000 i7-9850H RAM 32,0 GB Nvidia Quadro T2000 Windows 7 Professional 64Bit
|
erstellt am: 04. Sep. 2021 22:43 <-- editieren / zitieren --> Unities abgeben:
Hallo ich möchte eine Exceliste erstellen in der alle Produkte eingetragen sind. (Erledigt) Was noch nicht erledigt ist - alle Mehrfachverbauungen = Instanzen sollen im Produkt als auch im Excelsheet nicht mehrvorhanden sein, also gelöscht sein. Wer kann mir hierzu einen Anschub geben. Würde mich freuen. Danke ------------------ mfg Erich 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. Sep. 2021 08:58 <-- editieren / zitieren --> Unities abgeben: Nur für Erich
Servus Erich Zum löschen in Catia würde ich die Products-Collection mit einer Schleife abarbeiten. Im groben so (kaum getestet). Code: Sub CATMain()Dim oDocument as Document Dim oRootProduct as Product Set oDocument = CATIA.ActiveDocument Set oRootProduct = oDocument.Product RemoveDoubleInstances oRootProduct.Products End Sub Sub RemoveDoubleInstances(oProducts as Products) Dim i as Integer Dim j as Integer Dim oTestInstance as Product Dim oInstance as Product for i = oProducts.Count to 2 Step -1 Set oTestInstance = oProducts.Item(i) for j = 1 to (i - 1) Set oInstance = oProducts.Item(j) If oInstance.ReferenceProduct.PartNumber = oTestInstance.ReferenceProduct.PartNumber then oProducts.Remove(i) exit for end if next next End Sub
Um nur die doppelten in Excel zu vermeiden würde ich beim auslesen der Instanzen diese gleich ausschließen. Also im Array/Collection/Dictonary gleich die schon vorhandenen auslassen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Erich Mitglied Senior Consultant selbstständig
Beiträge: 198 Registriert: 03.10.2000 i7-9850H RAM 32,0 GB Nvidia Quadro T2000 Windows 7 Professional 64Bit
|
erstellt am: 05. Sep. 2021 19:30 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd vielen Dank für Deinen Beitrag. Ich hab Dein Script auf Rekursiv umgebaut und es bleiben immer noch doppelte Instanzen übrig. Sub CATMain() Dim oDocument as Document Dim oRootProduct as Product Set oDocument = CATIA.ActiveDocument Set oRootProduct = oDocument.Product RemoveDoubleInstances oRootProduct.Products End Sub Sub RemoveDoubleInstances(oProducts) Dim i as Integer Dim j as Integer Dim oTestInstance as Product Dim oInstance as Product for i = 1 to oProducts.Count Set oTestInstance = oProducts.Item(i) 'Msgbox oProducts.Item(i).name On Error Resume next For j = 1 to (i-1) Set oInstance = oProducts.Item(j) If oInstance.ReferenceProduct.PartNumber = oTestInstance.ReferenceProduct.PartNumber then oProducts.Remove(i) exit for end if next Set oProductsUebergabe = oProducts.Item(i).Products RemoveDoubleInstances(oProductsUebergabe) next End Sub Vieleicht findest Du das Problem. ------------------ mfg Erich 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. Sep. 2021 19:36 <-- editieren / zitieren --> Unities abgeben: Nur für Erich
Servus Erich Warum hast du On Error Resume next drin? (verwende ich nur sparsam und für wenige Zeilen) Du bekommst keine Rückmeldung wo ein Fehler auftritt und suchst dir einen Wolf. Ich würde vor dem rekursiven Aufrufe prüfen, ob es Unterprodukte gibt (oProducts.Item(i).Products.Count <> 0) Gruß Bernd EDIT: gibt es oProducts.Item(i) dann noch? ggf wurde es ja zuvor entfernt ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Erich Mitglied Senior Consultant selbstständig
Beiträge: 198 Registriert: 03.10.2000 i7-9850H RAM 32,0 GB Nvidia Quadro T2000 Windows 7 Professional 64Bit
|
erstellt am: 05. Sep. 2021 19:42 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 05. Sep. 2021 19:46 <-- editieren / zitieren --> Unities abgeben: Nur für Erich
Servus Erich Und warum scheitert ReferenceProduct? Gibt es das Product noch? cgr-Modus? wrl oder cgr verbaut? .... ggf musst du dir was anderes zum Vergleichen der Instanzen suchen, wenn es die PartNumber nicht überall gibt. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Erich Mitglied Senior Consultant selbstständig
Beiträge: 198 Registriert: 03.10.2000 i7-9850H RAM 32,0 GB Nvidia Quadro T2000 Windows 7 Professional 64Bit
|
erstellt am: 05. Sep. 2021 20:47 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd Deine Vermutung kann ich ausschließen. Das Produkt muss generellen Inhalten entsprechen sonst könnte es nicht in einer Datenbank gespeichert werden. D.h. CGR können in einem Standard-Produkt nicht gespeichert und die Partnumber ist deswegen auch immer vorhanden. ------------------ mfg Erich 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. Sep. 2021 21:33 <-- editieren / zitieren --> Unities abgeben: Nur für Erich
Servus Erich Geht das Makro gar nicht, oder erst nach deiner Modifikation? Schlägt es an einer bestimmten Instanz fehlt? Was ist an der besonders? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Erich Mitglied Senior Consultant selbstständig
Beiträge: 198 Registriert: 03.10.2000 i7-9850H RAM 32,0 GB Nvidia Quadro T2000 Windows 7 Professional 64Bit
|
erstellt am: 06. Sep. 2021 13:49 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 06. Sep. 2021 15:50 <-- editieren / zitieren --> Unities abgeben: Nur für Erich
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 09. Sep. 2021 19:24 <-- editieren / zitieren --> Unities abgeben: Nur für Erich
Servus Erich Was mir noch eingefallen ist: ggf geht der Zugriff auf die Partnumber auch direkt über oInstance.PartNumber (also ohne ReferenceProduct) Steht in der Doku was dazu das sich an ReferenceProduct was in R30 verändert hat? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |