Вот, пробую (копирую сразу с Delphi)
Создал сборку, в ней подсборку, в ней подсборку, в ней подсборку

сохранил.
Проверяю, для первого уровня входимости:
- Код: Выделить всё
procedure TfmTest.Button1Click(Sender: TObject);
var ctCatia, ctProduct: Variant;
begin
try
ctCatia := GetActiveOleObject('Catia.Application');
ctProduct := ctCatia.ActiveDocument.Product.Products.Item(1);
ctProduct.Name := 'New_Product_Name';
showmessage(ctProduct.Name)
except
showmessage('Ошибка')
end;
end;
Всё работает
Перезагружаю сборку. Проверяю для второго уровня входимости, т.е. в коде заменяю
ctProduct := ctCatia.ActiveDocument.Product.Products.Item(1);
на
ctProduct := ctCatia.ActiveDocument.Product.Products.Item(1).Products.Item(1);
после этого строка
ctProduct.Name := 'New_Product_Name';
заменять Name перестаёт. Причём отрабатывает, не генерируя исключение. Типа всё ОК, переименовал.
- Код: Выделить всё
procedure TfmTest.Button1Click(Sender: TObject);
var ctCatia, ctProduct: Variant;
begin
try
ctCatia := GetActiveOleObject('Catia.Application');
// ctProduct := ctCatia.ActiveDocument.Product.Products.Item(1); // если раскомментировать - дальнейшее присвоение РАБОТАЕТ
// ctProduct := ctCatia.ActiveDocument.Product.Products.Item(1).Products.Item(1); // если раскомментировать - дальнейшее присвоение НЕ работает
// ctProduct := ctCatia.ActiveDocument.Product.Products.Item(1).Products.Item(1).Products.Item(1); // если раскомментировать - дальнейшее присвоение НЕ работает
ctProduct.Name := 'New_Product_Name';
showmessage(ctProduct.Name)
except
showmessage('Ошибка')
end;
end;
Примечательно, что, несмотря на тот факт, что ctProduct.Name переименован не был - сборка в Catia помечена, как "изменённая", т.е. при попытке открыть сборку заново, или закрыть сеанс - спрашивает, сохранять ли изменения.
Следует заметить, что если заместо Name проводить операции с PartNumber или Definition - всё превосходно работает! Проблема только с Instance Name
где могут быть грабли? Всё перерыл! Работа встала!
