Чтение спецификации

Автор BSad, 26.05.25, 16:12:07

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

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

BSad

Не могу понять как считать таблицу спецификации. До штампа добраться получается, а вот до колонок спецификации никак не могу придумать маршрут. Подскажите пожалуйста, как это сделать?  :cl:


def read_specification_info(filepath):
    module7, api7, const7 = get_kompas_api7()
    app7 = api7.Application
    doc = app7.Documents.Open(filepath)

    if doc.DocumentType != const7.ksDocumentSpecification:
        raise ValueError("Файл не является спецификацией")

    result = {
        "designation": "",
        "assembly_name": "",
        "designer": "",
        "assemblies_count": 0,
        "parts_count": 0,
        "standards_count": 0,
        "purchased_count": 0,
        "materials_count": 0
    }

    try:
       
        stamp = doc.LayoutSheets.Item(0).Stamp
        result["designation"] = stamp.Text(2).Str
        result["assembly_name"] = stamp.Text(1).Str
        result["designer"] = stamp.Text(110).Str
    except:
        pass

    try:

        spec_descs = doc.SpecificationDescriptions
        for i in range(spec_descs.Count):
            desc = spec_descs.Item(i)
            base_objects = desc.BaseObjects

            for j in range(base_objects.Count):
                obj = base_objects.Item(j)
                try:
                    obj_type = obj.Property["Наименование"]
                except:
                    obj_type = ""

                if "сбороч" in obj_type.lower():
                    result["assemblies_count"] += 1
                elif "деталь" in obj_type.lower():
                    result["parts_count"] += 1
                elif "стандарт" in obj_type.lower():
                    result["standards_count"] += 1
                elif "покуп" in obj_type.lower():
                    result["purchased_count"] += 1
                elif "материал" in obj_type.lower():
                    result["materials_count"] += 1
    except Exception as e:
        raise RuntimeError(f"Ошибка чтения спецификации: {e}")

    return result

p3452

- На Форуме, есть "ПОИСК"...
- Спецификация имеет СЛОЖНУЮ структуру...
- Поля спецификации, так же имеют сложную структуру...

p3452

Последовательность получения интерфейсов и объектов Спецификации для v20, на С#:
Спецификация - последовательность - v20.png
+ Благодарностей: 1

Валерий Изранов

BSad, а зачем вы хотите считать таблицу спецификации?
Известны намного лучшие способы.

Student2025

Цитата: Валерий Изранов от 26.05.25, 18:51:29Известны намного лучшие способы.
Предложите варианты может он передумает -  но тут условие одно - подход программный.

Заметил что
try:
except Exception as e:
использует не позволительно много времени.

BSad

Цитата: Валерий Изранов от 26.05.25, 18:51:29BSad, а зачем вы хотите считать таблицу спецификации?
Известны намного лучшие способы.
Если кратко то мне надо посчитать количество объектов спецификации в каждом блоке. То есть количество деталей, количество покупных изделий и так далее. Если есть более простой способ то буду рад если поделитесь?  ::)

BSad

Цитата: Student2025 от 26.05.25, 21:30:58Предложите варианты может он передумает -  но тут условие одно - подход программный.

Заметил что
try:
except Exception as e:
использует не позволительно много времени.

попробую убрать такие штуки, спасибо за замечание. Я в программирование не особо шарю, так сказать, но по работе приходится сталкиваться время от времени.

Валерий Изранов

#7
Компас умеет создавать Отчет от сборки. В том числе и программно.
В Отчете все есть. И покупные и стандартные.
НО, Отчет получить минутное дело, а вот "подготовить" сборку чтоб она все "отдала"довольно трудно.
Если заинтересует, смогу помочь все это сделать.
Пока суть да дело попробуйте как уже готовое работает
https://forum.ascon.ru/index.php?topic=36821.0

https://disk.yandex.ru/d/g2iIgcP-C-a1pg

BSad

Цитата: Валерий Изранов от 27.05.25, 12:05:56Компас умеет создавать Отчет от сборки. В том числе и программно.
В Отчете все есть. И покупные и стандартные.
НО, Отчет получить минутное дело, а вот "подготовить" сборку чтоб она все "отдала"довольно трудно.
Если заинтересует, смогу помочь все это сделать.
Пока суть да дело попробуйте как уже готовое работает
https://forum.ascon.ru/index.php?topic=36821.0

https://disk.yandex.ru/d/g2iIgcP-C-a1pg

Мне не нужен Отчет или что-то еще, мне нужно считать количество объектов спецификации и посчитать их. Такова задача!

Валерий Изранов

Вам НУЖЕН отчет, где перечислены ВСЕ объекты спецификации и их количество.

Student2025

Цитата: Валерий Изранов от 27.05.25, 14:20:51Вам НУЖЕН отчет, где перечислены ВСЕ объекты спецификации и их количество.
А как программно его получить и извлечь из него все объекты ?

Валерий Изранов

Я бы предложил автору устойчиво научиться вручную получать Отчеты.
А  потом можно было бы учиться делать это программно.

BSad

Цитата: Валерий Изранов от 27.05.25, 17:31:09Я бы предложил автору устойчиво научиться вручную получать Отчеты.
А  потом можно было бы учиться делать это программно.
Ну вот мы получаем отчет вручную, а с программной частью что? мне необходимо знать сколько элементов в спецификации и желательно знать сколько деталей, покупных и т.д. При возможности прошу направить рабочий фрагмент кода или иные советы по реализации

Валерий Изранов

https://disk.yandex.ru/d/wvP0QVBt0KoEvQ
 BSad, вот здесь лежит  учебная сборка для учебных целей.
Сделайте с нее вручную Отчет какой вам нужно и разместите его здесь.

BSad

Цитата: Валерий Изранов от 28.05.25, 17:05:43https://disk.yandex.ru/d/wvP0QVBt0KoEvQ
 BSad, вот здесь лежит  учебная сборка для учебных целей.
Сделайте с нее вручную Отчет какой вам нужно и разместите его здесь.
А зачем???? Вот вы мне настойчиво втюхивает свой яндекс диск, когда разговор совсем не про то. Я спрашиваю совета или готового решения для работы со спецификацией, а вы мне все про свои отчеты, руками в Компасе отчет я могу сделать, но он не спецификация. Я уже несколько раз прошу отстать со своим яндекс диском или объяснить как работа с Отчетом должна помочь мне работать со спецификацией.

Валерий Изранов

BSad, вам бы хотя бы сообщений 900 набрать.
Тогда вы будете права качать.
А пока что извините, вы ничего не заработали.

Starik

Уважаемые. Извольте повежливее. Оба. Я вам говорю.

Михаил88

Цитата: BSad от 26.05.25, 16:12:07Подскажите пожалуйста, как это сделать?

2 примера.
+ Благодарностей: 2