Результаты sp_help RA328 (непустые):
-------------------
RA328 dbo user table 2010-09-21 21:06:21.437
-- Столбцы
IDDOC char no 9 no no no Cyrillic_General_CI_AS
LINENO_ smallint no 2 5 0 no (n/a) (n/a) NULL
ACTNO int no 4 10 0 no (n/a) (n/a) NULL
DEBKRED bit no 1 no (n/a) (n/a) NULL
SP4061 char no 9 no no no Cyrillic_General_CI_AS
SP8773 char no 9 no no no Cyrillic_General_CI_AS
SP331 char no 9 no no no Cyrillic_General_CI_AS
SP340 char no 9 no no no Cyrillic_General_CI_AS
SP341 char no 9 no no no Cyrillic_General_CI_AS
SP1554 datetime no 8 no (n/a) (n/a) NULL
SP7404 numeric no 9 14 2 no (n/a) (n/a) NULL
SP342 numeric no 9 14 5 no (n/a) (n/a) NULL
SP421 numeric no 9 14 2 no (n/a) (n/a) NULL
SP343 numeric no 9 14 2 no (n/a) (n/a) NULL
SP344 numeric no 9 14 2 no (n/a) (n/a) NULL
SP347 char no 9 no no no Cyrillic_General_CI_AS
SP6818 numeric no 9 17 2 no (n/a) (n/a) NULL
SP7685 numeric no 9 14 2 no (n/a) (n/a) NULL
--- Индексы
i1 nonclustered located on PRIMARY SP4061, SP8773, SP331, SP340
PK_RA328 clustered, unique, primary key located on PRIMARY IDDOC, LINENO_, ACTNO
--- Ключи
PRIMARY KEY (clustered) PK_RA328 (n/a) (n/a) (n/a) (n/a) IDDOC, LINENO_, ACTNO
Соответственно индекс "i1" создаю я.
Текст запроса в 1С - это простое получение остатков виртуальной таблицей:
ТекстЗапроса = "
|SELECT
| Рег.Фирма as [Фирма $Справочник.Фирмы],
| Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура],
| Рег.СтатусПартии as [СтатусПартии $Перечисление.СтатусыПартии],
| Рег.Партия as [Партия $Справочник.Партии],
| $спрПартии.ПриходныйДокумент as [ПриходныйДокумент $Документ],
| Рег.ДатаПартии as [ДатаПартии $Дата],
| Рег.ЦенаПрод as [ЦенаПрод],
| Рег.КоличествоОстаток as Количество,
| Рег.СуммаУпрОстаток as СуммаУпр,
| Рег.СуммаРубОстаток as СуммаРуб,
| Рег.СуммаБезНДСОстаток as СуммаБезНДС
|
|FROM
| $РегистрОстатки.ПартииНаличие(:ДатаРасчета~,
| ,%УслФирма% AND %УслНоменклатура% AND %УслСтатусПартии%,
| (Фирма,Номенклатура,СтатусПартии,Партия,ДатаПартии,ЦенаПрод), (Количество,СуммаУпр,СуммаРуб,СуммаБезНДС)) as Рег
|
|LEFT JOIN
| $Справочник.Партии as спрПартии ON спрПартии.ID = Рег.Партия
|";
Этот запрос из профайлера:
exec sp_executesql N'
SELECT
Рег.Фирма as [Фирма $Справочник.Фирмы],
Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура],
Рег.СтатусПартии as [СтатусПартии $Перечисление.СтатусыПартии],
Рег.Партия as [Партия $Справочник.Партии],
спрПартии.sp216 as [ПриходныйДокумент $Документ],
Рег.ДатаПартии as [ДатаПартии $Дата],
Рег.ЦенаПрод as [ЦенаПрод],
Рег.КоличествоОстаток as Количество,
Рег.СуммаУпрОстаток as СуммаУпр,
Рег.СуммаРубОстаток as СуммаРуб,
Рег.СуммаБезНДСОстаток as СуммаБезНДС
FROM
(
select
rr328_vt.sp4061 as Фирма,
rr328_vt.sp331 as Номенклатура,
rr328_vt.sp340 as СтатусПартии,
rr328_vt.sp341 as Партия,
rr328_vt.sp1554 as ДатаПартии,
rr328_vt.sp7404 as ЦенаПрод,
sum(rr328_vt.sp342) as КоличествоОстаток,
sum(rr328_vt.sp421) as СуммаУпрОстаток,
sum(rr328_vt.sp343) as СуммаРубОстаток,
sum(rr328_vt.sp344) as СуммаБезНДСОстаток
from (
select
rg328_vt.sp4061,
rg328_vt.sp331,
rg328_vt.sp340,
rg328_vt.sp341,
rg328_vt.sp1554,
rg328_vt.sp7404,
rg328_vt.sp342,
rg328_vt.sp421,
rg328_vt.sp343,
rg328_vt.sp344
from rg328 as rg328_vt (nolock)
where rg328_vt.period=@_CP_1
and (rg328_vt.sp4061 = '' 7 '' AND rg328_vt.sp331 IN (SELECT Val FROM #ВремНомен) AND rg328_vt.sp340 IN ('' 2TB '','' 2TC '','' 2TD '','' 2T3 '','' 2T4 '','' 2T5 '','' 2T6 '','' 2T7 '','' 2T8 '','' 2T9 '','' 2TA '','' 69L '','' 9B '','' 67M '' ))
union all
select
ra328_vt.sp4061,
ra328_vt.sp331,
ra328_vt.sp340,
ra328_vt.sp341,
ra328_vt.sp1554,
ra328_vt.sp7404,
case ra328_vt.debkred when 0 then ra328_vt.sp342 else -ra328_vt.sp342 end,
case ra328_vt.debkred when 0 then ra328_vt.sp421 else -ra328_vt.sp421 end,
case ra328_vt.debkred when 0 then ra328_vt.sp343 else -ra328_vt.sp343 end,
case ra328_vt.debkred when 0 then ra328_vt.sp344 else -ra328_vt.sp344 end
from ra328 as ra328_vt (nolock)
inner join _1sjourn as j328_vt (nolock) on j328_vt.iddoc = ra328_vt.iddoc
where j328_vt.date_time_iddoc > @_CP_2 and j328_vt.date_time_iddoc < @_CP_3
and j328_vt.rf328 = 0x1
and (ra328_vt.sp4061 = '' 7 '' AND ra328_vt.sp331 IN (SELECT Val FROM #ВремНомен) AND ra328_vt.sp340 IN ('' 2TB '','' 2TC '','' 2TD '','' 2T3 '','' 2T4 '','' 2T5 '','' 2T6 '','' 2T7 '','' 2T8 '','' 2T9 '','' 2TA '','' 69L '','' 9B '','' 67M '' ))
) as rr328_vt
group by
rr328_vt.sp4061,
rr328_vt.sp331,
rr328_vt.sp340,
rr328_vt.sp341,
rr328_vt.sp1554,
rr328_vt.sp7404
having
sum(rr328_vt.sp342) <> 0 or
sum(rr328_vt.sp421) <> 0 or
sum(rr328_vt.sp343) <> 0 or
sum(rr328_vt.sp344) <> 0
) as Рег
LEFT JOIN
sc214 as спрПартии ON спрПартии.ID = Рег.Партия
',N'@_CP_1 smalldatetime,@_CP_2 char(8),@_CP_3 char(23)','Aug 1 2010 12:00:00:000AM','20100901','201009219J6OIO FKPMЯЯЯ'
Поля SP4061, SP8773, SP331 и SP340 соответствуют измерениям Фирма, Склад, Номенклатура и СтатусПартии регистра. Они участвуют в фильтре запроса (кроме Склада).