Спецификация Компас : комментарии в конце документа

Автор firsttimer, 28.05.18, 15:05:15

« назад - далее »

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

firsttimer

Всем привет!
Создаю спецификацию *.spw в Компасе программно:
foreach (var item in Items) { SpecificationBaseObject newObject = spbo.Add(specificationPart, 0.0); ...  } и т.д. Всё замечательно работало до момента, когда понадобилось добавлять нестандартные секции в конец документа. Пробовал создавать объекты типа SpecificationCommentObject (описания в Интернете не нашёл) в последнем существующем разделе - комментарии создаются, но оказываются первыми в данном разделе, впереди созданных ранее объектов SpecificationBaseObject. Автосортировку отключать тоже не хочу (разве что это будет единственная возможность). Наставьте, пожалуйста, на путь истинный или ткните в документацию :)

ТрындецЪ

В каком разделе создаёте вспомогательные объекты? Может, в номере подраздела дело?

firsttimer

Цитата: ТрындецЪ от 28.05.18, 15:09:35
В каком разделе создаёте вспомогательные объекты? Может, в номере подраздела дело?
В последнем существующем, то есть если нет комплектов - то в материалах, если нет и их - то в прочих, и т.д. Подозреваю, что что-то делаю неверно.

ТрындецЪ

#3
Присвойте ему номер следующего подраздела, и тогда будет в конец вставляться.
+ Благодарностей: 1

333

Нужно комментарии прицепить к последнему базовому объекту спецификации
см ISpecificationBaseObject::CommentObjects::Attach

Но правильнее было бы в стиль добавить нужные разделы
+ Благодарностей: 2

firsttimer

Цитата: ТрындецЪ от 28.05.18, 15:51:34
Присвойте ему номер следующего подраздела, и тогда будет в конец вставляться.
Пробовал, если просто присваивать нужный номер Subsection, то ничего не происходит. Возможно, сработает вариант через ksSpcObjectCreate, не пробовал, я работаю через SpecificationBase/CommentObjects.Add()

Цитата: 333 от 28.05.18, 16:18:24
Нужно комментарии прицепить к последнему базовому объекту спецификации
см ISpecificationBaseObject::CommentObjects::Attach
Вот, это сработало сразу, не досмотрел такое свойство у BaseObject

Цитата: 333 от 28.05.18, 16:18:24
Но правильнее было бы в стиль добавить нужные разделы
Идеологически, наверное, да, но у нас это будет "из пушки по воробьям" - один случай на несколько сотен

Всем спасибо, проблема решена!

dosart

Чтобы не плодить новую тему, задам вопрос тут. Как можно "ходить" по столбцу. Например, как "обойти" все ячейки, который входят в столбец "Наименование"?

dosart

Как можно получить базовые объекты из раздела?

ТрындецЪ

Цитата: dosart от 30.05.18, 21:49:00
Как можно "ходить" по столбцу. Например, как "обойти" все ячейки, который входят в столбец "Наименование"?
Получить полный список объектов спецификации. Порядок и состав списка соответствует визуальному отображению данного описания спецификации:
objects = iSpecificationDescription.Objects

Далее перебирать все объекты и для каждого:
iSpecificationColumns = iSpecificationObject.Columns
iSpecificationColumn = iSpecificationColumns.Column(5, 1, 0)   # 5 - колонка "Наименование"
iText = iSpecificationColumn.Text
text = iText.Str                                                                               # текст из колонки

Цитата: dosart от 31.05.18, 14:19:18
Как можно получить базовые объекты из раздела?
Раздел - это свойство объекта спецификации. Только перебрав все базовые объекты и посмотрев у них это свойство.
iSpecificationBaseObjects = iSpecificationDescription.BaseObjects   # Интерфейс коллекции базовых объектов спецификации
+ Благодарностей: 1

333

Для стандартных колонок можно использовать перечисление
см ksSpecificationColumnTypeEnum::ksSColumnName = 5
+ Благодарностей: 1

dosart

ТрындецЪ если перебирать все базовые объекты, то видно, что у них есть свойство Section. Однако, это свойство - целое число.
Если открыть спецификацию в Компасе, и выделить базовый объкт мышью, то видно, что он знает, к какому разделу он принадлежит. Причём, раздел - строка. Как мне получить эту строку?

