Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема ИТЗ: фильтр с диапазонами по нескольким колонкам (число прочтений - 2291 )
alexmyt
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 22
Зарегистрирован: 26. Мая 2006
ИТЗ: фильтр с диапазонами по нескольким колонкам
17. Августа 2009 :: 07:37
Печать  
Здравствуйте. Помогите, пожалуйста, понять логику фильтров в ИТЗ.

Дано: Список открытых сбережений с указанием отделения, даты открытия счета и процентной ставки по счету (ИТЗ с тремя колонками):
Код
Выбрать все
итзВклады.НоваяКолонка("Отделение");
итзВклады.НоваяКолонка("ДатаОткрытия");
итзВклады.НоваяКолонка("ПроцСтавка"); 



Необходимо: выбрать счета 1) по определенному отделению _Отделение 2) в заданном периоде от НачДата до КонДата 3) с процентной ставкой >= 0.01

Делаю индекс, устанавливаю фильтр:
Код
Выбрать все
итзВклады.ДобавитьИндекс("Отделение","#Отделение,ДатаОткрытия,ПроцСтавка");
_сзКлючН.УдалитьВсе();
_сзКлючН.ДобавитьЗначение(_Отделение);
_сзКлючН.ДобавитьЗначение(НачДата);
_сзКлючН.ДобавитьЗначение(0.01);

_сзКлючВ.УдалитьВсе();
_сзКлючВ.ДобавитьЗначение(_Отделение);
_сзКлючВ.ДобавитьЗначение(КонДата);
_сзКлючВ.ДобавитьЗначение(100); 



В результате:
1) фильтр по отедлениям работает правильно
2) фильтр по датам работает правильно
3) фильтр по % ставке работает правильно только когда ДатаОткрытия = НачДата (т.е. когда идекс точно соответствует нижней границе фильтра), а когда ДатаОткрытия > НачДата - фильтр по ставке не работает, т.е. выводятся счета со ставкой от 0%.

Подскажите, плиз, где я ошибаюсь и как сделать правильно.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ИТЗ: фильтр с диапазонами по нескольким колонкам
Ответ #1 - 17. Августа 2009 :: 07:54
Печать  
Так как ты хочешь с ИТЗ не получится.
Есть 2 пути: либо поэтапно получай новую ИТЗ от отфильтрованной, либо загоняй всё во временную табличку и оттуда уже вытаскивай запросом.
  
Наверх
 
IP записан
 
alexmyt
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 22
Зарегистрирован: 26. Мая 2006
Re: ИТЗ: фильтр с диапазонами по нескольким колонкам
Ответ #2 - 17. Августа 2009 :: 07:59
Печать  
А можно чуть по-подробней - почему именно не получится?
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ИТЗ: фильтр с диапазонами по нескольким колонкам
Ответ #3 - 17. Августа 2009 :: 08:13
Печать  
На пальцах мне это трудно объяснить. Это как бы множество. Ты же мыслишь в терминах SQL, добавляя новый фильтр.

А вообще откуда данные берешь? И почему не хочется во временную табличку + запрос?
  
Наверх
 
IP записан
 
alexmyt
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 22
Зарегистрирован: 26. Мая 2006
Re: ИТЗ: фильтр с диапазонами по нескольким колонкам
Ответ #4 - 17. Августа 2009 :: 09:26
Печать  
Данные в ИТЗ запихиваю сам, изначально они в xml хранятся.

Мне алгоритм переписать не трудно (правда получится не так красивоПечаль ), мне просто хочется знать -  на будущее - в чем проблема, чтобы потом не наступать на те же грабли.

Я так понимаю что проблема в том что одновременно используется два разных диапазона фильтра, по дате и по проц.ставке?
  
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: ИТЗ: фильтр с диапазонами по нескольким колонкам
Ответ #5 - 17. Августа 2009 :: 09:33
Печать  
Не уверен, но вроде принцып такой:
Индекс это строка.
По этой строке накладывается фильтр.
примерно Отделение101.01.20090.01 и Отделение101.12.2009100
сравнение строк и отсюда не то что тебе хотелось бы.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ИТЗ: фильтр с диапазонами по нескольким колонкам
Ответ #6 - 17. Августа 2009 :: 10:28
Печать  
alexmyt писал(а) 17. Августа 2009 :: 09:26:
Данные в ИТЗ запихиваю сам, изначально они в xml хранятся.

Мне алгоритм переписать не трудно (правда получится не так красивоПечаль ), мне просто хочется знать -  на будущее - в чем проблема, чтобы потом не наступать на те же грабли.

Я так понимаю что проблема в том что одновременно используется два разных диапазона фильтра, по дате и по проц.ставке?

Пример. Есть ИТЗ с индексом "Склад+Товар". Устанавливаем по нему фильтр.
Нижняя граница= "Склад1"+"Пиво Волжанин"
Верхняя граница="Склад2"+"Конфетка Барбарис"
(все значения - не строки, а конкретные объекты базы)

Какие значения мы должны получить в отфильтрованной ИТЗ?
  
Наверх
 
IP записан
 
alexmyt
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 22
Зарегистрирован: 26. Мая 2006
Re: ИТЗ: фильтр с диапазонами по нескольким колонкам
Ответ #7 - 17. Августа 2009 :: 10:42
Печать  
JohnyDeath писал(а) 17. Августа 2009 :: 10:28:
Пример. Есть ИТЗ с индексом "Склад+Товар". Устанавливаем по нему фильтр.
Нижняя граница= "Склад1"+"Пиво Волжанин"
Верхняя граница="Склад2"+"Конфетка Барбарис"
(все значения - не строки, а конкретные объекты базы)

Какие значения мы должны получить в отфильтрованной ИТЗ?


Я-то в фильтр пихаю не объекты, а конкретные типы данных, которые легко сравниваются (вернее, один объект есть, но его не нужно сравнивать на больше/меньше). И в Индексированной таблице задокументирована возможность указывать границы "от" и "до". И фильтр по двум полям из трех у меня работает нормально Улыбка
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ИТЗ: фильтр с диапазонами по нескольким колонкам
Ответ #8 - 17. Августа 2009 :: 11:37
Печать  
По двум полям он у тебя работает "нормально" только потому, что и в верхней и в нижней границе один из фильтров - одинаковый.
А вообще фильтр и так работает нормально. Если он что-то делает не так, как ты задумал - это еще ничего не значит Подмигивание
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать