• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Регистрация будет доступна с 8:00 (мск) 12 января.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

VBA (Excel) Чтение и Запись в Чертеж КОМПАСа

Автор Валерич, 04.03.26, 13:50:21

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

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

lavgirb

Цитата: Валерич от 31.03.26, 18:21:02Т.е. нужно открывать в КОМПАСЕ сборку и все детали и получать соответствующие данные?
Не подходит?

Slaviation

ЦитироватьДобрый день!
Пожалуйста, подскажите, как прочитать, записать раздел спецификации в 3D-документе?

Во вложении два теста и документы сборки и детали в формате 24 версии КОМПАС-3D.
Первый тест — как прочитать «Раздел спецификации» из документа детали или сборки.
Второй тест  — как прочитать и записать «Раздел спецификации» для детали, вставленной в сборку, используя объект спецификации этой детали.
+ Благодарностей: 1

Валерич

Пожалуйста, подскажите в чем ошибка?
Показать Спецификацию на Чертеже...
VBA, ошибка 91 "Object variable or With block variable not set"

Dim objKomApp7 As KompasAPI7.IApplication
Dim objKomDoc7 As KompasAPI7.IKompasDocument

'Интерфейс Чертежа
Dim objKomDoc7_2D As KompasAPI7.IDrawingDocument

'Интерфейс коллекции описаний Спецификации у Документа
Dim objSpecDescripts7 As KompasAPI7.ISpecificationDescriptions

'Подключиться к интерфейсу КОМПАС
Set objKomApp7 = GetObject(, "Kompas.Application.7")

'Подключиться к Активному Документу КОМПАС
Set objKomDoc7 = objKomApp7.ActiveDocument
'Подключиться к 2D-документу КОМПАС
Set objKomDoc7_2D = objKomDoc7
'Получить Интерфейс коллекции описаний Спецификации у Документа
Set objSpecDescripts7 = objKomDoc7.SpecificationDescriptions

If objSpecDescripts7.Count <> 0 Then
With objSpecDescripts7.Item(1)
        .ShowOnSheet = True 
End With 'With objSpecDescripts7
End If 'If objSpecDescripts7.Count <> 0 Then

Gruden

Наверное - выделил жирным.

Цитата: Валерич от 01.04.26, 11:52:18'Подключиться к интерфейсу КОМПАС
Set objKomApp7 = GetObject(, "Kompas.Application.7")
PS. Хотя я в этом - не разбираюсь.

Михаил88

Цитата: Валерич от 01.04.26, 11:52:18Показать Спецификацию на Чертеже...

можно так отобразить спецификацию на чертеже
# Отобразить спецификацию на листе
app.ExecuteKompasCommand(k6_constants.ksCMSheetSpc, False)

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

Валерич


Валерич

Может, у кого есть пример заполнения (очистки) строк в Спецификации ЧЕРТЕЖА данными сборки, деталей (обозначение, наименование, раздел, к-во)?

Михаил88

Цитата: Валерич от 01.04.26, 13:52:59Михаил, спасибо, работает.

можно еще так

Dim objKomApp7 As KompasAPI7.IApplication
Dim objKomDoc7 As KompasAPI7.IKompasDocument

'Интерфейс коллекции описаний Спецификации у Документа
Dim objSpecDescripts7 As KompasAPI7.ISpecificationDescriptions

Dim specification_description As KompasAPI7.SpecificationDescription

'Подключиться к интерфейсу КОМПАС
Set objKomApp7 = GetObject(, "Kompas.Application.7")

'Подключиться к Активному Документу КОМПАС
Set objKomDoc7 = objKomApp7.ActiveDocument

'Получить Интерфейс коллекции описаний Спецификации у Документа
Set objSpecDescripts7 = objKomDoc7.SpecificationDescriptions

' Добавить новое описание спецификации
Set specification_description = objSpecDescripts7.Add("", 1, "")

'Текущее описание
'Set specification_description = objSpecDescripts7.Active

specification_description.ShowOnSheet = True

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

Михаил88

Цитата: Валерич от 01.04.26, 14:03:27Может, у кого есть пример заполнения (очистки) строк в Спецификации ЧЕРТЕЖА данными сборки, деталей (обозначение, наименование, раздел, к-во)?

