CAD БИБЛИОТЕКА
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Вертикальные решения на базе AutoCAD > AutoCAD MEP 2012 RUS. Проблема со спецификациями труб и их фитингов

AutoCAD MEP 2012 RUS. Проблема со спецификациями труб и их фитингов

Ответ
Поиск в этой теме
Непрочитано 12.01.2012, 13:29 #1
AutoCAD MEP 2012 RUS. Проблема со спецификациями труб и их фитингов
lex0101
 
инженер-программист
 
Иваново
Регистрация: 12.02.2009
Сообщений: 41

Господа, всем доброго времени.
Задача стоит в следующем: Получить спецификацию труб и фитингов в текущем чертеже AutoCAD MEP 2012 RUS по форме из нашего ГОСТа, да так, чтобы автоматически в колонку "Количество" для штучных фитингов вставлялось количество штук, а для труб, соответственно, их суммарная длина (суммарная длина труб одного диаметра).
В стиле спецификации, добавлена нужная графа с формулой-скриптом (пример нашел где-то на форумах, адаптировал под свои каталоги).
И вот собственно ПРОБЛЕМА: нажимаю на вставку спецификации, выбираю нужный стиль, выделяю элементы, размещаю спецификацию на чертеже, жму Добавить все наборы свойств - результат все отлично, т.е. штуки посчитались, длина написалась! Сохраняю чертеж. Закрываю MEP. Открываю MEP. Открываю чертеж и в момент, когда он открывается на стадии "Извлечение данных из спецификации" на 50% MEP вылетает с фатальной ошибкой. В чем тут проблема, а????
Прикладываю примеры:
Пример1 - чертеж с подготовленными стилями до вставки спецификации.
Пример2 - тот же чертеж после вставки спецификации.

Вложения
Тип файла: dwg
DWG 2010
Пример1.dwg (681.4 Кб, 25555 просмотров)
Тип файла: dwg
DWG 2010
Пример2.dwg (686.9 Кб, 25169 просмотров)

Просмотров: 45601
 
Непрочитано 12.01.2012, 15:27
#2
VitalyAF

инженер
 
Регистрация: 19.07.2005
Россия
Сообщений: 2,428
Отправить сообщение для VitalyAF с помощью Skype™


На этом форуме выкладывали готовую таблицу.
http://forum.abok.ru/index.php?showt...660&start=1660
там 84 стр. Не поленитесь, обязательно найдёте, где-то ближе к середине!

Цитата:
Закрываю ... Открываю ...вылетает с фатальной ошибкой. В чем тут проблема, а????
Проблема номер 1 - rus версия
2- формулы написаны неправильно( т.е. Они допускают некоторые погрешности, но до определённого предела)
VitalyAF вне форума  
 
Автор темы   Непрочитано 12.01.2012, 15:45
#3
lex0101

инженер-программист
 
Регистрация: 12.02.2009
Иваново
Сообщений: 41


Цитата:
Сообщение от VitalyAF Посмотреть сообщение
На этом форуме выкладывали готовую таблицу.
http://forum.abok.ru/index.php?showt...660&start=1660
там 84 стр. Не поленитесь, обязательно найдёте, где-то ближе к середине!
Вооот, вот там-то я и нашел примеры формул (74-76 стр).
И там тоже под RUS версию, правда 2011.

Цитата:
Сообщение от VitalyAF Посмотреть сообщение
Проблема номер 1 - rus версия
2- формулы написаны неправильно( т.е. Они допускают некоторые погрешности, но до определённого предела)
Что значит "погрешности до определенного предела?"
lex0101 вне форума  
 
Непрочитано 12.01.2012, 15:54
#4
VitalyAF

инженер
 
Регистрация: 19.07.2005
Россия
Сообщений: 2,428
Отправить сообщение для VitalyAF с помощью Skype™


формулу здесь покажите, не могу файл открыть
VitalyAF вне форума  
 
Автор темы   Непрочитано 12.01.2012, 16:34
#5
lex0101

инженер-программист
 
Регистрация: 12.02.2009
Иваново
Сообщений: 41


Прошу прощения, но файлы Пример1 и Пример2 выложенные мной ранее не совсем правильные.
Выкладываю нужные файлы: Пример3_1 и Пример4_1. Все тоже самое, как и в первом посте.

