Зачем очень это сте хочется...
Для всяких интеграций, которыми в последнее время сильно утомляют, нужно что то типа:
Запрос1С
Период с ВыбНачПериода по ВыбКонПериода;
Без итогов;
Номенклатура = Регистр.Продажи.Номенклатура;
Количество = Регистр.Продажи.Количество;
КоличествоВ = Регистр.Продажи.КоличествоВ;
Функция КоличествоСумма = Сумма(Количество);
Функция КоличествоВСумма = Сумма(КоличествоВ);
Группировка Номенклатура без упорядочивания без групп;
Группировка День все;
Аналогичен следующему запросу 1sqlite
WITH
cte1(Номенклатура) AS (
SELECT
rp.Номенклатура
FROM Регистр_Продажи AS rp
WHERE rp.date BETWEEN :НачДата AND :КонДата
GROUP BY rp.Номенклатура
),
cte2(Дата) AS (
VALUES(:НачДата)
UNION
SELECT date(Дата,'+1 day')
FROM cte2
WHERE Дата<:КонДата
)
SELECT
cte1.Номенклатура [Номенклатура $Справочник.Номенклатура],
cte2.Дата [Дата :Дата],
sum(case rp.DEBKRED when 1 then -rp.Количество else rp.Количество end) [Количество $Число.15.5],
sum(case rp.DEBKRED when 1 then -rp.КоличествоВ else rp.КоличествоВ end) [КоличествоВ $Число.15.5]
FROM
cte1
CROSS JOIN cte2
LEFT JOIN Регистр_Продажи AS rp
ON rp.Номенклатура = cte1.Номенклатура
AND rp.DATE = cte2.Дата
GROUP by cte1.Номенклатура,cte2.Дата
ORDER by cte1.Номенклатура,cte2.Дата
1C 33c, 1sqlite 12c за одинаковый период.
ВАЖНО: cte1 перед cte2, иначе будет 18с (sqlite, я так понимаю, cte не кеширует и для каждой строки номенклатуры cte2 вызывается заново, если это будет наоборот, то придется для каждой даты сканировать справочник Номенклатура, что не есть хорошо.
Не такая уж и большая разница, но с установкой дополнительных фильтров и использования регистра ПартииНаличие все значительно веселее (в том смысле что это медленнее РегистраПродаж, но и разница значительно больше, да и список Номенклатуры тоже не из регистра).