Страница 1 из 3
Interface и View
Добавлено: 29 ноя 2006, 13:29
Alexander
Кто сможет ответить на пару простых вопросов!?
Создаю какой-то интерфейс
Код: Выделить всё
Interface test;
create view as select * from таблица
where((подцепки)) and ограниченя
Browse Таблица
Fields
Поле1;
Поле2;
...
end;
end.
Возникает проблема, если запрос слишком большой, то вызов интерфейса занимает длительное время. Можно ли как-то предотвратить выполнение запроса при запуске интерфейса, а произвести выборку, когда заполнен фильтр?
Вопрос 2-й: как можно перевыполнить запрос, если изменились "ограничения"??
Добавлено: 29 ноя 2006, 13:40
oiko
Создай таблицу в памяти, сгрузи нужные данные из физ. таблиц туда - ускорится навигация в броузере (именно не открытие фейса а навигация напрягает).
Так многие стандартные фейсы работают.
Добавлено: 29 ноя 2006, 13:42
Алексей
Сделать в выборке баундсы
и включать их только когда уже выберешь фильтры.
Добавлено: 29 ноя 2006, 13:59
Alexander
Понятно, значит запрос выполняется в любом случае...
Bounds не спасут

( Дело в том, что выборка начинается с BaseDoc, к ней все цепляется...
Каким образом запрос его можно перевыполнить?
Добавлено: 29 ноя 2006, 14:31
oiko
по alt+B навесь фильтр
в событие по нему перегрузка баундсов и рескан/или перезапись таблы в памяти и рескан
Добавлено: 29 ноя 2006, 14:33
Alexander
а с примером можно???
Добавлено: 29 ноя 2006, 14:59
Den
Вы бы лучше, Alexander, сами привели лог. таблицу...было бы видно хоть какие данные Вы пытаетесь получить
Добавлено: 29 ноя 2006, 15:08
Alexander
Код: Выделить всё
Interface Test 'Test';
show at (,,60,10)
create view TestView
select
basedoc.ddoc ,
basedoc.summa ,
basedoc.cnote ,
katnotes.name ,
basedoc.nodoc ,
basedoc.direct ,
basedoc.dform ,
basedoc.cOrg ,
katorg.name,
SchFact.dfact ,
schfact.summa ,
katsopr.snalogs,
schfact.num ,
katsopr.name ,
katsopr.dsopr ,
katsopr.nsopr ,
katsopr.vidsopr,
from basedoc,
katorg
where((
BaseDoc.Nrec == StepDoc.cBaseDoc
and BaseDoc.Direct == Schfact.Direct
and StepDoc.Nrec == Schfact.cStepDoc
and basedoc.cnote == katnotes.nrec
and basedoc.corg == katorg.nrec
and SchFact.Nrec == KatSopr.cSchFact
));
На этот запрос навешиваю Bounds и Condition, но блин, состаришься, пока дождешься запуска интерфейса...
если навешать даты:
Код: Выделить всё
...))
and basedoc.ddoc >= DOCDateFrom
and basedoc.ddoc <= DOCDateTo;
...
то жить можно, но как-то вьюху нужно обновить, после смены дат в фильтре......
Добавлено: 29 ноя 2006, 16:36
Den
Ну попробовал Вашу вью :
Interface Test 'Test';
show at (,,60,10)
create view
select
basedoc.ddoc ,
basedoc.summa ,
basedoc.cnote ,
katnotes.name ,
basedoc.nodoc ,
basedoc.direct ,
basedoc.dform ,
basedoc.cOrg ,
katorg.name,
SchFact.dfact ,
schfact.summa ,
katsopr.snalogs,
schfact.num ,
katsopr.name ,
katsopr.dsopr ,
katsopr.nsopr ,
katsopr.vidsopr
from basedoc,
katorg
where((
BaseDoc.Nrec == StepDoc.cBaseDoc
and BaseDoc.Direct == Schfact.Direct
and StepDoc.Nrec == Schfact.cStepDoc
and basedoc.cnote == katnotes.nrec
and basedoc.corg == katorg.nrec
and SchFact.Nrec == KatSopr.cSchFact
));
Panel p1;
browse br1 ;
table basedoc;
fields
basedoc.ddoc :[10],protect ;
basedoc.nodoc :[15],protect ;
katorg.name :[40],protect;
basedoc.summa :[12.2],protect ;
end;
end;
end.
Видимый элемент интера вполне быстро открывается...
Добавлено: 29 ноя 2006, 16:53
Alexander
И правда отрабатывает....
Den
Отправил Вам исходник по почте, надеюсь, не будете возражать...
В чем моя ошибка, не понимаю...
Добавлено: 29 ноя 2006, 16:56
Den
Сорри, но почту не могу сейчас проверить

Добавлено: 29 ноя 2006, 17:09
Goblin
Не должно тормозить, для всех подцепок и фильтров есть соотвествующие индексы. Плюс при построении Browse система считывает только те записи, которые необходимо считать сдля построения строк этого элемента.
Часом не локальную базу мучаете ? Там подобное имеет место быть
Добавлено: 30 ноя 2006, 08:22
Alexander
Во!
Утром, после кофе, лучше думается....
проблема в то, что в примере у запроса убрал сортировки:
Код: Выделить всё
order by basedoc.ddoc ,
SchFact.NRec ,
SpSopr.Nrec ,
KatSopr.NRec;
С ними все вешается....
Для чего делается внешняя выгрузка и как это обойти??
Добавлено: 30 ноя 2006, 08:33
Goblin
Смысл сортировки по NRec у SchFact, SpSopr, KatSopr ?
Уберите ее, смысла она не имеет в принципе ...
Добавлено: 30 ноя 2006, 08:53
Alexander
убрать-то уберу, но вопрос в другом: Внешняя выгрузка все равно производится, как с этим бороться??