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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.07.2006, 18:04   #1  
MariaG_imported is offline
MariaG_imported
Участник
 
10 / 10 (1) +
Регистрация: 18.02.2005
Объясните, пожалуйста, на примерах, как определяются и применяются фильтры с помощью FILTERGROUP. В хелпе как-то непонятно написано...
Старый 04.07.2006, 20:27   #2  
e-statik is offline
e-statik
Участник
 
102 / 11 (1) +
Регистрация: 06.07.2005
Можно написать:
Код:
REC.SETRANGE(Field1, 'value1');
REC.SETRANGE(Field2, 'value2');
Если REC будет отображен в форму, то эти фильтры пользователь может легко снять по shift+ctrl+F7
А можно написать:
Код:
REC.FILTERGROUP(2);
REC.SETRANGE(Field1, 'value1');
REC.SETRANGE(Field2, 'value2');
REC.FILTERGROUP(0);
И этот фильтр в форме пользователь уже никак не сбросит. Его можно будет снять только программно.
По умолчанию работа ведется в группе 0 и все фильтры накладываются в ней. Чтобы наложить жесткие фильтры, заходим сначала в группу 2, накладываем фильтры, потом назад в группу 0.

Если написать так:
Код:
REC.FILTERGROUP(2);
REC.SETRANGE(Field1, 'value1');
REC.FILTERGROUP(0);
REC.SETRANGE(Field2, 'value2');
то, нажав на кнопку сброса фильтров, фильтр с поля Field2 сбросится, а с Field1 - нет. При этом можно дополнительно будет накладывать фильтр на Field1 - он не будет перекрывать фильтр в группе 2. Фильтры, наложенные в группе 2, вообще не видны пользователю (по соответствующим кнопкам не видно, что они наложены).

Извиняюсь за может быть не совсем удачные формулировки
Старый 05.07.2006, 10:32   #3  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Добавлю лишь, что фильтры, наложенные в разных фильтргруппах складываются по И. Допустим, во 2ой фильтргруппе наложен фильтр Товар <> 12450, в 3ей Товар 12400 .. 12500. В итоге на форме отобразятся записи по товарам с 12400 по 12500, за исключением товара 12450.
Старый 05.07.2006, 11:11   #4  
MariaG_imported is offline
MariaG_imported
Участник
 
10 / 10 (1) +
Регистрация: 18.02.2005
А как будут действовать фильтры в следующей ситуации (предположим, все они наложены на разные поля таблицы) в отчете:

В свойстве DataItem Table View для поля Field1 уставновлен Фильтр1

Далее в тексте отчета устанавливаются фильтры следующим образом:

<Накладывается Фильтр2 на поле Field2>
FILTERGROUP(2)
<Накладывается Фильтр3 на поле Field3>
FILTERGROUP(0)
<Накладывается Фильтр4 на поле Field4>

Какие из 4-х фильтров сможет изменить пользователь? Будет ли чем-то отличаться ситуация, когда все 4 фильтра наложены на одно и то же поле Field1 и каждый следующий фильтр сужает область значений поля?
Старый 05.07.2006, 11:25   #5  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Пользователь в отчете может менять фильтры только на реквесте, на свободном гриде по айтему. Если в тексте отчета накладываются фильтры на этот айтем дополнительно к уже наложенным на реквесте пользователем, то : фильтр пользователя попадает в нулевую фильтргруппу, фильтры в коде - в свою, указанную при наложении. Фильтры в коде, накладываемые в нулевой фильтргруппе перетирают фильтры, определенные пользователем на реквесте для этих полей.
Старый 05.07.2006, 11:43   #6  
MariaG_imported is offline
MariaG_imported
Участник
 
10 / 10 (1) +
Регистрация: 18.02.2005
Спасибо, я поняла. Единственное, что не понятно, если пользователь может менять фильтры только на RequestForm, зачем в отчете вообще использовать FILTERGROUP? Я смотрю на отчет 595 Коррекция Курс. Разниц (Navision 3.70). И там для таблицы Cust Ledger Entry в триггере OnPreDataItem стоит такой код:

SETRANGE("Posting Date",StartDate,EndDate);
Currency.COPYFILTER(Code,"Cust. Ledger Entry"."Currency Code");
FILTERGROUP(2);
SETFILTER("Currency Code",'<>%1','');
FILTERGROUP(0);
CurrReport.CREATETOTALS(AdjBalance, "Remaining Amt. (LCY)");

Есть ли какие-нибудь идеи, зачем в отчете, а не в модуле формы, нужно применять FILTERGROUP? Есть ли у этой функции другое полезное назначение, кроме ограничения фильтров, которые может менять пользователь?
Старый 05.07.2006, 12:00   #7  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от MariaG Посмотреть сообщение
Спасибо, я поняла. Единственное, что не понятно, если пользователь может менять фильтры только на RequestForm, зачем в отчете вообще использовать FILTERGROUP? Я смотрю на отчет 595 Коррекция Курс. Разниц (Navision 3.70). И там для таблицы Cust Ledger Entry в триггере OnPreDataItem стоит такой код:

SETRANGE("Posting Date",StartDate,EndDate);
Currency.COPYFILTER(Code,"Cust. Ledger Entry"."Currency Code");
FILTERGROUP(2);
SETFILTER("Currency Code",'<>%1','');
FILTERGROUP(0);
CurrReport.CREATETOTALS(AdjBalance, "Remaining Amt. (LCY)");

Есть ли какие-нибудь идеи, зачем в отчете, а не в модуле формы, нужно применять FILTERGROUP? Есть ли у этой функции другое полезное назначение, кроме ограничения фильтров, которые может менять пользователь?
Идеи есть. Фильтргруппы в отчете используются для того, чтобы обеспечить нужную логику работы. Если отчет (сейчас не привязываюсь к указанному вами айди репорта) должен обрабатывать определенные типы операций, скажем, из книги и определен свободный грид фильтра для пользователя по айтему книги, то вполне логично зашить эти фильтры внутри отчета НЕ в нулевую фильтргруппу. Для того, чтобы пользователь на реквесте не мог нарушить логику работы репорта, переопределив фильтры для поля или выбрав типы операций, которые репортом обрабатываться не должны.
Старый 05.07.2006, 12:10   #8  
MariaG_imported is offline
MariaG_imported
Участник
 
10 / 10 (1) +
Регистрация: 18.02.2005
Спасибо
 


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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:51.