|
|
|
И снова оборотно-сальдовая ведомость (ОСВ)
|
|||
|---|---|---|---|
|
#18+
Замучался я уже: в mdb у меня ОСВ формировалась в запросе (результирующий), который включал в себя еще запросы (первичные) первичные такие: 1) Входящее сальдо (Balans_Saldo) SELECT CustomerSaldo.Number, CustomerSaldo.Saldo FROM CustomerSaldo WHERE (((CustomerSaldo.Date)=[Forms]![CustomerSaldoInfo]![BeginDate])) GROUP BY CustomerSaldo.Number, CustomerSaldo.Saldo; 2) Платежи (Balans_Pay): SELECT CustomerPay.IDCust, Sum(CustomerPay.Amount) AS [Sum-Amount] FROM CustomerPay WHERE (((CustomerPay.DatePay)>=[Forms]![CustomerSaldoInfo]![BeginDate] And (CustomerPay.DatePay)<[Forms]![CustomerSaldoInfo]![EndDate])) GROUP BY CustomerPay.IDCust; 3) Наработка (Balans_Work_TehPD): SELECT TehPD_Documents.Number, Sum([Summa]+[NDS]) AS Tariff FROM TehPD_Documents WHERE (((TehPD_Documents.Date)>=[Forms]![CustomerSaldoInfo]![BeginDate] And (TehPD_Documents.Date)<[Forms]![CustomerSaldoInfo]![EndDate])) GROUP BY TehPD_Documents.Number ORDER BY TehPD_Documents.Number; Результирующий выглядит так: SELECT Members.Filials, Customers.Number, Customers.Firms, Customers.FirmsReal, [Saldo] AS Ost, [Sum-Amount] AS Pay, [Tariff] AS RepTehPD FROM Members INNER JOIN (((Customers LEFT JOIN Balans_Pay ON Customers.Number = Balans_Pay.IDCust) LEFT JOIN Balans_Work_TehPD ON Customers.Number = Balans_Work_TehPD.Number) LEFT JOIN Balans_Saldo ON Customers.Number = Balans_Saldo.Number) ON Members.Code = Customers.Member ORDER BY Members.Filials, Customers.Firms; ------------------------------------------------ При переходе с mdb на ADP возникла проблема. Первичные запрсы я сделал в виде VIEW (правда, неясно как во VIEW передать условия по дате ?), поэтому там добавлена еще группировка по дате А условия по дате предполагалось передавать в SP, которая яввляет собой Результирующий запрос. Правилен ли такой подход ? ИНдексы все есть, но работает жутко медленно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2003, 13:31 |
|
||
|
И снова оборотно-сальдовая ведомость (ОСВ)
|
|||
|---|---|---|---|
|
#18+
Подход не правильный. Создавай процедуру, первичные запрсы оформляй в ней как подзапросы с фильтрацией по дате. Период задавай входными параметрами. Если, в итоге, быстродействие не устроит, надо будет смотреть процедуру. Всегда есть шанс оптимизировать (если, конечно, база спроектирована правильно) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2003, 13:46 |
|
||
|
И снова оборотно-сальдовая ведомость (ОСВ)
|
|||
|---|---|---|---|
|
#18+
Хорошо - создал я первичные запросы в виде хранимых процедур с фильтрацией по дате, а как их потом в результирующую процедуру вставить ? Чего писать в SELCT результирующей процедуре ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2003, 13:59 |
|
||
|
И снова оборотно-сальдовая ведомость (ОСВ)
|
|||
|---|---|---|---|
|
#18+
Не должно быть у тебя ни первичных ни результирующих процедур. Должна быть одна. Первичные запросы должны являтся подзапросами к результирующему запросу. Типа (сильно упрощенно) Select sq1* From (Select * From table1) sq1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2003, 14:02 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1785&tid=1680822]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 324ms |

| 0 / 0 |
