Герой

Вопрос По Smarteam'y (написание Скриптов)

Доброе время суток.

Вобще перейду сразу к делу:

в Смартиме я сижу уже где-то две недельки... более менее разобрался что и как, перелопатил множество мануалов и хелпов и, о чудо - я почти уже сам написал афигенный(ну по моим меркам афигенный 8)) ) скрипт. Он уже выводит все как надо в вордовский документ и т.п. Но под конец столкнулся с очень неприятной вещью, которая меня просто убивает... Ия не знаю как это описать, в мануалах ничего толкого не нашел, вобщем я в панике... Помогите пожалуйста.

Я должен в вордовский документ вывести поля объектов класса "Purchased part"

Инициализирую все это дело через правой клавишей по компоненте(допустим "Комплекс") и "Операции определенныепользователем"->Мой скрипт

Но проблем в том, что в этом комплексе может быть еще 10 комплексов, а в них, еще 100 сборочных единиц, в которых еще 1000 комплексов и т.п. И в самом конце может быть несколько объектов типа "Purchased part".

Я написал скрипт, который выводит все что нужно, но только если эти "Purchased part'ы" прямо в самом комплексе, по которому я щелкнул(вызвал) свой скрипт, т.е. они - непосредственные "Chidrens" этого объекта. А те чилдрены, которые дольше - я не знаю как их достать, какое условие для QweryDef (Where) написать ит.п.. ВОбщем не могу достать их оттуда, и вывожу либо тока этих "Purchased part" которые непосредственные дети, либо всех "Purchased part" из вообще всего дерева, а мне надо, которые только "ниже по дереву" от компоненты, по которой я щелкнул... Какое условие-то нужно написать, чтобы брались все "дети" от этой компоненты?

Вот нужная часть кода:

Dim ObjFromPar As Object



			Dim SelectedClassId As String



			Dim SelectedObjId As String



			Dim SelectedObj As Object



			Dim NewBehavior As SmApplic.ISmBehavior



			Dim SmQuery As SmApplic.ISmQuery



			Dim SelectedObjChildren As SmApplic.ISmMultiCompositeObjects



			Dim ChildrenCount As Integer



			Dim myQuery As SmApplic.ISmQuery



			Dim myQueryDef As SmApplic.ISmQueryDefinition



			Dim MetaInfo As SmApplic.SmMetaInfo





			Dim CurrentChildClassId As String



			Dim CurrentChildObjId As String



			Dim CurrentChildObj As Object

 



'************************************************************************************************

*****



'Код скрипта



 

			Set SmSession = SCREXT_ObjectForInterface(ApplHndl)



			CONV_RecListToComRecordList FirstPar, ObjFromPar



			If ObjFromPar.ValueAsString("OBJECT_ID", 0) = "" Then																							   'Если скрипт будет запускаться по нажатию кнопки на форме



						CONV_RecListToComRecordList SecondPar, ObjFromPar



			End If



			SelectedClassId$ = ObjFromPar.ValueAsInteger("CLASS_ID", 0)



			SelectedObjId$ = ObjFromPar.ValueAsInteger("OBJECT_ID", 0)



			Set SelectedObj = SmSession.ObjectStore.RetrieveObject(SelectedClassId, SelectedObjId)



			Set MetaInfo = SmSession.MetaInfo



			Set myQuery = SMSession.ObjectStore.NewQuery



			Set myQueryDef = myQuery.QueryDefinition



			Set myQueryDef = Nothing



			Set SelectedObjChildren = SelectedObj.RetrieveChildren(myQueryDef)



			ChildrenCount%=SelectedObjChildren.Count



			If ChildrenCount%<=0 Then																																														'Если нет дочерних компонентов, то скрипт не запускать																																									 



						msgbox SmSession.MetaInfo.SmClass(SelectedClassId$).ExternalName + " " + ObjFromPar.ValueAsString("CN_CODE",0) + " не имеет составляющих компонент"



			Stop



			End If



 



			Set NewBehavior = SmSession.ObjectStore.DefaultBehavior.Clone



			NewBehavior.InvokeScripts = False																																								 'Не вызывать скрипт, пока выполнятся операция



			NewBehavior.ViewObjectAuthorization = voaNotToCheck																										   'Не проверять авторизацию пользователя		



			NewBehavior.CheckAuthorization = false



  



			Set SmQuery = SmSession.ObjectStore.NewQuery



	Set QueryDef = SmQuery.QueryDefinition



			QueryDef.Roles.Add SmSession.MetaInfo.SmClassByName("Items").ClassId, "F"											   



			QueryDef.Roles.Add SmSession.MetaInfo.SmClassByName("Purchased part").ClassId, "S"					 



			QueryDef.Roles.Add SmSession.MetaInfo.SmClassByName("Items Tree").ClassId, "L"



 

			QueryDef.Select.Add "OBJECT_ID", "S", False																																	'Объявляем параметры, которые будем выводить в таблицу



			QueryDef.Select.Add "CN_CODE", "S", False



			QueryDef.Select.Add "CN_NAME", "S", False



			QueryDef.Select.Add "CN_SUPPLIER_DOCUMENT", "S", False



			QueryDef.Select.Add "CN_SUPPLIER", "S", False



			QueryDef.Select.Add "CN_CODE", "F", False																																	  



			QueryDef.Select.Add "CN_NAIMEN", "S", False																																  



			QueryDef.Select.Add "CN_QUANTITY", "L", False



			QueryDef.Select.Add "CN_OBOZN_NA_POSTAVKY", "S", False



			QueryDef.Select.Add "CN_PRIM", "S", False



			QueryDef.Select.Add "CLASS_ID", "S", False



			QueryDef.Select.Add "CN_COMMENT", "S", False



			QueryDef.Where.Add "", "OBJECT_ID", "=", SelectedObj.ObjectId, False, "F"	'Вот только по этому Where - выводяться все Purchased part'ы, непосредственные дети текущего объекта







'		   QueryDef.Where.Add "", "CLASS_ID", "=", "2533", False, "S"	 ' А вот по этому - вообще все из всей компоненты, ужас.... 2533-КЛАСС_АйДи Purchased Part'a



			QueryDef.OrderBy.Add "CN_CODE", 1, obtAscending, "S"



 

			Dim QueryDefinition1 As SmApplic.ISmQueryDefinition 



			Dim Parents As SmApplic.ISmObjects ' collection of objects 



			SmQuery.RunEx NewBehavior



 



			If SmQuery.QueryResult.RecordCount < 1 Then																																   'Проверяем, есть ли ПИ в данной компоненте



						MsgBox "В данной компоненте не найдено ни одного объекта класса <Purchased part>", ebOKOnly + ebInformation, "Сообщение"



						GoTo ENDD



			End If

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах


ja konechno ne smarteam programmer ..

no esli ubrat' is mnogestwa wsex detalej mnogestwo detalej 1go urovnia to poluchitsia list detalej ot 2go i nige ... ( chisto is matematicheskix soobragenij :) )

ili?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если это дерево, тогда зачем тебе делать Query?

Попробуй так:


Public Function GetItems(ByVal CurrentHttpContext As HttpContext, ByVal SmObject As SmarTeam.Std.Interop.SmarTeam.SmApplic.ISmObject) As SmarTeam.Std.Interop.SmarTeam.SmApplic.ISmObjects

			Try

				Dim SmartCRMRWH As New SmartCRM.Std.Connection.Helpers.SmartCRMReadWriteConnectionHelper

				Dim SmSession As SmarTeam.Std.Interop.SmarTeam.SmApplic.SmSession = SmartCRMRWH.SmSession(CurrentHttpContext)



				Dim QueryDefinition As SmarTeam.Std.Interop.SmarTeam.SmApplic.ISmQueryDefinition

				Dim Relations As SmarTeam.Std.Interop.SmarTeam.SmApplic.ISmObjects  ' collection of objects

				Dim Roles As SmarTeam.Std.Interop.SmarTeam.SmApplic.ISmQueryRoles ' query roles

				Dim QueryResultAttributes As SmarTeam.Std.Interop.SmarTeam.SmApplic.ISmQueryResultAttributes



				QueryDefinition = SmContact.ObjectStore.NewQueryDefinition()

				QueryResultAttributes = QueryDefinition.Select

				Roles = QueryDefinition.Roles

				Roles.Add(SmSession.MetaInfo.SmClassByName("Class Name").SuperClassId, "S")

				Roles.Add(SmSession.MetaInfo.SmClassByName("Relation Name").ClassId, "L")

				QueryResultAttributes.Add("OBJECT_ID", "S", False)



				Relations = SmContact.RetrieveRelations(QueryDefinition)

				If Relations.Count = 0 Then Return Nothing



				Return Relations

			Catch

				CurrentHttpContext.Response.Write(err.Desciption)

			End Try

			Return Nothing

		End Function

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Гоша, из математических соображений - это может быть и правильно, но тут это не прокатит...

Представьте дерево:

.......................................А1....................................................А2

.................Б11...........................Б12 ..............................Б21...............................Б22

