Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема фильтр ИТЗ, почему не работает по двум индексам (число прочтений - 1898 )
VoV
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 07. Августа 2008
фильтр ИТЗ, почему не работает по двум индексам
07. Августа 2008 :: 13:49
Печать  
Почему фильтр работает только по первой колонке, т.е. в  результат попадает 1000 строк, а не по двум сразу?
Код
Выбрать все
тз = СоздатьОбъект("ТЗ");
	тз.НоваяКолонка("Первая", "Число", 10, 0);
	тз.НоваяКолонка("Вторая", "Число", 10, 0);
	тз.НоваяКолонка("Третья", "Число", 10, 0);

	Для инд = 1 По 1000 Цикл

		тз.НоваяСтрока();
		тз.Первая = инд; тз.Вторая = инд * 2; тз.Третья = инд * 3;
	КонецЦикла;

	ТЗ_З = СоздатьОбъект("ИндексированнаяТаблица");
	ТЗ_З1 = СоздатьОбъект("ИндексированнаяТаблица");


	ТЗ_З.Загрузить(ТЗ);

	СписФильтрНач = Создатьобъект("СписокЗначений");
	СписФильтрНач.ДобавитьЗначение(0);
	СписФильтрНач.ДобавитьЗначение(20);
	СписФильтрКон = Создатьобъект("СписокЗначений");
	СписФильтрКон.ДобавитьЗначение(1000);
	СписФильтрКон.ДобавитьЗначение(30);

	ТЗ_З.ДобавитьИндекс("инПерваяВторая","Первая,Вторая", 0);

	ТЗ_З.УстановитьФильтр(СписФильтрНач,СписФильтрКон,"инПерваяВторая", 0);  
	ТЗ_З.Выгрузить(ТЗ_З1, "инПерваяВторая");

	ТЗ_З1.Показать(); 

  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: фильтр ИТЗ, почему не работает по двум индекса
Ответ #1 - 07. Августа 2008 :: 14:42
Печать  
Потому что фильтр по составному индексу - это не то же самое, что и два фильтра по двум индексам.
Тебе бы по составным индексам что-нибудь почитать.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
VoV
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 07. Августа 2008
Re: фильтр ИТЗ, почему не работает по двум индекса
Ответ #2 - 07. Августа 2008 :: 15:09
Печать  
kms писал(а) 07. Августа 2008 :: 14:42:
Потому что фильтр по составному индексу - это не то же самое, что и два фильтра по двум индексам.
Тебе бы по составным индексам что-нибудь почитать.


Ну да с определениями у меня слабо, ну дак как проблему можно решить или нет, чтобы не выгружать/загружать.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: фильтр ИТЗ, почему не работает по двум индекса
Ответ #3 - 07. Августа 2008 :: 15:15
Печать  
А ты что хотел из этой выборки получить-то, кстати?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
VoV
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 07. Августа 2008
Re: фильтр ИТЗ, почему не работает по двум индекса
Ответ #4 - 07. Августа 2008 :: 15:25
Печать  
Сформировать таблицу и фильтровать ее по требованию. При этом ODBCRecordSet не подходит по причине N-го количества пользователей. Есть таблица и ее нужно фильтровать, отдельно обновлять.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: фильтр ИТЗ, почему не работает по двум индекса
Ответ #5 - 07. Августа 2008 :: 15:31
Печать  
VoV писал(а) 07. Августа 2008 :: 15:25:
Сформировать таблицу и фильтровать ее по требованию. При этом ODBCRecordSet не подходит по причине N-го количества пользователей. Есть таблица и ее нужно фильтровать, отдельно обновлять.

Да я понимаю, мне интересно было понять, что в твоем понимании значит фильтр "0, 20" - "1000, 30".

Ладн, суть составного фильтра (и индекса) простая: сравниваются первые колонки, если они равны - сравниваются вторые - и т.д.
Таким образом, твой фильтр дает выборку
от
- Первая 0, а Вторая - 20
до
- Первая 1000, а Вторая - 30

В итоге, в твоем случае, ты получаешь не 1000, а 999 значений, ибо последнее значение (1000, 2000) больше верхней границы фильтра (1000, 30).
  

De quelle planète es-tu?
Наверх
 
IP записан
 
VoV
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 07. Августа 2008
Re: фильтр ИТЗ, почему не работает по двум индекса
Ответ #6 - 07. Августа 2008 :: 15:42
Печать  
kms писал(а) 07. Августа 2008 :: 15:31:
VoV писал(а) 07. Августа 2008 :: 15:25:
Сформировать таблицу и фильтровать ее по требованию. При этом ODBCRecordSet не подходит по причине N-го количества пользователей. Есть таблица и ее нужно фильтровать, отдельно обновлять.

Да я понимаю, мне интересно было понять, что в твоем понимании значит фильтр "0, 20" - "1000, 30".

Ладн, суть составного фильтра (и индекса) простая: сравниваются первые колонки, если они равны - сравниваются вторые - и т.д.
Таким образом, твой фильтр дает выборку
от
- Первая 0, а Вторая - 20
до
- Первая 1000, а Вторая - 30

В итоге, в твоем случае, ты получаешь не 1000, а 999 значений, ибо последнее значение (1000, 2000) больше верхней границы фильтра (1000, 30).


(0,20;1000,30). Кстати ТЗ_З.Подмножество(СписФильтрНач, 2, "инПерваяВторая"); - так работает, но интересует интервал

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