Почему так медленно работает?
Сделала запрос по поиску МЦ в ДО
select basedoc.NODOC,basedoc.DDOC,katmc.barkod
from basedoc,spstep,stepdoc
where
((
stepdoc.cbasedoc==basedoc.nrec
and
spstep.CSTEPDOC==stepdoc.nrec
and
spstep.CMCUSL==katmc.nrec
))
and
katmc.barkod='4303249000145'
;        
Отработало, решила сделать то же самое на VIP, чтобы вводить МЦ , а не менять ее в запросе. Работает в разы медленнее.  Что я делаю не так?
nterface Bkod  'Поискать употребление МЦ в ДО' AlwaysReturn;
Var Bkod: string;
     create view
  as select BaseDoc.*
   from basedoc,spstep,stepdoc
  WHere
((
stepdoc.cbasedoc==basedoc.nrec
and
spstep.CSTEPDOC==stepdoc.nrec
and
spstep.CMCUSL==katmc.nrec
))
and
(katmc.barkod=Bkod)
  ;
  Parameters
    Bkod
    browse BR1 ;
    show at (,10,,);
         fields
        Basedoc.NoDOC   'Номер документа':[10], Protect;
        Basedoc.DDOC    'Дата документа':[10], Protect;
        Katmc.Barkod    'Баркод':[15], Protect;
        end;
    handleEvent
     cminit: {
     message (bkod,cmok);
     }
    end; //HandleEvent
!end;
end.
			
			
									
						
										
						Почему так медленно работает запрос в vipe?
Модераторы: m0p3e, edward_K, Модераторы
))
and
(katmc.barkod=Bkod)
;
Это по сути безиндексная фильтрация логической таблицы - сначала отбираются ВСЕ stepdoc (она в данном случае главная), затем отбираются ВСЕ записи SpStep (и она тоже главная в данном случае),
затем в памяти начинается фильтрация по определенной МЦ.
1. что Вам мешает посмотреть наличие в KatMc необходимого индекса
KATMC07 = BARKOD+NAME
2. что Вам мешает посмотреть наличие в SpStep необходимого индекса
SPSTEP05 = PRMC+CMCUSL
 
И более корректно написать запрос
			
			
									
						
										
						and
(katmc.barkod=Bkod)
;
Это по сути безиндексная фильтрация логической таблицы - сначала отбираются ВСЕ stepdoc (она в данном случае главная), затем отбираются ВСЕ записи SpStep (и она тоже главная в данном случае),
затем в памяти начинается фильтрация по определенной МЦ.
1. что Вам мешает посмотреть наличие в KatMc необходимого индекса
KATMC07 = BARKOD+NAME
2. что Вам мешает посмотреть наличие в SpStep необходимого индекса
SPSTEP05 = PRMC+CMCUSL
И более корректно написать запрос
Код: Выделить всё
Create View
As
Select
  BaseDoc.*
From
  BaseDoc
, SpStep
, StepDoc
, KatMc
Where
((
     Bkod == KatMc.BarKod
And Word(1) == SpStep.PrMc  //Признак МЦ или Услуги
And KatMc.Nrec  == SpStep.cMcUsl
And SpStep.cStepDoc == StepDoc.Nrec
And StepDoc.cBaseDoc == BaseDoc.Nrec
))
;
Однако есть небольшая ошибка в инструментарии, которая решится с выходом Атл. 5.4.23.0
Тогда в броузе вы увидите всю таблицу.
			
			
									
						
										
						Код: Выделить всё
Browse BR1 ;
show at (,10,,);
 viewTable;   
fields
Basedoc.NoDOC 'Номер документа':[10], Protect;
Basedoc.DDOC 'Дата документа':[10], Protect;
Katmc.Barkod 'Баркод':[15], Protect;
end;