Страница 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
Сорри, но почту не могу сейчас проверить :sad:

Добавлено: 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
убрать-то уберу, но вопрос в другом: Внешняя выгрузка все равно производится, как с этим бороться??