diff --git a/logs/parser.log b/logs/parser.log index a0bfca3..fc88903 100644 --- a/logs/parser.log +++ b/logs/parser.log @@ -44125,3 +44125,47 @@ AttributeError: 'NoneType' object has no attribute 'Parts' Элементов 1 Гибов 0 +2025-06-30 11:15:41,946 - parser - INFO - main - collect_statistics - 660 - Начинаем сбор статистики по элементам... +2025-06-30 11:15:41,946 - parser - INFO - main - collect_statistics - 680 - Обрабатываем документ: Сборка изделий +2025-06-30 11:15:56,086 - parser - INFO - main - collect_statistics - 705 - Найдено: + Элементов 22 + Гибов 2 + +2025-06-30 11:19:10,024 - parser - INFO - main - collect_statistics - 663 - Начинаем сбор статистики по элементам... +2025-06-30 11:19:10,412 - parser - INFO - main - collect_statistics - 683 - Обрабатываем документ: Сборка изделий +2025-06-30 11:19:13,383 - parser - ERROR - main - collect_statistics - 724 - [ERROR] Ошибка при обработке документа #1: (-2147352573, 'Член группы не найден.', None, None) +2025-06-30 11:19:13,484 - parser - INFO - main - collect_statistics - 683 - Обрабатываем документ: Проф труба +2025-06-30 11:19:14,232 - parser - ERROR - main - collect_statistics - 724 - [ERROR] Ошибка при обработке документа #2: (-2147352573, 'Член группы не найден.', None, None) +2025-06-30 11:19:50,399 - parser - INFO - main - collect_statistics - 662 - Начинаем сбор статистики по элементам... +2025-06-30 11:19:50,850 - parser - INFO - main - collect_statistics - 682 - Обрабатываем документ: Сборка изделий +2025-06-30 11:19:54,117 - parser - ERROR - main - collect_statistics - 723 - [ERROR] Ошибка при обработке документа #1: (-2147352573, 'Член группы не найден.', None, None) +2025-06-30 11:19:54,183 - parser - INFO - main - collect_statistics - 682 - Обрабатываем документ: Проф труба +2025-06-30 11:19:54,769 - parser - ERROR - main - collect_statistics - 723 - [ERROR] Ошибка при обработке документа #2: (-2147352573, 'Член группы не найден.', None, None) +2025-06-30 11:20:57,574 - parser - INFO - main - collect_statistics - 668 - Начинаем сбор статистики по элементам... +2025-06-30 11:20:58,000 - parser - INFO - main - collect_statistics - 688 - Обрабатываем документ: Сборка изделий +2025-06-30 11:21:12,700 - parser - INFO - main - collect_statistics - 713 - Найдено: + Элементов 22 + Гибов 2 + +2025-06-30 11:22:18,699 - parser - INFO - main - collect_statistics - 668 - Начинаем сбор статистики по элементам... +2025-06-30 11:22:18,708 - parser - INFO - main - collect_statistics - 688 - Обрабатываем документ: Сборка изделий +2025-06-30 11:22:34,370 - parser - INFO - main - collect_statistics - 713 - Найдено: + Элементов 22 + Гибов 2 + +2025-06-30 11:25:08,246 - parser - INFO - main - collect_statistics - 668 - Начинаем сбор статистики по элементам... +2025-06-30 11:25:09,230 - parser - INFO - main - collect_statistics - 688 - Обрабатываем документ: Сборка изделий +2025-06-30 11:25:10,670 - parser - ERROR - main - collect_statistics - 729 - [ERROR] Ошибка при обработке документа #1: cannot unpack non-iterable bool object +2025-06-30 11:25:10,731 - parser - INFO - main - collect_statistics - 688 - Обрабатываем документ: Проф труба +2025-06-30 11:25:11,065 - parser - ERROR - main - collect_statistics - 729 - [ERROR] Ошибка при обработке документа #2: cannot unpack non-iterable bool object +2025-06-30 11:26:06,756 - parser - INFO - main - collect_statistics - 667 - Начинаем сбор статистики по элементам... +2025-06-30 11:26:07,411 - parser - INFO - main - collect_statistics - 687 - Обрабатываем документ: Сборка изделий +2025-06-30 11:26:08,899 - parser - ERROR - main - collect_statistics - 728 - [ERROR] Ошибка при обработке документа #1: cannot unpack non-iterable bool object +2025-06-30 11:26:09,021 - parser - INFO - main - collect_statistics - 687 - Обрабатываем документ: Проф труба +2025-06-30 11:26:09,223 - parser - ERROR - main - collect_statistics - 728 - [ERROR] Ошибка при обработке документа #2: cannot unpack non-iterable bool object +2025-06-30 11:27:53,772 - parser - INFO - main - collect_statistics - 671 - Начинаем сбор статистики по элементам... +2025-06-30 11:27:54,115 - parser - INFO - main - collect_statistics - 691 - Обрабатываем документ: Сборка изделий +2025-06-30 11:28:07,710 - parser - INFO - main - collect_statistics - 716 - Найдено: + Элементов 22 + Гибов 2 + diff --git a/parser/main.py b/parser/main.py index e8e6521..20efc48 100644 --- a/parser/main.py +++ b/parser/main.py @@ -537,28 +537,6 @@ class KompasDocumentParser: target[category].setdefault(key, []).extend(items) return target - def keeper(self, obj): - property_keeper = self.api7_module.IPropertyKeeper(obj) - try: - data = xmltodict.parse(property_keeper.Properties) - properties_list = data.get("infObject", {}).get("property", []) - if not isinstance(properties_list, list): - properties_list = [properties_list] - - # Создаём словарь по @id - props = {prop["@id"]: prop for prop in properties_list if "@id" in prop} - if props.get("276039607982", None): - section_prop = props.get("276039607982") # Сечение (тип профиля) - sketch_prop = props.get("316618764777") # Эскиз сечения - profile_length_prop = props.get("235833998283") # Длина профиля - key = sketch_prop["@value"] - return (key, profile_length_prop) - except Exception as e: - logger.error(e) - return None - - return None - def traverse_ipart(self, element, depth=0, viewed=None, result=None): if viewed is None: viewed = set() @@ -606,10 +584,28 @@ class KompasDocumentParser: else: if isinstance(f, self.api7_module.IBody7): - res = self.keeper(f) - if res: - key, value = res - result["Pipe"].setdefault(key, []).append(value) + # Получаем интерфейс IPropertyKeeper для текущего тела + property_keeper = self.api7_module.IPropertyKeeper(f) + + # Получаем свойства "Длина профиля" и "Сечение" + prop_length = property_manager.GetProperty( + self.application.ActiveDocument, "Длина профиля" + ) + prop_section = property_manager.GetProperty( + self.application.ActiveDocument, "Сечение" + ) + + # Извлекаем значения свойств + success_length, value_length, _ = property_keeper.GetPropertyValue( + prop_length, "", True, True + ) + success_section, value_section, _ = property_keeper.GetPropertyValue( + prop_section, "", True, True + ) + + # Если оба свойства успешно извлечены — сохраняем в результат + if success_section and success_length: + result["Pipe"].setdefault(value_section, []).append(value_length) if isinstance(f, self.api7_module.IUserDesignationCompObj): weldes = self.api7_module.IFeature7(f).SubFeatures(1, True, True) @@ -623,7 +619,6 @@ class KompasDocumentParser: self.application ) for w in weldes: - print(w) property_keeper = self.api7_module.IPropertyKeeper(w) res, value, from_source = property_keeper.GetPropertyValue( prop, "", True, True