|
21.01.2009, 20:41 | #1 |
Участник
|
Подскажите красивое решение задачи (поиск данных на форме)
Имеется главная форма (плана InventTable, CustTable, BusRelTable). Необходимо к ней приделать панель с поиском - около 10 полей работающих вместе (AND условие), каждое поле подразумевает не точное совпадение, а *что_ищем* (like условие).
При этом все это должно работать совместно с range поставленными при вызове формы, а также стандартными фильтрами формы (например опции сверху BusRelTable - "Показать все", "Тип" и т.д.) Пример: показать всех клиентов у которых в имени есть "сель", из группы "ПостКлиенты", с номером телефона в котором есть "095" а в адресе "деревня". Остальные фильтры пустые. Поиск не контекстный, по кнопке. В прошлый раз когда такое требовалось сделал через sets, работало как надо, но как по мне получилось коряво и не очень быстро. Думаю не у меня первого такая задача, интересно какие еще могут быть варианты ее решения.
__________________
_databaseTransDelete ... bl@$ ! |
|
21.01.2009, 21:44 | #2 |
Member
|
Вы хотите спросить как лучше программно задать стандартный фильтр на форме? Или в чем разница между фильтром, что вам нужен, и стандартным расширенным фильтром?
__________________
С уважением, glibs® |
|
22.01.2009, 00:28 | #3 |
MCITP
|
Я вот тоже не понимаю, какая проблема пользователям "по кнопке" вызвать стандартный фильтр и "доналожить" в нём нужные дополнительные ограничения?
Научить их пользоваться wildcard-ами ("*") и, возможно, в некоторых сложных случаях, расширенным рэнджем не так сложно, мне кажется (в случае расширенного фильтра сохранить пользователям пару-тройку шаблонных фильтров, для примера)... Но если уж очень хочется сделать это на отдельной кнопке, то надо, насколько я понимаю, взять у формы queryRun().query() и "доналожить" на него ваши условия. Естественно по смыслу проверяя, что если рэндж уже есть на поле и задан, то не создавать ещё один (т.к. будет "OR"), а переписывать имеющийся, скорее всего с использованием "расширенного фильтра"... По расширенным рэнджам, если есть вопросы, поиск по "расширенный фильтр" или "Advance query range" вам в руки - на форуме обсуждался уже множество раз..
__________________
Zhirenkov Vitaly |
|
22.01.2009, 08:54 | #4 |
Member
|
Цитата:
Сообщение от ZVV
...
Но если уж очень хочется сделать это на отдельной кнопке, то надо, насколько я понимаю, взять у формы queryRun().query() ... TramPamPam_DS.filter(fieldnum(TramPamPam, Field_1), "*XXX*"); Можно делать из любого места в форме, само рефрешит все источники данных, меняет QueryRun. Для наложения фильтров с блокированными или скрытыми диапазонами или сложных фильтров приходится в Query колупаться. Я вообще тоже за стандартный функционал. Хотя иногда такие игрушки для пользователей делаю. Впрочем, в 4.0 появился а-ля Экселькин автофильтр, и это стало менее актуально в GUI. На портале, IMHO, актуально.
__________________
С уважением, glibs® |
|
|
За это сообщение автора поблагодарили: ZVV (1). |
22.01.2009, 01:11 | #5 |
Модератор
|
Самым красивым решением является стандартное.
С Уважением, Георгий |
|