04.07.2006, 18:04 | #1 |
Участник
|
Объясните, пожалуйста, на примерах, как определяются и применяются фильтры с помощью FILTERGROUP. В хелпе как-то непонятно написано...
|
|
04.07.2006, 20:27 | #2 |
Участник
|
Можно написать:
Код: REC.SETRANGE(Field1, 'value1'); REC.SETRANGE(Field2, 'value2'); А можно написать: Код: 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'); Извиняюсь за может быть не совсем удачные формулировки |
|
05.07.2006, 10:32 | #3 |
Участник
|
Добавлю лишь, что фильтры, наложенные в разных фильтргруппах складываются по И. Допустим, во 2ой фильтргруппе наложен фильтр Товар <> 12450, в 3ей Товар 12400 .. 12500. В итоге на форме отобразятся записи по товарам с 12400 по 12500, за исключением товара 12450.
|
|
05.07.2006, 11:11 | #4 |
Участник
|
А как будут действовать фильтры в следующей ситуации (предположим, все они наложены на разные поля таблицы) в отчете:
В свойстве DataItem Table View для поля Field1 уставновлен Фильтр1 Далее в тексте отчета устанавливаются фильтры следующим образом: <Накладывается Фильтр2 на поле Field2> FILTERGROUP(2) <Накладывается Фильтр3 на поле Field3> FILTERGROUP(0) <Накладывается Фильтр4 на поле Field4> Какие из 4-х фильтров сможет изменить пользователь? Будет ли чем-то отличаться ситуация, когда все 4 фильтра наложены на одно и то же поле Field1 и каждый следующий фильтр сужает область значений поля? |
|
05.07.2006, 11:25 | #5 |
Участник
|
Пользователь в отчете может менять фильтры только на реквесте, на свободном гриде по айтему. Если в тексте отчета накладываются фильтры на этот айтем дополнительно к уже наложенным на реквесте пользователем, то : фильтр пользователя попадает в нулевую фильтргруппу, фильтры в коде - в свою, указанную при наложении. Фильтры в коде, накладываемые в нулевой фильтргруппе перетирают фильтры, определенные пользователем на реквесте для этих полей.
|
|
05.07.2006, 11:43 | #6 |
Участник
|
Спасибо, я поняла. Единственное, что не понятно, если пользователь может менять фильтры только на 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 |
Участник
|
Цитата:
Сообщение от 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 |
Участник
|
Спасибо
|
|