Отдельно формула для подсчета штук и метров:

RESULT = "0"
On error resume next
Set acadApp = GetObject(,"AutoCAD.Application")
Length=0
Count = 0

s="[Z31_Specification:НаименованиеП]"
f="[Z31_Specification:Типобъекта]"
h="[Z31_Specification:Обработка]"
a="[Z31_Specification:Типэлемента]"
k="[КОЛИЧЕСТВО]"

For Each object In acadApp.ActiveDocument.ModelSpace

If object.ObjectName = "AecbDbPipe" Then
If object.Handle <> h Then
If f = "Труба" Then
set dict=object.GetExtensionDictionary
Set subdict = Dict.Item("AEC_PROPERTY_SETS")
For Each sch_propset In subdict
If sch_propset.Name = "Z31_Specification" Then
For Each sch_prop In sch_propset.Properties
If sch_prop.Name = "НаименованиеП" Then
If sch_prop.Value= s Then
Length = Length + object.Length
End If
End If
Next
End If
Next
End If
If f="Фитинг трубопровода" Then
set dict=object.GetExtensionDictionary
Set subdict = Dict.Item("AEC_PROPERTY_SETS")
For Each sch_propset In subdict
If sch_propset.Name = "Z31_Specification" Then
For Each sch_prop In sch_propset.Properties
If sch_prop.Name = "Типэлемента" Then
If sch_prop.Value= a Then
Count = Count+object.Count
End If
End IF
Next
End If
Next
End If
End If
End If

Next


If f = "Труба" Then RESULT = Replace( Round((Length)/1000,2), ".", ",") End If

If f = "Фитинг трубопровода" Then RESULT = Replace( Round((Count + k)), ".", ",") End If
Вложения
Тип файла: dwg
DWG 2010
Пример3_1.dwg (659.5 Кб, 6447 просмотров)
Тип файла: dwg
DWG 2010
Пример4_1.dwg (661.8 Кб, 6405 просмотров)
lex0101 вне форума  
 
Непрочитано 12.01.2012, 16:49
#6
VitalyAF

инженер
 
Регистрация: 19.07.2005
Россия
Сообщений: 2,428
Отправить сообщение для VitalyAF с помощью Skype™


здесь >>
Код:
[Выделить все]
 If f = "Фитинг трубопровода" Then RESULT = Replace( Round((Count + k)), ".", ",") End If
Count - кол-во объектов, а что в "к" ??
VitalyAF вне форума  
 
Автор темы   Непрочитано 12.01.2012, 16:58
#7
lex0101

инженер-программист
 
Регистрация: 12.02.2009
Иваново
Сообщений: 41


Цитата:
Сообщение от VitalyAF Посмотреть сообщение
здесь >>
Код:
[Выделить все]
 If f = "Фитинг трубопровода" Then RESULT = Replace( Round((Count + k)), ".", ",") End If
Count - кол-во объектов, а что в "к" ??
Вот эта К меня тоже смущает, но ведь штуки считаются правильно.
Я бы так написал:

If f = "Фитинг трубопровода" Then RESULT = k End If

где k="[КОЛИЧЕСТВО]"

так логичней

сейчас попробую

И все равно результат такой же: при открытии чертежа вылетает.
И что еще заметил: вылетает только тогда, когда совсем MEP закрываю, а потом заново открываю. Ели просто чертеж закрыть - открыть, то все работает.

Последний раз редактировалось lex0101, 12.01.2012 в 17:06.
lex0101 вне форума  
 
Непрочитано 12.01.2012, 17:10
#8
VitalyAF

инженер
 
Регистрация: 19.07.2005
Россия
Сообщений: 2,428
Отправить сообщение для VitalyAF с помощью Skype™


Цитата:
где k="[КОЛИЧЕСТВО]"
что в переменной "[КОЛИЧЕСТВО]", слово шт. что ли? ))
VitalyAF вне форума  
 
Автор темы   Непрочитано 12.01.2012, 17:17
#9
lex0101

инженер-программист
 
Регистрация: 12.02.2009
Иваново
Сообщений: 41


Цитата:
Сообщение от VitalyAF Посмотреть сообщение
что в переменной "[КОЛИЧЕСТВО]", слово шт. что ли? ))
не слово, а число
если Вы на счет кавычек, то без них таже фигня происходит
lex0101 вне форума  
 
Непрочитано 12.01.2012, 17:26
#10
VitalyAF

инженер
 
Регистрация: 19.07.2005
Россия
Сообщений: 2,428
Отправить сообщение для VitalyAF с помощью Skype™


какое число? в Count же число!
VitalyAF вне форума  
 
Автор темы   Непрочитано 13.01.2012, 08:38
#11
lex0101

инженер-программист
 
Регистрация: 12.02.2009
Иваново
Сообщений: 41


Цитата:
Сообщение от VitalyAF Посмотреть сообщение
какое число? в Count же число!
В Count число и в k число, точнее в k значение из колонки "Кол." для данной строки.

Формула

Код:
[Выделить все]
RESULT = "0"
On error resume next
Set acadApp = GetObject(,"AutoCAD.Application")
Length=0
Count = 0

s="[Z31_Specification:НаименованиеП]"
f="[Z31_Specification:Типобъекта]"
h="[Z31_Specification:Обработка]"
a="[Z31_Specification:Типэлемента]"
k="[КОЛИЧЕСТВО]"

For Each object In acadApp.ActiveDocument.ModelSpace

	If object.ObjectName = "AecbDbPipe" Then
		If object.Handle <> h Then
			If f = "Труба" Then
				set dict=object.GetExtensionDictionary
				Set subdict = Dict.Item("AEC_PROPERTY_SETS")
				For Each sch_propset In subdict
					If sch_propset.Name = "Z31_Specification" Then
						For Each sch_prop In sch_propset.Properties
							If sch_prop.Name = "НаименованиеП" Then 
								If sch_prop.Value= s Then
									Length = Length + object.Length
								End If
							End If
						Next
					End If
				Next
			End If
			If f="Фитинг трубопровода" Then
				set dict=object.GetExtensionDictionary
				Set subdict = Dict.Item("AEC_PROPERTY_SETS")
				For Each sch_propset In subdict
					If sch_propset.Name = "Z31_Specification" Then
						For Each sch_prop In sch_propset.Properties
							If sch_prop.Name = "Типэлемента" Then
								If sch_prop.Value= a Then
									Count = Count+object.Count
								End If
							End IF
						Next
					End If
				Next
			End If
		End If
	End If

Next


If f = "Труба" Then RESULT = Replace( Round((Length)/1000,2), ".", ",") End If

If f = "Фитинг трубопровода" Then RESULT = Count End If
Тоже не работает! Причем количество штучных изделий выдает всегда 0.
И еще странное заметил, если из этой формулы убрать строку определения переменной k="[КОЛИЧЕСТВО]", то еще и суммарная длина труб не получается, т.е. сколько труб, столько и записей в спецификации (но с длинами).
Как этот MEP работает!!!)))

Последний раз редактировалось Кулик Алексей aka kpblc, 13.01.2012 в 09:24.
lex0101 вне форума  
 
Непрочитано 13.01.2012, 09:27
#12
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 38,004


Попробуй заменить строку
Код:
[Выделить все]
k="[КОЛИЧЕСТВО]"
на
Код:
[Выделить все]
k=CLng("[КОЛИЧЕСТВО]")
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.01.2012, 10:23
#13
lex0101

инженер-программист
 
Регистрация: 12.02.2009
Иваново
Сообщений: 41


Если k=CLng("[КОЛИЧЕСТВО]"), то она вообще не строится(((
lex0101 вне форума  
 
Непрочитано 13.01.2012, 11:02
#14
VitalyAF

инженер
 
Регистрация: 19.07.2005
Россия
Сообщений: 2,428
Отправить сообщение для VitalyAF с помощью Skype™


k - здесь не нужен! Формула и так пробегает по всем объектам кроме первого If object.Handle <> h Then
вместо k здесь просто надо добавить единицу. Это во-первых, во-вторых не понятно как вообще всё это у вас работает, т.к. в начале цикла стоит проверка на тип объекта If object.ObjectName = "AecbDbPipe" Then
В третьих Count = Count+object.Count - что это? ) Если вы хотите суммировать отводы, то д.б.
Count = Count+1
Потом у вас путаница Тип объекта, Тип элемента! Вы ищете Труба If f = "Труба" Then Когда там Pipe Style
На том сайте, что я показывал была где-то рабочая, готовая таблица, может быть её лучше найти?!!!

PS Иногда таблица разворачивается по строкам, ( т.е. сколько труб, столько и записей в спецификации )в этом случае её надо просто обновить...

PS
Вот вам и ответ на то, почему сбоит! Кроме того 2012RUS как никогда неустойчиво работает с формулами!!! Еле-еле проект перетащил на неё с ENG версии и поклялся никогда больше этого не делать! ))
Потерпите немного... Скоро всё это не нужно будет...

Последний раз редактировалось VitalyAF, 13.01.2012 в 11:10.
VitalyAF вне форума  
 
Автор темы   Непрочитано 13.01.2012, 11:48
#15
lex0101

инженер-программист
 
Регистрация: 12.02.2009
Иваново
Сообщений: 41


Цитата:
Сообщение от VitalyAF Посмотреть сообщение
Потерпите немного... Скоро всё это не нужно будет...
Что это означает? Конец света? Или выход в марте AutoCAD MEP 2013?

Формулу надо так поправить?

Код:
[Выделить все]
RESULT = "0"
On error resume next
Set acadApp = GetObject(,"AutoCAD.Application")
Length=0
Count = 0

s="[Z31_Specification:НаименованиеП]"
f="[Z31_Specification:Типобъекта]"
h="[Z31_Specification:Обработка]"

For Each object In acadApp.ActiveDocument.ModelSpace

	If object.ObjectName = "AecbDbPipe" Then
		If object.Handle <> h Then
			If f = "Труба" Then
				set dict=object.GetExtensionDictionary
				Set subdict = Dict.Item("AEC_PROPERTY_SETS")
				For Each sch_propset In subdict
					If sch_propset.Name = "Z31_Specification" Then
						For Each sch_prop In sch_propset.Properties
							If sch_prop.Name = "НаименованиеП" Then 
								If sch_prop.Value= s Then
									Length = Length + object.Length
								End If
							End If
						Next
					End If
				Next
			End If
			If f="Фитинг трубопровода" Then
				set dict=object.GetExtensionDictionary
				Set subdict = Dict.Item("AEC_PROPERTY_SETS")
				For Each sch_propset In subdict
					If sch_propset.Name = "Z31_Specification" Then
						For Each sch_prop In sch_propset.Properties
							If sch_prop.Name = "НаименованиеП" Then
								If sch_prop.Value= s Then
									Count = Count + 1
								End If
							End IF
						Next
					End If
				Next
			End If
		End If
	End If

Next


If f = "Труба" Then RESULT = Replace( Round((Length)/1000,2), ".", ",") End If

If f = "Фитинг трубопровода" Then RESULT = Count End If
lex0101 вне форума  
 
Непрочитано 13.01.2012, 12:02
#16
VitalyAF

инженер
 
Регистрация: 19.07.2005
Россия
Сообщений: 2,428
Отправить сообщение для VitalyAF с помощью Skype™


Цитата:
Что это означает? Конец света?
он самый - конец!
Вы адаптировали не правильно, формула щас у вас работает только для труб! (If object.ObjectName = "AecbDbPipe" Then...)
Ищите готовую таблицу!
VitalyAF вне форума  
 
Автор темы   Непрочитано 13.01.2012, 14:01
#17
lex0101

инженер-программист
 
Регистрация: 12.02.2009
Иваново
Сообщений: 41


Цитата:
Сообщение от VitalyAF Посмотреть сообщение
Вы адаптировали не правильно, формула щас у вас работает только для труб! (If object.ObjectName = "AecbDbPipe" Then...)
Исходя из этого делаю следующее:
Меняю используемый набор характеристик - применение его только к Стилю труб, соответственно все характеристики переделываю.
Меняю формулу:
Код:
[Выделить все]
RESULT = 0
On error resume next
Set acadApp = GetObject(,"AutoCAD.Application")
Length=0

s="[Z31_Specification:НаименованиеП]"
f="[Z31_Specification:Типобъекта]"
h="[Z31_Specification:Обработка]"

