AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.10.2011, 11:41   #1  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Добрый день.
Передо мной встала задача наложить фильтр на форму. Таблица к которой привязана к форме одна. На неё нужно наложить фильтр который является выборкой полей из второй таблицы....Вышел я из ситуации так. Создал переменные и в них пихаю результаты выборки по первой таблице через '|' а потом накладываю эти переменные на таблицу формы через SETFILTER. Но столкнулся с проблемой что длина выборки....фильтра превышает уже длину текстовой переменной. Другими словами тупик...Как можно обойти эту ситуацию.... может возможно наложить как нить иначе фильтр на форму?
Спасибо!
Старый 11.10.2011, 12:30   #2  
Milk is offline
Milk
Участник
 
242 / 12 (1) ++
Регистрация: 08.06.2006
Может быть, поможет такой способ.
В цикле по отобранным записям второй таблицы фильтруйте по значению из второй таблицы первую таблицу и делайте ей MARK(TRUE). Затем отфильтруйте первую MARKEDONLY(TRUE).
Старый 11.10.2011, 15:54   #3  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Milk Спасибо! Сам так думал сделать но не решался.... работает отлично но только точки смущают :-)
Старый 11.10.2011, 16:55   #4  
Fly is offline
Fly
Участник
Аватар для Fly
 
102 / 10 (1) +
Регистрация: 05.10.2007
Цитата:
Сообщение от Shaitan-Babay Посмотреть сообщение
Добрый день.
Передо мной встала задача наложить фильтр на форму. Таблица к которой привязана к форме одна. На неё нужно наложить фильтр который является выборкой полей из второй таблицы....Вышел я из ситуации так. Создал переменные и в них пихаю результаты выборки по первой таблице через '|' а потом накладываю эти переменные на таблицу формы через SETFILTER. Но столкнулся с проблемой что длина выборки....фильтра превышает уже длину текстовой переменной. Другими словами тупик...Как можно обойти эту ситуацию.... может возможно наложить как нить иначе фильтр на форму?
Спасибо!
Можно завести временную переменную, в нее записывать результаты выборки. Дальше просто открываете форму с передачей временной реки: FORM.RUNMODAL(0,TempRec). И никаких точек
Старый 12.10.2011, 11:41   #5  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Fly Я так сделал сразу....но когда количество выборки превышает более 100 значений и текстовая переменная переполняется
Так что это не выход....хотя и очень удобно конечно :-)
Старый 12.10.2011, 12:12   #6  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Shaitan-Babay, Fly говорит про другую переменную не текстовую, а рековую. При получении одного значения из фильтра тут же отбираются записи по нему и записываем в темповую (временную) переменную той же таблицы. Повторяем так для всех значений фильтра и потом выводим в форме.
Старый 12.10.2011, 13:35   #7  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
InTacto Хм интересное предложение...попробую. Спасибо!
Старый 22.11.2012, 17:22   #8  
Васыо is offline
Васыо
Участник
 
316 / 12 (1) ++
Регистрация: 15.11.2006
А я вот с чем столкнулся. Завожу текстовую переменную Filter.
Код:
Filter := 'значение1|значение2|значение3';
SETFILTER("Нужное Поле",'%1',Filter);
И получаю ошибку:
Значение фильтра 'значение1|значение2|значение3' в поле "Нужное Поле" в таблице слишком длинное для этого типа поля. Тип: Code20
То есть он не понимает фильтр именно как фильтр, а принимает его просто как длинное значение. Что я делаю не так? При этом по F7 фильтрует этим же значением на ура.
Старый 22.11.2012, 17:49   #9  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Цитата:
Сообщение от Васыо Посмотреть сообщение
А я вот с чем столкнулся. Завожу текстовую переменную Filter.
Код:
Filter := 'значение1|значение2|значение3';
SETFILTER("Нужное Поле",'%1',Filter);
И получаю ошибку:
Значение фильтра 'значение1|значение2|значение3' в поле "Нужное Поле" в таблице слишком длинное для этого типа поля. Тип: Code20
То есть он не понимает фильтр именно как фильтр, а принимает его просто как длинное значение. Что я делаю не так? При этом по F7 фильтрует этим же значением на ура.
Есть ли фильтр уже готов, то нужно писать SETFILTER("Нужное Поле",Filter)
% нужен, если мы фильтр составляем
Старый 22.11.2012, 18:12   #10  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Можно определять "нужность" записи, переписав триггера OnFind(), OnNext(). Здесь можно обрабатывать условие показа любой сложности. Подтормаживать будет - да. Но ведь вам это и надо))
Старый 26.11.2012, 13:30   #11  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
А еще можно в таблицу 1 добавить вычисляемых полей Lookup на нужные поля Таблицы 2. И накладывайте фильтры в обычном порядке.
Старый 26.11.2012, 14:40   #12  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Цитата:
Сообщение от romeo Посмотреть сообщение
А еще можно в таблицу 1 добавить вычисляемых полей Lookup на нужные поля Таблицы 2. И накладывайте фильтры в обычном порядке.
еще один совет с тормозами.
Старый 26.11.2012, 15:33   #13  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от InTacto Посмотреть сообщение
Цитата:
Сообщение от romeo Посмотреть сообщение
А еще можно в таблицу 1 добавить вычисляемых полей Lookup на нужные поля Таблицы 2. И накладывайте фильтры в обычном порядке.
еще один совет с тормозами. />
Согласен. Зато в дальнейшем работа с формой ничем не будет отличаться от варианта (почти), когда все интересующие пользователя поля находятся в одной таблице, на которой построена форма. Главное накидать решений, дальше человек разберется, что использовать, что нет. Пусть хотя бы видит различные варианты.
Старый 26.11.2012, 17:29   #14  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
Цитата:
Сообщение от Васыо Посмотреть сообщение
А я вот с чем столкнулся. Завожу текстовую переменную 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  
dmites is offline
dmites
Участник
Аватар для dmites
 
221 / 14 (1) ++
Регистрация: 10.08.2005
Не совсем применимо к этой задаче, но на ту же тему.
Можно еще использовать функцию сокращения фильтра, преобразующую
фильтр '1|2|3|5|6|7|9' в '1..3|5..7|9'
Код здесь
Старый 07.12.2012, 16:07   #16  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от dmites Посмотреть сообщение
Не совсем применимо к этой задаче, но на ту же тему.
Можно еще использовать функцию сокращения фильтра, преобразующую фильтр '1|2|3|5|6|7|9' в '1..3|5..7|9'
..
Вставлю и свои 5 копеек, но уже по этой реализации - см в стандарте функцию GetSelectionFilter() формы 31 Item List
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:58.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.