![]() |
#1 |
Участник
|
![]()
Здравствуйте!
У меня загвоздка - не срабатывает фильтр по полю в таблице. Я использую метод addRange : Filter = MyDataSource.addRange(fieldNum( MyTable, Field_N )); Filter.value( ' Заданное значение' ); Заданное значение совпадает по типу с типом поля в таблице. Вроде бы никаких несоответствий. Что может влиять на срабатывание фильтра? Результат такой, что фильтр не накладывался вообще. С другими полями таблицы все нормально. Field_N - новое поле, добавленное мной в таблицу. Помогите, пожалуйста, если кто сталкивался с такой ситуацией. Спасибо. |
|
![]() |
#2 |
Banned
|
Re: не работает AddRange
Цитата:
я использую метод addRange ... заданное значение совпадает по типу с типом поля в таблице
Впрочем, ваша проблема заключается не в этом. Приведите, если не затруднит, весь код целиком и без абстракций. |
|
![]() |
#3 |
Участник
|
спрашивали подобное когда хотели отобрать пустые значения.
http://axapta.mazzy.ru/hints/emptyqueryrange/ если у вас другой случай, то ищите ошибки в своем коде. |
|
![]() |
#4 |
Участник
|
ОК, вот код:
void init() // на единственном датасорсе LedgerBudget { QueryBuildDataSource qB; A_BudgetPeriodNum periodFromCaller; // тип string 20 super(); qB = this.query().dataSourceNo(1); periodFromCaller = element.args().caller().getPeriodNum(); // здесь я беру данные из вызывающей формы, передается корректно PeriodFilter = qB.addRange(fieldNum(LedgerBudget, A_BudgetPeriod)); PeriodFilter.value(periodFromCaller); } // поле A_BudgetPeriod имеет тот же тип A_BudgetPeriodNum |
|
![]() |
#5 |
Banned
|
Все правильно. А с этим PeriodFilter нигде ничего больше не происходит?
Попробуйте в метод executeQuery() вставить для тестирования строку: info(this.query().dataSourceNo(1).toString()); и посмотрите, какой на самом деле формируется запрос. |
|
![]() |
#6 |
Участник
|
Спасибо, EVGL, что поучаствовали - теперь у меня есть уверенность, что здесь код верный.
Думаю в этой форме надо искать где еще кто-то что-то делал с периодами - возможно именно по этому полю где-то накладываются условия, перекрывающие мой запрос. Дело в том, что я вношу изменения в имеющуюся форму - придется покопаться. А с toString я проверяла - условие корректное: SELECT * FROM LedgerBudget USING INDEX ModelIdx WHERE ((A_BudgetPeriod = Дек 2003)) Надеюсь использование индекса здесь не помеха. |
|
![]() |
#7 |
Участник
|
Извиняюсь, если я не прав. Но разве не надо взять символьную константу в кавычки?
Может лучше использовать стандартную функцию конвертации для значений: PeriodFilter.value(sysQuery::value(periodFromCaller)); Правда сама Axapta почему-то использует вызов этой функции опосредовано: PeriodFilter.value(queryValue(periodFromCaller)); Хотя это одно и то же. |
|
![]() |
#8 |
Участник
|
Цитата:
Изначально опубликовано Владимир Максимов
Извиняюсь, если я не прав. Но разве не надо взять символьную константу в кавычки? В общем, непонятно. NataLee, согласен с EVGL - барабашки не бывает. Ищите место, где кто-то что-то делает с запросом. |
|
![]() |
#9 |
Участник
|
Спасибо всем за участие!
Я уже решила проблему и думаю, что должна высказаться. На этой форме был перекрыт метод executeQuery, где для данного поля устанавливался фильтр без ограничений(т.е. показывались все данные). И таким образом все мои фильтры аннулировались. Вот и все. А сразу на executeQuery было не посмотреть?!!! Ну что ж - осознала! ![]() Так что addRange - РАБОТАЕТ! |
|
![]() |
#10 |
Участник
|
Спасибо, NataLee
|
|