подскажите, что нужно, чтобы быстрее работало

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
sildae
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 04 апр 2009, 15:56
Откуда: сАРАТОВ
Контактная информация:

подскажите, что нужно, чтобы быстрее работало

Сообщение sildae »

Нужно разбить приход по vidsopr. 502, 600,506 и т.д.
для 502 сделала. А для остальных vidsopr нужно свое view-представление?

Сделала строку 502=katsopr.vidsopr с переменной величиной. Стало работать значительно дольше.

.create view prixod1
from katsopr,spsopr,sporder
where
((
katsopr.nrec==spsopr.csopr
and
spsopr.CMCUSL==katmc.nrec
and
katsopr.CPODRTO==katpodr.nrec
))
and
katpodr.nrec=Sklad_nrec
and
502=katsopr.vidsopr
and
katsopr.dsopr>=begDat
and
katsopr.dsopr<=endDat
and
katmc.nrec=MC_nrec
;
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Сообщение RAJAH »

Перечисляете в секции FROM таблицу sporder, а в WHERE никак не связываете - конечно, будет долго. А KATMC, наоборот, есть в связях, но в FROM не указана. Могу такой вариант предложить:

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

((
begDat          <<= katsopr.dopr and
endDat          >>= katsopr.dopr and
katsopr.nrec    /== spsopr.csopr and (502 = katsopr.vidsopr or 506 = katsopr.vidsopr or 600 = katsopr.vidsopr) and
spsopr.CMCUSL   /== katmc.nrec and (MC_nrec = katmc.nrec) and
katsopr.CPODRTO /== katpodr.nrec and (Sklad_nrec = katpodr.nrec)
));
Жёсткие связи иногда полезны для избавления от лишних записей.
Yuri
Посетитель
Сообщения: 43
Зарегистрирован: 18 ноя 2009, 02:56
Откуда: Гомель, Республика Беларусь

Сообщение Yuri »

Попоробуйте так:
.create view prixod1 from katsopr, spsopr, sporder
where (( Word(502)==katsopr.vidsopr and begDat <<= katsopr.dsopr and endDat >>=katsopr.dsopr and Sklad_nrec == katsopr.CPODRTO(noindex)
and katsopr.nrec == spsopr.csopr and spsopr.CMCUSL == katmc.nrec and MC_nrec == katmc.nrec(noindex) ));
sildae
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 04 апр 2009, 15:56
Откуда: сАРАТОВ
Контактная информация:

Сообщение sildae »

Спасибо. Действительно, все стало работать гораздо быстрее.
sildae
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 04 апр 2009, 15:56
Откуда: сАРАТОВ
Контактная информация:

Сообщение sildae »

.create view prixod1
from katsopr, spsopr
where ((
begDat <<= katsopr.dsopr
and endDat >>=katsopr.dsopr
and Sklad_nrec == katsopr.CPODRTO(noindex)
and katsopr.nrec == spsopr.csopr
and MC_nrec==spsopr.CMCUSL
and word(502)==katsopr.vidsopr
))
;
Получилось так. Но если я хочу добавить or word(600)==katsopr.vidsopr, то конструкция выдает ошибку настройки логических таблиц.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

сделайте

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

....
and ( 502=katsopr.vidsopr OR 600=katsopr.vidsopr)
я обычно объявляю переменную myVidSopr и подставляя туда разные значения пробегаю просто два раза по катсопру.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

and myVidSopr==katsopr.vidsopr
и в цикле for перебирайте myVidSopr
Yuri
Посетитель
Сообщения: 43
Зарегистрирован: 18 ноя 2009, 02:56
Откуда: Гомель, Республика Беларусь

Сообщение Yuri »

Только не забудьте о том, что индекс по таблице KatSopr - vidsopr+dsopr (в вашем случае). В такой последовательности и пишите условия.
Ответить