15.07.2005, 12:20 | #1 |
Участник
|
Работа Range на форме
Добрый день.Может быть я что-то не понимаю.
Не буду описывать конкретно мою задачу приведу аналогичный пример попроще. В таблице InventTable я хочу фильтровать записи по полю ItemBuyerGroupId, причем так, чтобы записей с другим значением этого поля я никаким боком видеть не смог. Предположим в этом поле могут хранится значения 'АТЦ' или 'Обор'. И я хочу видеть только 'АТЦ'. На datasource-e InventTable я создаю метод: private void initRanges() { Query query = InventTable_ds.query(); QueryBuildDataSource qbds; QueryBuildRange qbr; qbds = query.dataSourceName( tablestr( InventTable ) ); qbds.clearRanges(); qbr = qbds.addRange(fieldnum (InventTable,ItemBuyerGroupId)); qbr.value(SysQuery::value('АТЦ')); qbr.status(RangeStatus::Locked); } Далее перекрываю методы: void init() { ; super(); this.initRanges(); } и public void executeQuery() { ; this.initRanges(); super(); } Вроде как бы все правильно и с первого взгляда работает. Но если встать на поле (на открытой форме естественно) ItemBuyerGroupId, и через контекстное меню выбрать <Найти> , набрать 'Обор' , то он игнорирует мой код и в фильтр по полю подставляет 'Обор'. Зачем тогда спрашивается qbr.status(RangeStatus::Locked);????? - если есть такая дыра. Пытался обмануть: вместо qbr = qbds.addRange(fieldnum (InventTable,ItemBuyerGroupId)); , подставляю qbr = qbds.addRange(fieldnum (InventTable,ItemBuyerGroupId)); qbr.enabled(false); qbr = qbds.addRange(fieldnum (InventTable,ItemBuyerGroupId)); -- заработало , но только если один раз пытаться через <Найти> искать 'Обор' , на второй раз поиска опять меняет фильтр согласно искомому значению. Поясните где я не прав или что я не понимаю? Может быть фильтр и поиск - 2 разные вещи? Спасибо |
|