Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Множесвенный фильтр в OLEDB (число прочтений - 2629 )
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Множесвенный фильтр в OLEDB
13. Апреля 2007 :: 18:14
Печать  
Применяю метод "УложитьСписокОбъектов.
"Укладываю" группу справочника - фильтр работает.
Укладываю список значений с элементами - работает.
Укладываю список значений с группами - фильтр перестает работать.
Как быть?
  

Константин
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Множесвенный фильтр в OLEDB
Ответ #1 - 13. Апреля 2007 :: 18:31
Печать  
Укладываются элементы, но не группы (т.е. элементы, принадлежащие этим группам).
Если в твоем списке только одни группы, то в таблице ничего не будет.
  
Наверх
ICQ  
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Множесвенный фильтр в OLEDB
Ответ #2 - 13. Апреля 2007 :: 18:41
Печать  
Чтоб понятней было:
Код
Выбрать все
//*******************************************
Процедура Сформировать()
	База  = СоздатьОбъект("OLEDBData");
	База.Соединение("Provider=VFPOLEDB.1;
	|Deleted=Yes;
	|Mode=ReadWrite;
	|Collating Sequence=RUSSIAN;
	|Data Source=" + КаталогИБ());
	Запрос = База.СоздатьКоманду();
	Temp = "";
	Запрос.УложитьСписокОбъектов(Список1,Temp,"Номенклатура");
	ТекстЗапроса = "
	|SELECT
	|	Спр.ID as [Номенклатура $Справочник.Номенклатура]
	|FROM
	|	$Справочник.Номенклатура as Спр
	|WHERE
	|	Спр.ID IN (SELECT Val FROM " + Temp + ")
    |";
    ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
	ТЗ.ВыбратьСтроки();
	Пока ТЗ.ПолучитьСтроку() = 1 Цикл
		Если Список2.НайтиЗначение(ТЗ.Номенклатура.Родитель) = 0
		Тогда
			Список2.ДобавитьЗначение(ТЗ.Номенклатура.Родитель);
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры
 

,где Список1 и Список2 - СЗ на форме , в 1-м "лежат товары или группы, 2-й для проверки.Когда в Список1 помещаю порядка 10 и выше групп из справочника - попадают "чужие"
  

Константин
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Множесвенный фильтр в OLEDB
Ответ #3 - 13. Апреля 2007 :: 19:06
Печать  
Добавлю только, что для чистоты эксперимента в Список1 добавляю только группы, не содержащие подгрупп. Результаты всякий раз разные - то все нормально, то откуда ни возьмись залетают совсем из другой оперы, причем без всякой системы. Все это при больших объемах, такое чувство, что ВК не причем, а глючить начинает память.
Кстати особенно заметно сбоит при работе через терминал. Наверное придется снала в Список1 уложить конкретно элементы, входящие в выбранные группы? Я пробовал - работает корректно, но много времени теряется на обработку списка.
  

Константин
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Множесвенный фильтр в OLEDB
Ответ #4 - 13. Апреля 2007 :: 20:52
Печать  
Можешь создать тестовый случай?
Данные и обработка, которые с некоторой (лучше с большой) вероятностью воссоздают твою ситуацию.
  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Множесвенный фильтр в OLEDB
Ответ #5 - 13. Апреля 2007 :: 22:13
Печать  
Если тормозит...
Как выход - использовать подзапрос
Никаких тормозов на 20000 элементах в "уложенном" списке не наблюдалось
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Множесвенный фильтр в OLEDB
Ответ #6 - 14. Апреля 2007 :: 10:28
Печать  
Цитата:
Можешь создать тестовый случай?
Не получается.Я уже писал, что проскакивают сквозь фильтр "залетные" без какой-либо системы. Причем это заметили юзеры - нет-нет, да и вылезет в отчете кто-нить чужой.
  

Константин
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Множесвенный фильтр в OLEDB
Ответ #7 - 14. Апреля 2007 :: 10:33
Печать  
Цитата:
Как выход - использовать подзапрос
Пока - единственный. Но все равно тормозит, правда работает четко. Я поместил текст запроса в цикл по количеству строк в списке с группами. А может есть какая-нибудь другая идея?
  

Константин
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Множесвенный фильтр в OLEDB
Ответ #8 - 14. Апреля 2007 :: 10:47
Печать  
Да, вот код:
Код
Выбрать все
	ТекстЗапроса = "";
	Для А = 1 По Список1.РазмерСписка() Цикл
		Temp = "";
		Запрос.УложитьСписокОбъектов(Список1.ПолучитьЗначение(А),Temp,"Номенклатура");
		ТекстЗапроса = ТекстЗапроса + ?(А = 1,"","UNION ALL") + "
		|SELECT
		|	Спр.ID as [Номенклатура $Справочник.Номенклатура]
		|FROM
		|	$Справочник.Номенклатура as Спр
		|WHERE
		|	Спр.ID IN (SELECT Val FROM " + Temp + ")
	    |";
	КонецЦикла;
 

  

Константин
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать