19.08.2005, 14:20 | #1 |
MCTS
|
Здравствуйте Коллеги,
Не могу наложить фильтр, используя сетфильтр. Ругается на ограничение длины поля Код 10. На вскидку не скажете что это? Или надо подробнее ситуацию изложить? АП |
|
19.08.2005, 14:29 | #2 |
Участник
|
наверно вы всетаки исползуете SetRange а не SetFilter. Проверьте вызов фильтров.
__________________
Want to believe... |
|
19.08.2005, 14:41 | #3 |
MCTS
|
После пяти просмотров и нулевой реакции я понял, что не правильно задал вопрос.
Может с приложенным отчетом будет понятнее. Эта ошибка вылазит если в Склад Фильтр указать несколько значений через |. Пояснения что сделано в отчете и почему. 1. Склад Фильтр используется для удобства, с таким же успехом можно использовать закладку опции и в текстовую переменную писать все склады. РЕзультат не меняется - получаем ошибку. Все равно я использую текстовую переменную, которую заполняю через гет фильтр в самом начале. 2. В ДатаИтеме Товар я устанавливаю эту строку в качестве флоуфильтра (Склад Фильтр) и вычисляю наличие и др поля. Если наличие = 0 то СКИП. 3. В ДатаИтеме Склад я устанавливаю эту же строку как фильтр по складам (чтобы не проверять лишние). Может я где то перемудрил? Для одного склада и для всех складов, все работает удовлетворительно. АП |
|
19.08.2005, 15:00 | #4 |
Участник
|
я честно говоря вот этого кода не понял
Item - OnPreDataItem() c_BaseLocationFilter:=GETFILTER("Location Filter"); Item - OnAfterGetRecord() IF STRLEN(c_BaseLocationFilter)=0 THEN SETFILTER("Location Filter",'') ELSE SETFILTER("Location Filter",c_BaseLocationFilter); Зачем ???
__________________
Want to believe... |
|
19.08.2005, 15:05 | #5 |
MCTS
|
<div class='CALtop'>C/AL</div><div class='CAL'>Item - OnPreDataItem()
c_BaseLocationFilter:=GETFILTER("Location Filter");</div> Это чтобы получить строку по которой осуществлять последущую фильтрацию по складам и на основании которой делать расчет наличия по группе складов (см. ниже). <div class='CALtop'>C/AL</div><div class='CAL'>Item - OnAfterGetRecord() IF STRLEN(c_BaseLocationFilter)=0 THEN SETFILTER("Location Filter",'') ELSE SETFILTER("Location Filter",c_BaseLocationFilter);</div> В датаитеме Склад. при получении следующего склада расчитывается наличие на этом складе. Фильтр этот при возвращении к датаитему товар не обнуляется. Если этого не сделать вручную то на этом выполнение отчета прервется. |
|
19.08.2005, 15:08 | #6 |
Участник
|
Не надо фильтры через текстовую переменную копировать
Используйте функцию CopyFilter. |
|
19.08.2005, 15:12 | #7 |
Участник
|
достаточно %1 убрать из SetFilter.
И поставить сразу SETFILTER(Code,c_BaseLocationFilter); во всех местах убрал и заработало
__________________
Want to believe... |
|
19.08.2005, 15:17 | #8 |
MCTS
|
Выражаю признательность Wisard'у и DA_NEAL'у
Похоже мне надо более глубокое понимание текстовых переменных и знаков %. АП |
|
25.04.2006, 19:10 | #9 |
MCTS
|
Спустя много времени наткнулся на mibuso.com на такое. Это как раз имеет отношение к "глубокому пониманию %". Может кому пригодится. Если все об этом знают, то извините, что поднял тему.
Цитата:
You need to know that there is BIG difference between
Code: Код: SETFILTER(Field,'something'); Code: Код: SETFILTER(Field,'%1','something'); Code: Код: SETRANGE(Field,Value); |
|