333


333

ISpecificationStyle::Sections
Дальше нужно смотреть стиль  ISpecificationSectionStyle::name
+ Благодарностей: 1

333

+ Благодарностей: 1

Slaviation

ЦитироватьПробовал создавать объекты типа SpecificationCommentObject (описания в Интернете не нашёл) в последнем существующем разделе - комментарии создаются, но оказываются первыми в данном разделе, впереди созданных ранее объектов SpecificationBaseObject.

Посмотрите прикрепленный пример (сделан в PyKompasMacro).
В нем создается базовый объект спецификации в разделе "Детали" и к нему прикрепляется вспомогательный объект спецификации, который не будет оказываться впереди созданного ранее.
+ Благодарностей: 2

ТрындецЪ

#15
Цитата: Slaviation от 01.06.18, 07:50:15
Посмотрите прикрепленный пример (сделан в PyKompasMacro).
В нем создается базовый объект спецификации в разделе "Детали" и к нему прикрепляется вспомогательный объект спецификации, который не будет оказываться впереди созданного ранее.
В К16.1 всё перемещается без проблем. Я вообще никогда не видел вспомогательных ОС с описанными свойствами.
Upd: Или я неверно понял смысл. Скорее всего, речь опять о моменте создания объектов. Тогда, как говорит tramp_m: "Прошу прощения если что не так... :shu:"

dosart

Вот эта строчка непонятна:
ЦитироватьiSpecificationColumn = iSpecificationColumns.Column(5, 1, 0)   # 5 - колонка "Наименование"

что означают цифры 1 и 0? В SDK написано, что Column - колонка объекта спецификации, заданная по типу, номеру и блоку. Что такое блок и номер?

333 , если делать как вы сказали, то можно получить  раздел. Но как получить содержимое раздела?

Slaviation

Цитироватьчто означают цифры 1 и 0?
i
ЦитироватьSpecificationColumn = iSpecificationColumns.Column(5, 1, 0)

Допустим мы хотим заполнить колонку количество в групповой спецификации. В такой спецификации таких колонок (колонок данного типа) может быть несколько и они определяются таким свойством  - "номер колонки данного типа".
В нашем примере колонка типа "наименование" одна и номер у ней 1.

Про блок цитирую справку:
Номер блока - определяет какому блоку исполнений соответствует данная колонка. Используется для базовых объектов групповых спецификаций.
+ Благодарностей: 1

dosart

#18
Slaviation, к сожаление не очень понятно. но это уже мои проблемы. спасибо за ответ.
У меня ещё есть вопросs.
Когда я прохожу по коллекции ISpecificationSrctionStyles, то у меня присутствуют разделы, которых нет в спецификации. Скажем, раздел "Стандартные изделения" не отображается в спецификации, но присутствует в коллекции. Это нормальная ситуация?

Мне удалось получить содержимое разделов за два прохода по спецификации. Сначала я прохожу по ISpecificationSrctionStyles и получаю номер и наименование разделов. Потом я прохожу по iSpecificationObjects и получаю номер раздела, к которому принадлежит базовый элемент. Далее, сопостоявляю полученую информацию. Можно обойтись одним проходом?

Slaviation

ЦитироватьСкажем, раздел "Стандартные изделения" не отображается в спецификации, но присутствует в коллекции. Это нормальная ситуация?

Интерфейс ISpecificationSectionStyles получается из ISpecificationStyle::Sections
Интерфейс ISpecificationStyle в свою очередь, согласно справке:
ЦитироватьОписывает стиль спецификации. Стили спецификаций описаны в библиотеках стилей спецификаций (файлы библиотек стилей спецификаций имеют расширение lyt).
Данный интерфейс отражает содержимое стиля в библиотеке стилей на момент получе­ния и в дальнейшем не отслеживает изменений в библиотеке стилей.

Выходит в том, что в библиотеке стиле раздел присутствует, а в самой спецификации отсутствует - противоречия нет. В  библиотеке стилей, как в Греции, есть все, а в спецификации - только то, что "взято" из библиотеки стилей.