А зачем? Эти все данные автоматически попадают в спецификацию если чертеж с ассоциативными видами. См. пример из сообщения #47.
+ Благодарностей: 1

Валерич

Цитата: Михаил88 от 01.04.26, 14:27:52А зачем? Эти все данные автоматически попадают в спецификацию если чертеж с ассоциативными видами. См. пример из сообщения #47.
В том-то и трудность, что у нас требуется ручное заполнение спецификации, с описаниями деталей, без привязки к моделям, т.к. иначе часто «слетают» позиции, при внесении изменений другими поьзователями.

Валерич

Пожалуйста, подскажите,
как распознать, что на чертеже активна вкладка
«Редактировать объекты спецификации»?
Команда  ExecuteKompacCommand ksCMSlaveSpc только вкючает, выключает режим редактирования (просмотра).

Gruden


Валерич


Валерич

Прошу помочь...
Как прочитать свойства детали Parts.Item(i), входящей в сборку TopPart?
В дереве все есть, а добраться невозможно.
.Name - есть, а .Marking - нет и Пути к Файлу.

Через Менеджер Свойств тоже не получается.

'Получение одного свойств (16 - Полное имя файла)
Set objKomProp7 = objKomPropsMng7.GetProperty(objKomParts7.Item(0), 16#) '# - Тип Double,  - Полное имя файла
'Чтение одного свойств (16 - Полное имя файла) в vKomPropVal
bKomPropsKeeper7Return = objKomPropsKeeper7.GetPropertyValue(objKomProp7, vKomPropVal, True, True)


'Количество Компонентов в СБОРКЕ
iCount = objKomPart7.Parts.Count


For i = 0 To iCount - 1
'Обозначение
    Workbooks(sWorkBookName).Worksheets(LIST_05.Name).Cells(iMaxRow + i + 1, jCol + 4).Value = objKomParts7.Item(i).marking

'Наименование
    Workbooks(sWorkBookName).Worksheets(LIST_05.Name).Cells(iMaxRow + i + 1, jCol + 4).Value = objKomPart7.Parts.Item(i).Name

Валерич

Решилось присвоением свойств объекту

Dim objKomItemPart7 As KompasAPI7.IPart7

For i = 0 To iCount - 1

Set objKomItemPart7 = objKomPart7.Parts.Item(i)

Cells(i + 1, j).Value = objKomItemPart7.marking

Set objKomItemPart7 = Nothing

Next i 'For i = 0 To iCount - 1

Валерич

Пожалуйста, подскажите, как из Сборки или Детали получить имя связанного Чертежа?
.ObjectAttachedDocuments( IPropertyKeeper *PropObject)...

Читал похожую тему «Ссылка на чертеж из модели», но непонятно,

КАК ОБЪЯВИТЬ МАССИВ ДЛЯ ВОЗВРАТА ДАННЫХ

SAFEARRAY ?

Михаил88

Sub Test4()

Dim application As KompasAPI7.IApplication
Dim kompas_document As KompasAPI7.IKompasDocument
Dim kompas_document_3d As KompasAPI7.KompasDocument3D
Dim part7 As KompasAPI7.part7
Dim property_keeper As KompasAPI7.IPropertyKeeper
Dim product_data_manager As KompasAPI7.IProductDataManager
Dim attached_documents() As String
Dim i As Integer
Dim Output As String

 
Set application = GetObject(, "Kompas.Application.7")
Set kompas_document = application.ActiveDocument
Set kompas_document_3d = kompas_document
Set part7 = kompas_document_3d.TopPart
Set property_keeper = part7
Set product_data_manager = kompas_document

attached_documents = product_data_manager.ObjectAttachedDocuments(property_keeper)

' Собираем элементы в строку
For i = LBound(attached_documents) To UBound(attached_documents)
    Output = Output & "Элемент " & i & ": " & attached_documents(i) & vbCrLf
Next i

MsgBox Output, vbInformation, "Содержимое массива"


End Sub
+ Благодарностей: 2

Slaviation

Добрый день.
Может в приведенном выше примере property_keeper лучше получить от документа, а не от головного парта?

Валерич

Михаил, Спасибо!
Еще вопрос...
В массив добавляется только Спецификация,
А Чертежа не видно?

Михаил88