Страница 1 из 1

Как перебрать в форме действия все дочерние объекты?

Добавлено: 08 дек 2006, 09:12
Александр
Не подскажете, кто знает...
Проблема такая-есть родительский объект, у него есть 10 дочерних разного типа

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

1. Начало
-нажимаю на поле объект - открывается список выбора
-выбираю первый объект
-устанавливаю атрибут (этот объект больше не появится в списке)
-Update
-Goto(Начало)

т.е. в превых 7 циклах все время приходится открывать список выбранных объектов и что-то выбирать и только когда остается последний объект он выбирается автоматически.

А как сделать так чтобы в поле объект сразу попадал первый попавшийся объект (удовлетворяющий условию) и таким образом перебрать все объекты не используя окно выбора?

Юрий может вы подскажете, по идее нужен какй-то SQL запрос через f_ExecSQLSelect... единственное что-он возвращает только строку а нужно ID объекта

Добавлено: 08 дек 2006, 21:01
Старик Крупский
А это, кстати, очень просто. Лоция высылает по этому поводу пример. Перескажу своими словами: используем f_ExecSQLSelect и вытаскиваем потомка с максимальным (или минимальным) айдишником, но у которого нет данного атрибута или он не отвечает каким-либо условиям. Потом делаем объекту setbyid, устанавливаем атрибут и снова делаем запрос. если запрос вернул пустую строку (не помню null или ''), то выходим из цикла. Даже форма не нужна

Добавлено: 09 дек 2006, 00:45
Anderyt
да, без сиквел-запроса перебор дочерних объектов (да и вообще, нескольких объектов) в действии будет очень неудобным.
надеюсь, еще к месту:

Код: Выделить всё

Var_IDs = Set ( f_ExecSQLSelect_2('
select link_id 
from lsdbo.tree_link_view 
where 
parent_id ='+ a_Object+ '
and link_id in 
(select av.object_id 
from lsdbo.value_string_view vs
, lsdbo.attrib_value_view av 
where av.value_id = vs.id 
and 
av.attrib_id = 774303840200000 
and 
vs.value =~''+var_author+'~')','/','-') +'-' )
в Var_IDs записывается СТРОКА с ИД, потом их нужно перебирать в цикле (хотя вариант с мах (или min) гораздо изящнее) и использовать setbyid. приведенный запрос вытаскивает те объекты, которые входят в объект a_Object и у которых арибут с ИД 774303840200000 равен значению переменной var_author. а... тут еще по идее нужно добавить в условие отбора указание типа связи, чтобы попадали объекты, входящие по связи Дерево проектов. кажется... у нас модель данных не предполагает других связанных объектов, поэтому запрос работает нормально и без этого условия. я посмотрю после выходных, на всякий случай и дам знать ;-)