Страница 3 из 3

Добавлено: 18 июн 2008, 12:37
edward_K
по 1 еще раз. Нельзя по одному и тому же полю справа делать 2 условия "==" !

Добавлено: 18 июн 2008, 13:57
RAJAH
Разве? А почему? :-? У меня есть пара таких отчётов... И работают...
Например (katpodr):

Код: Выделить всё

502                == katsopr.vidsopr and
katsopr.cpodrfrom /== katpodr.nrec and
katsopr.nrec      /== spsopr.csopr and
spsopr.cmcusl     /== katmc.nrec and
spsopr.cparty      == katparty.nrec and
katsopr.nrec       == syr.ckatsopr and
504                == syr.vidsopr and
syr.nrec          /== spsyr.csopr and
spsyr.cmcusl       == material.nrec and
spsopr.cotped      == katotped.nrec and
material.ced      /== kated.nrec and
spsyr.cparty       == partia.nrec and
katsopr.nrec       == objacct.cowner and
45                 == spobjacc.typeobj and
objacct.nrec      /== spobjacc.cobjacct and
spsopr.nrec        == spobjacc.cobject and
podrnrec           == katpodr.nrec
Или (catalogs):

Код: Выделить всё

sumvidop.clsch    /== lschet.nrec and
sumvidop.cexoz    /== katpodr.nrec and
sumvidop.tperson  /== persons.nrec and
sumvidop.cappoint /== catalogs.nrec and
mrk.fnr           /== catalogs.nrec

Добавлено: 18 июн 2008, 14:02
Алексей
лучше так

Код: Выделить всё

sumvidop.clsch    /== lschet.nrec and 
sumvidop.cexoz    /== katpodr.nrec and 
sumvidop.tperson  /== persons.nrec and 
sumvidop.cappoint /== catalogs.nrec and 
catalogs.nrec         /== mrk.fnr

Добавлено: 18 июн 2008, 14:04
edward_K
это случайность, а не закомерность. Кроме того должно привести к существенному объему выборки и как следствие замедление формирования. По сути у вас выбирается набор по основным таблам умноженный на кол-во записей в mrk и тока потому что на mrk нет других условий что-то выдает.

Добавлено: 18 июн 2008, 15:43
RAJAH
Иногда бывают случаи, что по-другому никак (если только noindex не писать):

Код: Выделить всё

date(1,5,2008)   <<= soprhoz.datob and
date(31,5,2008)  >>= soprhoz.datob and
soprhoz.csoprdoc /== plpor.nrec and
soprhoz.nrec     /== aktperf.csoprhoz and
aktperf.cclearing/== clearing.nrec and
aktperf.caktofp  /== aktofp.nrec and
aktofp.cpodr     /== fpco.nrec and
clearing.caktofp /== aktofp.nrec and
823               == fpoborot.tidk and
clearing.nrec    /== fpoborot.csoprdoc and
150               == fpoborot.kodreg (noindex) and
fpoborot.cstbud  /== fpstbud.nrec and
100000000003Eh    == fpstbud.nrec and
100000000001Bh    == fpco.nrec and
plpor.cpol       /== katorg.nrec and
2                 == cashbank.razdel and
plpor.cbankplat   == cashbank.cpodr
Нужно aktofp одновременно связать с aktperf и clearing. И скорость, вроде, ничего...

Добавлено: 18 июн 2008, 16:03
edward_K
можно было написать 100000000003Eh /== fpoborot.cstbud (noindex)
так оно как то логичней.
а пробовали то поменять как я пишу? Ради спортивного интереса засеките время через curtime. отчет нужно запускать 3 раза и брать 3 результат ( так точнее).

Добавлено: 18 июн 2008, 16:06
RAJAH
Пришлось... Там рекурсия по FPCO стала выходить... Теперь так пишу:

Код: Выделить всё

begper           <<= soprhoz.datob and
endper           >>= soprhoz.datob and
soprhoz.csoprdoc /== plpor.nrec and
soprhoz.nrec     /== aktperf.csoprhoz and
aktperf.cclearing/== clearing.nrec and
aktperf.caktofp  /== aktofp.nrec and
fpco.nrec        /== aktofp.cpodr (noindex) and
clearing.caktofp /== aktofp.nrec and
823               == fpoborot.tidk and
clearing.nrec    /== fpoborot.csoprdoc and
150               == fpoborot.kodreg (noindex) and
fpoborot.cstbud  /== fpstbud.nrec and
fpco.nrec         == met.fnr and
mrk.fnr          /== fpstbud.nrec and
plpor.cpol       /== katorg.nrec and
2                 == cashbank.razdel and
plpor.cbankplat   == cashbank.cpodr
))
bounds poco = fpco.nrec /== met.fnr
order by soprhoz.datob, plpor.nrec;

Добавлено: 18 июн 2008, 16:36
edward_K
clearing.caktofp /== aktofp.nrec and
не нужно, опять нарушаете.
fpco.nrec /== aktofp.cpodr (noindex) and
надо правильней так
aktofp.cpodr /== fpco.nrec and

Добавлено: 18 июн 2008, 16:52
RAJAH
Хе... Так aktofp.cpodr /== fpco.nrec and рекурсия получается. clearing.caktofp /== aktofp.nrec and - это нужно, нужно :) А если aktofp.nrec /== clearing.caktofp and - рекурсия по clearing.

Добавлено: 18 июн 2008, 17:14
edward_K
ну ну. Пока не научитесь писать просто и понятно запросы соблюдая правила(в принципе тока одно :) ) так и будете мучаться.

Добавлено: 18 июн 2008, 17:24
RAJAH
Я же не говорю, что мучаюсь... Я с bounds мучался, помогли, спасибо... А этот запрос работает, им пользуются. Говорю же, бывает так, что расставлять связи по-другому ещё медленнее...