Набросал пример... Выглядит жутковато
Но SQLiteQuery это выполняет за 400мс, против 6900мс у Запроса 1С.
Период с ВыбНачПериода по ВыбКонПериода;
Количество = Регистр.ОстаткиТМЦ.Количество;
Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
Функция КоличествоНачОст = НачОст(Количество);
Функция КоличествоПриход = Приход(Количество);
Функция КоличествоРасход = Расход(Количество);
Функция КоличествоКонОст = КонОст(Количество);
Группировка День все;
Группировка Номенклатура без групп все ВошедшиеВЗапрос;
WITH DateT (date) AS ( SELECT :НачДата UNION ALL SELECT date(date,'+1 day') FROM DateT WHERE date< :КонДата)
SELECT
Дата
,Номенклатура [Номенклатура $Справочник.Номенклатура]
,НачОст+total(Приход-Расход) OVER ( PARTITION BY Номенклатура ORDER BY Дата ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) НачОст
,Приход
,Расход
,НачОст+total(Приход-Расход) OVER ( PARTITION BY Номенклатура ORDER BY Дата) КонОст
FROM (
SELECT
t1.Дата
,t2.Номенклатура
,total(t4.НачОст) НачОст
,total(t3.Приход) Приход
,total(t3.Расход) Расход
FROM (
SELECT date AS Дата from DateT) as t1
,(SELECT DISTINCT Номенклатура FROM Регистр_ОстаткиТМЦ WHERE DATE BETWEEN :НачДата AND :КонДата ) as t2
LEFT JOIN ( SELECT
Date AS Дата
,Номенклатура
,sum(case DEBKRED when 1 then 0 else Количество end) Приход
,sum(case DEBKRED when 1 then Количество else 0 end) Расход
FROM Регистр_ОстаткиТМЦ
WHERE Date BETWEEN :НачДата AND :КонДата
GROUP BY Дата,Номенклатура
) as t3 ON t3.Дата = t1.Дата AND t3.Номенклатура=t2.Номенклатура
LEFT JOIN ( SELECT
date(Period,'+1 months') AS Дата
,Номенклатура
,sum(Количество) НачОст
FROM РегистрИтоги_ОстаткиТМЦ
WHERE PERIOD = date( :НачДата,'-1 months')
GROUP BY Номенклатура
) as t4 ON t4.Номенклатура=t2.Номенклатура
GROUP BY t2.Номенклатура,t1.Дата)
GROUP BY Номенклатура,Дата