поскольку ине нужно было тянуть данные не в 1С от 1С++ пришлось отказаться. получился такой запрос:
IF OBJECT_ID(N'tempdb.dbo.#ОстаткиОбороты') IS NOT NULL
DROP TABLE #ОстаткиОбороты
SET NOCOUNT ON
CREATE TABLE #ОстаткиОбороты(
Период datetime,
Номенклатура char(9),
Фирма char(9),
Склад char(9),
Количество numeric(38,3),
primary key clustered (Фирма,Номенклатура,Склад,Период))
INSERT INTO #ОстаткиОбороты
SELECT
Период,
Номенклатура,
Фирма,
Склад,
SUM(Количество) Количество
FROM
(
SELECT
'2012.03.01' Период,
Номенклатура,
Фирма,
Склад,
КоличествоОстаток Количество
FROM
(
SELECT
rg6645_vt.sp6639 AS Фирма,
rg6645_vt.sp6640 AS Номенклатура,
rg6645_vt.sp6641 AS Склад,
SUM(rg6645_vt.sp6643) AS КоличествоОстаток
FROM
rg6645 AS rg6645_vt (nolock)
WHERE
rg6645_vt.period='20120201'
GROUP BY
rg6645_vt.sp6639,
rg6645_vt.sp6640,
rg6645_vt.sp6641
HAVING
SUM(rg6645_vt.sp6643) <> 0
) AS Итогов
UNION ALL
SELECT
Период,
Номенклатура,
Фирма,
Склад,
КоличествоПриход-КоличествоРасход Количество
FROM
(
SELECT
ra6645_vt.sp6639 AS Фирма,
ra6645_vt.sp6640 AS Номенклатура,
ra6645_vt.sp6641 AS Склад,
cast(left(j6645_vt.date_time_iddoc, 8) AS datetime) AS Период,
SUM(CASE WHEN ra6645_vt.debkred = 0 THEN ra6645_vt.sp6643 ELSE 0 END) AS КоличествоПриход,
SUM(CASE WHEN ra6645_vt.debkred = 1 THEN ra6645_vt.sp6643 ELSE 0 END) AS КоличествоРасход
FROM
ra6645 AS ra6645_vt (nolock)
INNER JOIN
_1sjourn AS j6645_vt (nolock) ON j6645_vt.iddoc = ra6645_vt.iddoc
WHERE j6645_vt.date_time_iddoc > '20120301' AND
j6645_vt.date_time_iddoc < '20120331Z' AND
j6645_vt.rf6645 = 0x1
GROUP BY
ra6645_vt.sp6639,
ra6645_vt.sp6640,
ra6645_vt.sp6641,
CAST(left(j6645_vt.date_time_iddoc, 8) AS datetime)
HAVING
SUM(CASE WHEN ra6645_vt.debkred = 0 THEN ra6645_vt.sp6643 ELSE 0 END) <> 0 OR
SUM(CASE WHEN ra6645_vt.debkred = 1 THEN ra6645_vt.sp6643 ELSE 0 END) <> 0
) AS Итогов
) AS Итогов
GROUP BY
Период,
Номенклатура,
Фирма,
Склад
ORDER BY
Номенклатура,
Период,
Фирма,
Склад
IF OBJECT_ID(N'tempdb.dbo.#Дни') IS NOT NULL
DROP TABLE #Дни
CREATE TABLE #Дни (Период datetime primary key)
DECLARE @i as datetime
SET @i = '2012.02.29'
WHILE @i < '2012.03.31'
BEGIN
set @i = DATEADD(day,1,@i)
INSERT INTO #Дни VALUES (@i)
END
IF OBJECT_ID(N'tempdb.dbo.#ЗапасСредний') IS NOT NULL
DROP TABLE #ЗапасСредний
CREATE TABLE #ЗапасСредний
(
Период datetime,
Номенклатура char(9),
Фирма char(9),
Склад char(9),
Количество numeric(38,3),
primary key clustered (Фирма,Номенклатура,Склад,Период)
)
INSERT INTO #ЗапасСредний
SELECT
crosstable.Период,
crosstable.Номенклатура,
crosstable.Фирма,
crosstable.Склад,
ISNULL(vt_totalreg.Количество,0) Количество
FROM (
SELECT
Период Период,
vt_def.Номенклатура,
vt_def.Фирма,
vt_def.Склад
FROM
#Дни AS datetable
CROSS JOIN (SELECT DISTINCT Фирма,Номенклатура,Склад FROM #ОстаткиОбороты) AS vt_def
) AS crosstable
LEFT JOIN
#ОстаткиОбороты AS vt_totalreg ON crosstable.Период = vt_totalreg.Период
AND crosstable.Фирма = vt_totalreg.Фирма
AND crosstable.Номенклатура = vt_totalreg.Номенклатура
AND crosstable.Склад = vt_totalreg.Склад
DROP TABLE #ОстаткиОбороты
DROP TABLE #Дни
DECLARE @Номенклатура char(9)
DECLARE @Фирма char(9)
DECLARE @Склад char(9)
DECLARE @Количество numeric(38,3)
UPDATE #ЗапасСредний
SET
@Количество = Количество = CASE WHEN @Фирма = Фирма AND @Номенклатура = Номенклатура AND @Склад = Склад THEN @Количество+Количество ELSE Количество END,
@Фирма = Фирма,
@Номенклатура = Номенклатура,
@Склад = Склад
SELECT * FROM #ЗапасСредний ORDER BY Номенклатура