11.10.2011, 11:41 | #1 |
Участник
|
Добрый день.
Передо мной встала задача наложить фильтр на форму. Таблица к которой привязана к форме одна. На неё нужно наложить фильтр который является выборкой полей из второй таблицы....Вышел я из ситуации так. Создал переменные и в них пихаю результаты выборки по первой таблице через '|' а потом накладываю эти переменные на таблицу формы через SETFILTER. Но столкнулся с проблемой что длина выборки....фильтра превышает уже длину текстовой переменной. Другими словами тупик...Как можно обойти эту ситуацию.... может возможно наложить как нить иначе фильтр на форму? Спасибо! |
|
11.10.2011, 12:30 | #2 |
Участник
|
Может быть, поможет такой способ.
В цикле по отобранным записям второй таблицы фильтруйте по значению из второй таблицы первую таблицу и делайте ей MARK(TRUE). Затем отфильтруйте первую MARKEDONLY(TRUE). |
|
11.10.2011, 15:54 | #3 |
Участник
|
Milk Спасибо! Сам так думал сделать но не решался.... работает отлично но только точки смущают :-)
|
|
11.10.2011, 16:55 | #4 |
Участник
|
Цитата:
Сообщение от Shaitan-Babay
Добрый день.
Передо мной встала задача наложить фильтр на форму. Таблица к которой привязана к форме одна. На неё нужно наложить фильтр который является выборкой полей из второй таблицы....Вышел я из ситуации так. Создал переменные и в них пихаю результаты выборки по первой таблице через '|' а потом накладываю эти переменные на таблицу формы через SETFILTER. Но столкнулся с проблемой что длина выборки....фильтра превышает уже длину текстовой переменной. Другими словами тупик...Как можно обойти эту ситуацию.... может возможно наложить как нить иначе фильтр на форму? Спасибо! |
|
12.10.2011, 11:41 | #5 |
Участник
|
Fly Я так сделал сразу....но когда количество выборки превышает более 100 значений и текстовая переменная переполняется
Так что это не выход....хотя и очень удобно конечно :-) |
|
12.10.2011, 12:12 | #6 |
Участник
|
Shaitan-Babay, Fly говорит про другую переменную не текстовую, а рековую. При получении одного значения из фильтра тут же отбираются записи по нему и записываем в темповую (временную) переменную той же таблицы. Повторяем так для всех значений фильтра и потом выводим в форме.
|
|
12.10.2011, 13:35 | #7 |
Участник
|
InTacto Хм интересное предложение...попробую. Спасибо!
|
|
22.11.2012, 17:22 | #8 |
Участник
|
А я вот с чем столкнулся. Завожу текстовую переменную Filter.
Код: Filter := 'значение1|значение2|значение3'; SETFILTER("Нужное Поле",'%1',Filter); Значение фильтра 'значение1|значение2|значение3' в поле "Нужное Поле" в таблице слишком длинное для этого типа поля. Тип: Code20 То есть он не понимает фильтр именно как фильтр, а принимает его просто как длинное значение. Что я делаю не так? При этом по F7 фильтрует этим же значением на ура. |
|
22.11.2012, 17:49 | #9 |
Участник
|
Цитата:
Сообщение от Васыо
А я вот с чем столкнулся. Завожу текстовую переменную Filter.
Код: Filter := 'значение1|значение2|значение3'; SETFILTER("Нужное Поле",'%1',Filter); Значение фильтра 'значение1|значение2|значение3' в поле "Нужное Поле" в таблице слишком длинное для этого типа поля. Тип: Code20 То есть он не понимает фильтр именно как фильтр, а принимает его просто как длинное значение. Что я делаю не так? При этом по F7 фильтрует этим же значением на ура. % нужен, если мы фильтр составляем |
|
22.11.2012, 18:12 | #10 |
Участник
|
Можно определять "нужность" записи, переписав триггера OnFind(), OnNext(). Здесь можно обрабатывать условие показа любой сложности. Подтормаживать будет - да. Но ведь вам это и надо))
|
|
26.11.2012, 13:30 | #11 |
Участник
|
А еще можно в таблицу 1 добавить вычисляемых полей Lookup на нужные поля Таблицы 2. И накладывайте фильтры в обычном порядке.
|
|
26.11.2012, 14:40 | #12 |
Участник
|
|
|
26.11.2012, 15:33 | #13 |
Участник
|
Согласен. Зато в дальнейшем работа с формой ничем не будет отличаться от варианта (почти), когда все интересующие пользователя поля находятся в одной таблице, на которой построена форма. Главное накидать решений, дальше человек разберется, что использовать, что нет. Пусть хотя бы видит различные варианты.
|
|
26.11.2012, 17:29 | #14 |
Участник
|
Цитата:
Сообщение от Васыо
А я вот с чем столкнулся. Завожу текстовую переменную Filter.
Код: Filter := 'значение1|значение2|значение3'; SETFILTER("Нужное Поле",'%1',Filter); Значение фильтра 'значение1|значение2|значение3' в поле "Нужное Поле" в таблице слишком длинное для этого типа поля. Тип: Code20 То есть он не понимает фильтр именно как фильтр, а принимает его просто как длинное значение. Что я делаю не так? При этом по F7 фильтрует этим же значением на ура. То есть если поле Code5 то фильтр Значение1|Значение2 будет генерить ошибку Знач1|Знач2 отработает.
__________________
Want to believe... |
|
27.11.2012, 13:53 | #15 |
Участник
|
Не совсем применимо к этой задаче, но на ту же тему.
Можно еще использовать функцию сокращения фильтра, преобразующую фильтр '1|2|3|5|6|7|9' в '1..3|5..7|9' Код здесь |
|
07.12.2012, 16:07 | #16 |
Участник
|
Цитата:
Вставлю и свои 5 копеек, но уже по этой реализации - см в стандарте функцию GetSelectionFilter() формы 31 Item List |
|