.......В111..............В112..............В121..............В122..............В211..............В212..............В221............................В222

Г1111 Г1112 Г1121 Г1122 Г1211 Г1212 Г1221 Г1222 Г2111 Г2112 Г2121 Г2122 Г2211 Г2212 Г2221 Г2222

....................................................................................................

....................................................................................................

.

.

И.т.д. то есть...

Пусть каждый из этих элементов содежить хотя бы один объект класса Purchased Part. Так вот, щелкаю я к примеру по Б12 и вызываю мой скрипт.... Я хочю, в Query получить объекты класса Purchased Part из Б12 и из В121, В122 и из Г1211,Г1212,Г1221,Г1222 и т.д. (я выделил жирным..)

Так вот, мой вопрос состоит в том, как в QuerryDefinition описать условие Where чтобы я получал объекты нужного мне класса из выбранного элемента и из элементов, которые ниже его по дереву.... Если это делаеться как-то по другому, буду очень благодарен, если расскажете как... Я просто думаю, что я иду по правильному пути.. Но вот как это сделать - я не знаю.. уже всю голову сломал... И кстати, чтобы все это работало не зависимо от мерности вложений, т.е. так сказать универсально...

Заранее спасибо.

2Green_fx, На написоанное выше - не обращай внимания, я это писал еще до твоего поста, просто инет не работал весь день...

Так вот, я пока еще слету не разобрался, что тут ты написал, но щас я это на работу себе скину и бду там разбираться. Надеюсь, что поможет.. Заранее спасибо.

Изменено пользователем Герой

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу



  • Сообщения

    • Kelny
      А зачем в этой цепочке Altium? Меню Инструмены-Добавления... выбрать для запуска дополнение CircuitWorks. Далее выбрать меню CircuitWorks-Экспортировать в CircuitWorks. Из окна CircuitWorks в меню СОХРАНИТЬ КАК в IDF выбранной версии от 2 до 4 на выбор.
    • tm-ares
      Да, есть такая беда. Не весь инструмент доступен для обработки в NX. Как вариант, предлагаю использовать инструмент BORING_BAR_CHAMFER. И обрабатывать операцией GENERIC_MOTION (mill_multi-axis). Она берёт для симуляции BORING_BAR_CHAMFER. Смысл в том, что операцию придётся задавать вручную, т.е. все ходы придётся просчитывать самому. Благо, геометрия не сложная.   Вечером попробую что-нибудь наваять. Если получится - выложу...
    • Чингачгук
      просто его надо как следует встряхнуть, и все пройдет... вот так   Hide  
    • karachun
      Может просто стрелочка слишком длинная. Вообще включи отображение расчетной сетки, тогда станет видно где заканчивается расчетный домен.
    • soklakov
      я уже написал, но попробую еще раз. сначала вы решаете нелинейную статическую задачу, в которой жесткость системы зависит от перемещений. Далее выбрали какое-то фиксированное значение нагрузки. Для этого значения нагрузки определили матрицу жесткости. Общую, всю, включающую большие перемещения, контакты и физическую нелинейность, или только что-то одно из этого в зависимости от задачи. И дальше для этой матрицы жесткости провели модальный анализ. Вот о какой модальной задаче может идти речь. Третий раз писать?
    • ДОБРЯК
      В моих терминах.) Если продольная жесткость зависит от поперечных перемещений, а поперечная жесткость зависит от продольных перемещений, то о какой модальной задаче может идти речь?  Для прямолинейного стержня при равномерной продольной нагрузке этой зависимости нет. Нет поперечных перемещений, поэтому и зависимости нет.  А есть только линейная матрица жесткости и матрица начальных напряжений. Если приложить изгибающий момент или поперечную силу или искривить стержень - появятся поперечные перемещения. И появится зависимость продольной жесткости от поперечных перемещений, а поперечной жесткости от продольных перемещений.  О какой модальной задаче в этом случае может идти речь? Когда жесткость явно зависит от перемещений?    
    • soklakov
      хм... уж не изменилось ли мнение сказавшего за восемь лет.
    • Anat2015
      Какие приводы стоят (скорее всего, аналоговые?) и собираетесь ли вы их заменять также? Современные УЧПУ от Сименса и Фанука подразумевают, что и приводы в комплекте с ними устанавливаются, а это удовольствие будет сильно подороже, чем само УЧПУ. Как дешевый вариант - Sinumerik-808 (пока еще можно купить).
    • sennik53
      Какая компановка 4 и 5-й оси?
    • Kelny
      Оба эскиза родители своих потомков и потомки зависимы от своих родителей-эскизов.