Как прикрепить вспомогтальный объект спецификации к базовому

Автор ink, 12.11.09, 20:24:48

« предыдущая - следующая »

0 Пользователей и 1 гость просматривают эту тему.

ink

Проблема такая. Необходимо создать вспомогательный объект спецификации после определенного базового объекта. Спецификация групповая (вариант А), объекты размещены поблочно.
Последовательность команд (приблизительная)

ksSpcObjectCreate(0, 0, 15,  0, numb, 1);
ksSetSpcObjectColumnText(columnType, ispoln, block, s);
ksSpcObjectEnd();

где numb - номер базового объекта, к которому необходимо прикрепить вспомогательный.
не работает нужным образом, объект спецификации создается в конце постоянной части спецификации.
Отмечу, что, если в спецификации не задано поблочное отображение объектов СП, все работает.

Заранеее благодарен за помощь.

Вират Лакх

Задача почти такая же - создать вспомогательный объект спецификации после последнего базового объекта на API7.

from win32com.client import Dispatch
iApplication = Dispatch('Kompas.Application.7')
iDocument = iApplication.ActiveDocument
Description = iDocument.SpecificationDescriptions.Active
SpcObjects = Description.BaseObjects
SpcObject = SpcObjects.Item(len(SpcObjects)-1)
print SpcObject.Columns.Column(5, 1, 0).Text.Str
SpcObjectSection = SpcObject.Section
NewObject = Description.CommentObjects.Add(SpcObjectSection)
NewObject.Columns.Column(5, 1, 0).Text.Str = 'bbb'
print SpcObject.CommentObjects.Count
print SpcObject.CommentObjects.Attach(NewObject)
print SpcObject.CommentObjects.Count
print SpcObject.CommentObjects.Item(0).Columns.Column(5, 1, 0).Text.Str
NewObject.Update()
print NewObject.BaseObject #.Columns.Column(5, 1, 0).Text.Str
print Description.CommentObjects.Item(Description.CommentObjects.Count-1).Columns.Column(5, 1, 0).Text.Str
print Description.CommentObjects.Item(Description.CommentObjects.Count-1).BaseObject

В данном коде берем последний базовый объект. В его разделе создаем вспомогательный. В коллекцию вспомогательных объектов того последнего базового объекта цепляем этот созданный вспомогательный. В этой коллекции у базового объекта он прописывается, но у самого вспомогательного объекта не появляется информация о базовом объекте, к которому он прицеплен. В итоге этот вспомогательный объект создается и остается висеть в самом начале раздела. А должен быть в конце.
Если вручную компасом сдвинуть вспомогательный под базовый, то тогда отображает, к какому базовому объекту он подключен.
Как обходной путь можно попробовать через API5 как в сообщении выше...

Вират Лакх

Работа над ошибками:

from win32com.client import Dispatch
Description = Dispatch('Kompas.Application.7').ActiveDocument.SpecificationDescriptions.Active
SpcObjects = Description.BaseObjects
SpcObject = SpcObjects.Item(len(SpcObjects)-1)
NewObject = Description.CommentObjects.Add(SpcObject.Section)
NewObject.Update()
SpcObject.CommentObjects.Attach(NewObject)
SpcObject.Update()

1) Нужно было сначала полностью создать вспомогательный объект.
2) Только потом его привязывать к базовому объекту.
3) После привязки к базовому объекту нужно было этот базовый Update

333

Может потребоваться еще установка номера блока ISpecificationCommentObject::BlockNumber