|
![]() |
#1 |
MCTS
|
Здравствуйте Коллеги,
Не могу наложить фильтр, используя сетфильтр. Ругается на ограничение длины поля Код 10. На вскидку не скажете что это? Или надо подробнее ситуацию изложить? АП |
|
![]() |
#2 |
Участник
|
наверно вы всетаки исползуете SetRange а не SetFilter. Проверьте вызов фильтров.
__________________
Want to believe... |
|
![]() |
#3 |
MCTS
|
После пяти просмотров и нулевой реакции я понял, что не правильно задал вопрос.
Может с приложенным отчетом будет понятнее. Эта ошибка вылазит если в Склад Фильтр указать несколько значений через |. Пояснения что сделано в отчете и почему. 1. Склад Фильтр используется для удобства, с таким же успехом можно использовать закладку опции и в текстовую переменную писать все склады. РЕзультат не меняется - получаем ошибку. Все равно я использую текстовую переменную, которую заполняю через гет фильтр в самом начале. 2. В ДатаИтеме Товар я устанавливаю эту строку в качестве флоуфильтра (Склад Фильтр) и вычисляю наличие и др поля. Если наличие = 0 то СКИП. 3. В ДатаИтеме Склад я устанавливаю эту же строку как фильтр по складам (чтобы не проверять лишние). Может я где то перемудрил? Для одного склада и для всех складов, все работает удовлетворительно. АП |
|
![]() |
#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... |
|
![]() |
#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> В датаитеме Склад. при получении следующего склада расчитывается наличие на этом складе. Фильтр этот при возвращении к датаитему товар не обнуляется. Если этого не сделать вручную то на этом выполнение отчета прервется. |
|
![]() |
#6 |
Участник
|
Не надо фильтры через текстовую переменную копировать
Используйте функцию CopyFilter. |
|
![]() |
#7 |
Участник
|
достаточно %1 убрать из SetFilter.
И поставить сразу SETFILTER(Code,c_BaseLocationFilter); во всех местах убрал и заработало
__________________
Want to believe... |
|
![]() |
#8 |
MCTS
|
Выражаю признательность Wisard'у и DA_NEAL'у
Похоже мне надо более глубокое понимание текстовых переменных и знаков %. АП |
|
![]() |
#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); |
|