For Each object In acadApp.ActiveDocument.ModelSpace

	If object.ObjectName = "AecbDbPipe" Then
		If object.Handle <> h Then
			If f = "Труба" Then
				set dict=object.GetExtensionDictionary
				Set subdict = Dict.Item("AEC_PROPERTY_SETS")
				For Each sch_propset In subdict
					If sch_propset.Name = "Z31_Specification" Then
						For Each sch_prop In sch_propset.Properties
							If sch_prop.Name = "НаименованиеП" Then 
								If sch_prop.Value= s Then
									Length = Length + object.Length
								End If
							End If
						Next
					End If
				Next
			End If
			
		End If
	End If

Next


If f = "Труба" Then RESULT = Replace( Round((Length)/1000,2), ".", ",") End If
Результат такой:
1. Нет суммарной длины труб (3 трубы - 3 позиции), длина у каждой прописалась
2. После открытия чертежа Fatal Error
3. Пойду повешусь,

Цитата:
Сообщение от VitalyAF Посмотреть сообщение
Ищите готовую таблицу!
Намыливая веревку))) я поискал:

1.http://forum.abok.ru/index.php?showtopic=8638&st=1500
посты №1513 и №1514
2.http://forum.dwg.ru/showthread.php?t=76463
последний пост
При всем уважении к господину "cdholder", но у него в обеих темах (если я не слепой конечно) именно так, как у меня было вначале (ну за исключением "адаптированности" к каталогу)

Что делать то(((((((?????????? хелп ми, плиз
lex0101 вне форума  
 
Непрочитано 31.05.2012, 20:24
#18
Messerz


 
Регистрация: 15.05.2010
Сообщений: 2


Кто-нибудь смотрел MEP 2013 в этой части?
Есть ли решение по подсчету длин труб?
Messerz вне форума  
 
Непрочитано 31.05.2012, 23:34
#19
VitalyAF

инженер
 
Регистрация: 19.07.2005
Россия
Сообщений: 2,428
Отправить сообщение для VitalyAF с помощью Skype™


И да и нет!
Появилась возможность группировать строки таблицы по стилям и вставлять промежуточные
итоги - субтотал. И, как я понял, скрывать промежуточные значения, оставляя только субтотал.
Группировка работает, субтотал тоже, осталось скрыть промежуточные значения.
Если их удастся скрыть, то значит решение есть, иначе снова половинчатое решение. Пробуйте!

Но хотелось бы настоящего решения, типа Roombook, например MEPbook! ))
PS Помните, "Сказка о золотой рыбке"?

Последний раз редактировалось VitalyAF, 01.06.2012 в 08:07.
VitalyAF вне форума  
 
Непрочитано 09.06.2012, 14:19
#20
Messerz


 
Регистрация: 15.05.2010
Сообщений: 2


Скачал пробник MEP 2013 и даже русифицировал. Опробовал массу вариантов, но получить приемлемый вид спецификации так и не удалось.
Мне интересно, бог с ней, с гостовской спецификацией, а как же господа забугорные инженеры подсчитывают длины труб по диаметрам?
Вот я, скажем, черчу технологический трубопровод переменного диаметра и сложной конфигурации как в плане, так и по вертикали.
Выделяю эту систему и по сути никакой полезной информации про нее получить не могу. Тут было бы полезно добавить хотя бы длину трубопровода по оси...
Этот параметр, насколько я понимаю, вообще получить невозможно.
В общем, много еще остается вопросов к разработчикам.
Messerz вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Вертикальные решения на базе AutoCAD > AutoCAD MEP 2012 RUS. Проблема со спецификациями труб и их фитингов

Система Техэксперт дает уверенность в правильности и эффективности принимаемых инженерных решений!
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать чтобы чертеж по умолчанию открывался в версии 2009 Autocad, а не 2012? _olga_ AutoCAD 14 19.06.2013 18:48
Настройки AutoCAD 2011 в AutoCAD 2012 Fedorino AutoCAD 1 09.11.2011 09:11
AutoCAD 2009: создание массива по траектории как AutoCAD 2012 Dimitriy AutoCAD 8 05.11.2011 21:41
Проблема с загрузкой AutoCad 2005 pers2 AutoCAD 9 20.08.2006 19:16
AutoCad 2004 RUS или AutoCad LT 2004 RUS DEN AutoCAD 7 23.01.2004 22:23