Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Элемент входит в группу (число прочтений - 3361 )
DrunkProgrammer
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Элемент входит в группу
04. Марта 2009 :: 11:59
Печать  
Доброе время суток!
Подскажите плз, как выбрать элементы справочника по условию вхождения в группу, если эта группа сама получена в результате запроса? Т.е. вариант "УложитьСписокОбъектов" на сколько я понял не подходит.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Элемент входит в группу
Ответ #1 - 04. Марта 2009 :: 12:14
Печать  
Если это другой запрс то укладывай новую группу в новую временную таблицу и все получиться.
Если это все в рамках одного запроса то рассписывай подробно запрос.
  
Наверх
 
IP записан
 
DrunkProgrammer
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Re: Элемент входит в группу
Ответ #2 - 04. Марта 2009 :: 12:17
Печать  
Z1 писал(а) 04. Марта 2009 :: 12:14:
Если это все в рамках одного запроса то рассписывай подробно запрос.

В смысле?
  
Наверх
 
IP записан
 
ybill
Junior Member
**
Отсутствует


I Love ...!

Сообщений: 35
Зарегистрирован: 01. Сентября 2008
Пол: Мужской
Re: Элемент входит в группу
Ответ #3 - 04. Марта 2009 :: 13:03
Печать  
DrunkProgrammer писал(а) 04. Марта 2009 :: 11:59:
Подскажите плз, как выбрать элементы справочника по условию вхождения в группу, если эта группа сама получена в результате запроса? Т.е. вариант "УложитьСписокОбъектов" на сколько я понял не подходит.


Что ты имеешь в виду под словом группа?
Если это набор элементов, полученных подзапросом, то ставь условие
where Элемент in (select........)
Если же ты имеешь ввиду группу в терминах 1С, то я делал двумя запросами - первым получал нужную группу, затем выполнял уложитьсписокобъектов, а потом уже запускал основной запрос.

Если написано непонятно, то пиши текст своего запроса
  
Наверх
ICQ  
IP записан
 
DrunkProgrammer
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Re: Элемент входит в группу
Ответ #4 - 05. Марта 2009 :: 03:31
Печать  
ybill писал(а) 04. Марта 2009 :: 13:03:
...я делал двумя запросами - первым получал нужную группу, затем выполнял уложитьсписокобъектов, а потом уже запускал основной запрос.

Да двумя запросами понятно что можно, только в результате первого запроса в моем случае выходит много разных групп, а вместе с ними куча другой информации. Очень не хочется всю эту кучу загонять потом в качестве параметров во второй запрос.
  
Наверх
 
IP записан
 
DrunkProgrammer
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Re: Элемент входит в группу
Ответ #5 - 05. Марта 2009 :: 04:04
Печать  
В общем решил проблему следующим образом:
В моем случае глубина иерархии - 3, т.е. у группы может быть только одна подгруппа. Итак в первом поле запроса у меня есть некоторая группа, например "Главная", во второе поле запроса я используя LEFT JOIN вытаскиваю все группы, у которых parentID равен ID данной группы. Дальше чтобы определить, входит ли элемент справочника в группу "Главная", я сравниваю его parentID с ID группы из первого поля и ID группы из второго поля. Если одно из равенств = true и isfolder <> 1, значит элемент входит в группу "Главная".

Вот не раз уж замечаю, с утра мозги в течение 5 минут решают проблему, которую вечером не решают за час.  Подмигивание
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Элемент входит в группу
Ответ #6 - 05. Марта 2009 :: 05:15
Печать  
1.Если нужно искать только вхождение в подпапку первого уровня то
заводим реквизит ГлПапка для элементов и заполняем его
нужным значением. При перемещении элемента в другую папку корректируем это значение.
Тогда вхождение в конкретную папку будет просто простое сравнение реквизита ГлПапка с конкретным значением.
2. ТАкже задача вполне решается и с использованием УложитьСписокОбъектов
  
Наверх
 
IP записан
 
ybill
Junior Member
**
Отсутствует


I Love ...!

Сообщений: 35
Зарегистрирован: 01. Сентября 2008
Пол: Мужской
Re: Элемент входит в группу
Ответ #7 - 05. Марта 2009 :: 07:44
Печать  
DrunkProgrammer писал(а) 05. Марта 2009 :: 03:31:
ybill писал(а) 04. Марта 2009 :: 13:03:
...я делал двумя запросами - первым получал нужную группу, затем выполнял уложитьсписокобъектов, а потом уже запускал основной запрос.

Да двумя запросами понятно что можно, только в результате первого запроса в моем случае выходит много разных групп, а вместе с ними куча другой информации. Очень не хочется всю эту кучу загонять потом в качестве параметров во второй запрос.


1.Получай первым запросом только группу, а всю остальную информацию получай вторым запросом.
2.Запусти профайлер и посмотри код, который выполняется на SQL при УложитьСписокОбъектов и внедри в свой запрос.

В любом случае надо смотреть стоит ли овчинка выделки. У меня в аналогичной ситуации "единый" запрос отрабатыват за 3 минуты, а когда я стал набор элементов справочника предварительно выгружать во временную таблицу, а потом в основном запросе ставил условие по ней, то вся конструкция стала выполняться за 15 секунд.
  
Наверх
ICQ  
IP записан
 
DrunkProgrammer
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Re: Элемент входит в группу
Ответ #8 - 05. Марта 2009 :: 12:03
Печать  
Про временную таблицу слышу впервые, можно по подробнее?
  
Наверх
 
IP записан
 
ol
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 272
Местоположение: Санкт-Петербург
Зарегистрирован: 24. Января 2009
Пол: Мужской
Re: Элемент входит в группу
Ответ #9 - 06. Марта 2009 :: 10:48
Печать  
вот пример создания временной таблицы


Код
Выбрать все
глМД=СоздатьОбъект("metadatawork");
ИмяТаблицы="МояВременнаяТаблица";

глRS.Выполнить("create table "+ИмяТаблицы+"(elementO char(9), elementN char(9))");
табЗапросаИТ.ВыбратьСтроки();
Пока табЗапросаИТ.ПолучитьСтроку()=1 цикл
	табДублей=табЗапросаИТ.тзПотомки;
	табДублей.ВыбратьСтроки();
	Пока табДублей.ПолучитьСтроку()=1 цикл
		  глRS.Выполнить("insert into "+ИмяТаблицы+
" values('"+
глМД.ЗначениеВСтрокуБД(табДублей.ЭлементСправочника)+		"','"+
глМД.ЗначениеВСтрокуБД(табЗапросаИТ.ЭлементСправочника)+"')");
	КонецЦикла;
КонецЦикла;
 



потом можешь с ней делать, что угодно

Код
Выбрать все
таб=глRS.ВыполнитьИнструкцию("select * from "+ИмяТаблицы);
 


  
Наверх
ICQ  
IP записан
 
DrunkProgrammer
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Re: Элемент входит в группу
Ответ #10 - 06. Марта 2009 :: 12:31
Печать  
Надо будет как-нибудь испробовать сей инструмент.
Спасибо.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать