Перейти к публикации

Вопрос По 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, На написоанное выше - не обращай внимания, я это писал еще до твоего поста, просто инет не работал весь день...

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

Изменено пользователем Герой
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

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

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




  • Сообщения

    • Guhl
      Есть вот такие штуки. Если не лень, то можете на оптопарах hcpl спаять самому На плк простая программа с высокоскоростным счетчиком  Как вариант, по прерываню от нуль метки переписывать значенин счетчика в регистр     А фанук сам не умеет разве в диагностике показывать количество импульсов, которые насчитал?
    • gudstartup
      это как например у датчика уровни ttl какой плк работает с ttl уровнями а если уж проверять то нужен тестер сигналов например lir 590 но надо жгут изготавливать и разъем который на аi приводах стоит для энкодера проще всего проверить заменой датчика только вот со сроками покупки беда  хотя может шестерня виновата??
    • scrimline
      Сомневаюсь что попало что-то, скорее всего оператор который работал до меня этой рукой не пользовался да и за эмульсией не следил. Думаю скорее закоксовалось, поскольку после команды рука стояла на месте секунды 2-3 и начала опускаться с рывком. По поводу ладдера, постараюсь скинуть, но на нашем предприятии проблемы и с флешками и с общей сетью, да и ПК на рабочем месте нет. 
    • Bot
      Команда CSD пообщалась с представителями компании «КС-ПРО» и выяснила, как происходило внедрение G-Station, сколько времени занял процесс перехода на новую платформу, узнала об организации совместной работы и о функционале платформы. Основное направление компании «КС-ПРО» — оказание комплекса услуг технического заказчика, в том числе и для крупных офисных девелоперов. Внедрение G-Station в «КС-ПРО» проходило в ноябре 2022 года. G-Station — это всего лишь один из модулей комплексной платформы G-Tech Suite. Специалисты компании отмечают, что G-Station действительно стала хорошей альтернативой BIM 360. Специалисты «КС-ПРО» получили доступ к полноценной единой информационной среде с облачным хранилищем файлов и моделей, а также такими возможностями, как: Управление проектами, пользователями и подрядчиками; Создание чек-листов; Создание шаблонов чек-листов с процессами согласования; Передача документации на строительную площадку; Просмотр 3D- и 2D моделей [...] View the full article
    • Bot
      АСКОН, российский разработчик инженерного программного обеспечения и ИТ-интегратор, подвел итоги 2023 года. Выручка компании выросла на 47% и достигла 5,6 млрд рублей, штат сотрудников увеличился до 1250 человек. Клиентская база пополнилась тысячью предприятий, и сегодня с решениями АСКОН работают почти 16 000 заказчиков из всех отраслей промышленности и строительства. На динамику бизнеса положительно повлияли рост промышленного производства, сопровождающийся инвестициями в цифровизацию, крупные инфраструктурные проекты и курс страны на технологический суверенитет. Лидерские позиции компании в разработке и интеграции подтверждены профессиональными рейтингами. АСКОН, единственный из разработчиков инженерного ПО, вошел в ТОП-100 российских ИТ-компаний в рейтинге CNews; второй год подряд — в десятку крупнейших ИТ-поставщиков в сфере промышленности и строительства по данным TAdviser; впервые назван в тройке ведущих proptech-компаний как [...] View the full article
    • senat93
      @tribogatirya FORD 800 mm есть пост с кинематикой. По стойкам Siemens 808d , 828 там надо смотреть что за станок,какие оси и т.д. Если что,пиши lynxsenat@gmail.com, по цене договоримся. 
    • esergey
      это всего лишь видео - я не шарю в этом ...  
    • lem_on
      ну с дуру известно что сломать можно.
    • Viktor2004
      руку привязки так сломать легко
    • lem_on
      По моему вполне логично если станок вывалится в ошибку если рука не доехала до места. У меня так же если кулачки или деталь на пути, просто пихаеш ее до места и станок опять активен. Но нынешние пановья даже не могут написать модель станка.
×
×
  • Создать...