28.01.2004, 17:17 | #1 |
Участник
|
не работает AddRange
Здравствуйте!
У меня загвоздка - не срабатывает фильтр по полю в таблице. Я использую метод addRange : Filter = MyDataSource.addRange(fieldNum( MyTable, Field_N )); Filter.value( ' Заданное значение' ); Заданное значение совпадает по типу с типом поля в таблице. Вроде бы никаких несоответствий. Что может влиять на срабатывание фильтра? Результат такой, что фильтр не накладывался вообще. С другими полями таблицы все нормально. Field_N - новое поле, добавленное мной в таблицу. Помогите, пожалуйста, если кто сталкивался с такой ситуацией. Спасибо. |
|
28.01.2004, 17:26 | #2 |
Banned
|
Re: не работает AddRange
Цитата:
я использую метод addRange ... заданное значение совпадает по типу с типом поля в таблице
Впрочем, ваша проблема заключается не в этом. Приведите, если не затруднит, весь код целиком и без абстракций. |
|
28.01.2004, 17:30 | #3 |
Участник
|
спрашивали подобное когда хотели отобрать пустые значения.
http://axapta.mazzy.ru/hints/emptyqueryrange/ если у вас другой случай, то ищите ошибки в своем коде. |
|
28.01.2004, 17:54 | #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 |
|
28.01.2004, 18:06 | #5 |
Banned
|
Все правильно. А с этим PeriodFilter нигде ничего больше не происходит?
Попробуйте в метод executeQuery() вставить для тестирования строку: info(this.query().dataSourceNo(1).toString()); и посмотрите, какой на самом деле формируется запрос. |
|
28.01.2004, 18:16 | #6 |
Участник
|
Спасибо, EVGL, что поучаствовали - теперь у меня есть уверенность, что здесь код верный.
Думаю в этой форме надо искать где еще кто-то что-то делал с периодами - возможно именно по этому полю где-то накладываются условия, перекрывающие мой запрос. Дело в том, что я вношу изменения в имеющуюся форму - придется покопаться. А с toString я проверяла - условие корректное: SELECT * FROM LedgerBudget USING INDEX ModelIdx WHERE ((A_BudgetPeriod = Дек 2003)) Надеюсь использование индекса здесь не помеха. |
|
29.01.2004, 11:24 | #7 |
Участник
|
Извиняюсь, если я не прав. Но разве не надо взять символьную константу в кавычки?
Может лучше использовать стандартную функцию конвертации для значений: PeriodFilter.value(sysQuery::value(periodFromCaller)); Правда сама Axapta почему-то использует вызов этой функции опосредовано: PeriodFilter.value(queryValue(periodFromCaller)); Хотя это одно и то же. |
|
29.01.2004, 13:09 | #8 |
Участник
|
Цитата:
Изначально опубликовано Владимир Максимов
Извиняюсь, если я не прав. Но разве не надо взять символьную константу в кавычки? В общем, непонятно. NataLee, согласен с EVGL - барабашки не бывает. Ищите место, где кто-то что-то делает с запросом. |
|
29.01.2004, 13:38 | #9 |
Участник
|
Спасибо всем за участие!
Я уже решила проблему и думаю, что должна высказаться. На этой форме был перекрыт метод executeQuery, где для данного поля устанавливался фильтр без ограничений(т.е. показывались все данные). И таким образом все мои фильтры аннулировались. Вот и все. А сразу на executeQuery было не посмотреть?!!! Ну что ж - осознала! Так что addRange - РАБОТАЕТ! |
|
29.01.2004, 13:50 | #10 |
Участник
|
Спасибо, NataLee
|
|