Имя: Пароль:
1C
1С v8
Как быстрее получать остатки в запросе на текущую дату?
,
0 alex-pro
 
21.10.11
15:32
Так Остатки(,Отбор)
Или
так Остатки(МоментВремени(ТекущаяДата()), Отбор) ?

В общем, с указание параметра или без него?
1 alex-pro
 
21.10.11
15:33
База SQL, конечно.
2 mikecool
 
21.10.11
15:34
пофик, читай описание
3 Ненавижу 1С
 
гуру
21.10.11
15:36
(0) вообще говоря первый вариант в общем случае не на текущую
4 alex-pro
 
21.10.11
15:38
(3)
Это понятно)).
Предположим последняя запись регистра - чуть раньше тек даты )

(2)
А если на реальной базе отличия в разы? Это что может означать?
5 Ненавижу 1С
 
гуру
21.10.11
15:39
(4) ИМХО первый не медленнее второго
6 Renat11111
 
21.10.11
15:40
(0) первый интуитивно должен быть быстрее, так как сразу с таблицы итогов вроде берет на 3999 или какой там год
7 ptiz
 
21.10.11
15:41
Запросы разные.

Примеры:

В 1 случае:
exec sp_executesql N'SELECT
#V8TblAli1_Q_000_T_001._Fld10Balance AS f_1
FROM
(
SELECT
CAST(SUM(_AccumRegTotals11._Fld10) AS NUMERIC(22,0)) AS _Fld10Balance
FROM
_AccumRegTotals11 WITH(NOLOCK)
WHERE
_AccumRegTotals11._Period = P1
) #V8TblAli1_Q_000_T_001',N'P1 datetime',''3999-11-01 00:00:00:000''


во втором добавляется анализ таблицы движений:

exec sp_executesql N'SELECT
#V8TblAli1_Q_000_T_001._Fld10Balance AS f_1
FROM
(
SELECT
CAST(SUM(#V8TblAli1_T._Fld10Balance) AS NUMERIC(29,0)) AS _Fld10Balance
FROM
(
SELECT
CAST(SUM(_AccumRegTotals11._Fld10) AS NUMERIC(22,0)) AS _Fld10Balance
FROM
_AccumRegTotals11 WITH(NOLOCK)
WHERE
_AccumRegTotals11._Period = P1
UNION ALL
SELECT
CAST(CAST(SUM(CASE
WHEN _AccumReg8._RecordKind = CAST(0. AS NUMERIC(1,0))
THEN - _AccumReg8._Fld10
ELSE _AccumReg8._Fld10
END) AS NUMERIC(16,0)) AS NUMERIC(23,0)) AS _Fld10Balance
FROM
_AccumReg8 WITH(NOLOCK)
WHERE
_AccumReg8._Period >= @P2 AND _AccumReg8._Period < P1 AND _AccumReg8._Active = @P3
) #V8TblAli1_T
) #V8TblAli1_Q_000_T_001', N'P1 datetime,@P2 datetime,@P3 varbinary(1)', {ts '3999-11-01 00:00:00'}, {ts '2011-10-22 00:00:00'}, 0x01
8 Renat11111
 
21.10.11
15:41
второй способ вроде берет последний рассчитанный месяц и досчитывает по дням
9 John83
 
21.10.11
15:42
тогда уж

ВЫБРАТЬ
   НДСНачисленныйОстатки.СчетФактура,
   НДСНачисленныйОстатки.НДСОстаток
ИЗ
   РегистрНакопления.НДСНачисленный.Остатки(, Организация = &Организация) КАК НДСНачисленныйОстатки

и

ВЫБРАТЬ
   НДСНачисленныйОстатки.СчетФактура,
   НДСНачисленныйОстатки.НДСОстаток
ИЗ
   РегистрНакопления.НДСНачисленный.Остатки(, ) КАК НДСНачисленныйОстатки
ГДЕ
   НДСНачисленныйОстатки.Организация = &Организация

что будет быстрее?
10 Renat11111
 
21.10.11
15:45
(9) не у него интересней вопрос был, у тебя совсем не интересно )))
11 Рэйв
 
21.10.11
15:48
(0)Без параметра возмется уже расчитанный остаток на 31.12.3999
С параметром будет расчет. второй способ быстрее должен быть
12 alex-pro
 
21.10.11
15:48
(10) я вначале вообще прикола не понял.
Может, (9) это к (7) ???
13 alex-pro
 
21.10.11
15:49
Еще нюанс:
бывает так
что запрос постоянно долбится в базу, часто выполняется
и на 5 - 10 раз выполняется в 100 раз медленнее...
предполагал что в сикле из за разных дат в кэше насобиралась куча подобных щапросов и в итоге выбирается не оптимальный план,
а когда без даты то кэш не растет, т.к. запрос не модифицируется
14 Renat11111
 
21.10.11
15:52
(11) перечитай написанное не вводи людей в заблужденин
2 + 2 = 3.9999999999999999999999999999999...