import os import traceback import pythoncom from win32com.client import Dispatch, gencache ids = { "api_5": "{0422828C-F174-495E-AC5D-D31014DBBE87}", "api_7": "{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", "const": "{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", } class KompasDocumentParser: def __init__(self): self.api5 = None self.api7 = None self.constants = None self.application = None self._init_kompas() def _init_kompas(self): """Инициализация API КОМПАС версий 5 и 7""" try: import pythoncom pythoncom.CoInitialize() # Получаем API версии 5 self.api5_module = gencache.EnsureModule(ids["api_5"], 0, 1, 0) self.api5 = self.api5_module.KompasObject( Dispatch("Kompas.Application.5")._oleobj_.QueryInterface( self.api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch ) ) # Получаем API версии 7 self.api7_module = gencache.EnsureModule(ids["api_7"], 0, 1, 0) self.api7 = self.api7_module.IKompasAPIObject( Dispatch("Kompas.Application.7")._oleobj_.QueryInterface( self.api7_module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch ) ) # Получаем константы constants_module = gencache.EnsureModule(ids["const"], 0, 1, 0) self.constants = constants_module.constants # Правильное получение IApplication self.application = self.api7_module.IApplication(self.api7) self.application.Visible = True except Exception as e: # Выводим полный traceback и сообщение об ошибке print("[ERROR] Ошибка при подключении к КОМПАС:") traceback.print_exc() # <-- Выводит номер строки, файл и стек raise RuntimeError(f"Ошибка при подключении к КОМПАС: {e}") def get_open_documents(self): """Возвращает список информации о всех открытых документах""" documents = [] docs_collection = self.application.Documents for i in range(docs_collection.Count): try: doc = docs_collection.Item(i + 1) # Индексация с 1 documents.append( { "type": doc.DocumentType, "name": doc.Name, "path": doc.Path, "active": doc.Active, } ) except Exception as e: print(f"Ошибка при обработке документа #{i + 1}: {e}") return documents