Если на входе таблица значений и на выходе тоже должна быть таблица значений и не принципиально использовать именно запрос, тогда можно и с помощью СКД сделать
// создаем схему
СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
// Добавляем Источник данных.
ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
ИсточникДанных.Имя = "ИсточникДанных";
ИсточникДанных.ТипИсточникаДанных = "Local";
// Добавляем наборы данных.
// тз - это наша таблица значений с колонками ДатаОстатков и Договоры, используем в качестве внешнего набора данных
НаборДанныхОбъектСхемыКомпоновкиДанных1 = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
НаборДанныхОбъектСхемыКомпоновкиДанных1.Имя = "НаборДанных1";
НаборДанныхОбъектСхемыКомпоновкиДанных1.ИмяОбъекта = "тз";
НаборДанныхОбъектСхемыКомпоновкиДанных1.ИсточникДанных = "ИсточникДанных";
// это запрос к нашему регистру для получения остатков на каждую дату таблицы первого набора
НаборДанныхОбъектСхемыКомпоновкиДанных2 = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
НаборДанныхОбъектСхемыКомпоновкиДанных2.Имя = "НаборДанных2";
НаборДанныхОбъектСхемыКомпоновкиДанных2.ИсточникДанных = "ИсточникДанных";
НаборДанныхОбъектСхемыКомпоновкиДанных2.Запрос =
"ВЫБРАТЬ
| &ДатаОстатков КАК ДатаОстатков,
| рнОстатки.Договор,
| рнОстатки.Сумма КАК СуммаОстаток
|ИЗ
| РегистрНакопления.НашРегистрСОстаткамиПоДоговорам.Остатки(&ДатаОстатков, ) КАК рнОстатки";
НаборДанныхОбъектСхемыКомпоновкиДанных2.АвтоЗаполнениеДоступныхПолей = Истина;
// добавляем связи наборов с передачей параметров
СвязьНабораДанных = СхемаКомпоновкиДанных.СвязиНаборовДанных.Добавить();
СвязьНабораДанных.НаборДанныхИсточник = "НаборДанных1";
СвязьНабораДанных.НаборДанныхПриемник = "НаборДанных2";
СвязьНабораДанных.ВыражениеИсточник = "Договор";
СвязьНабораДанных.ВыражениеПриемник = "Договор";
СвязьНабораДанных = СхемаКомпоновкиДанных.СвязиНаборовДанных.Добавить();
СвязьНабораДанных.НаборДанныхИсточник = "НаборДанных1";
СвязьНабораДанных.НаборДанныхПриемник = "НаборДанных2";
СвязьНабораДанных.ВыражениеИсточник = "ДатаОстатков";
СвязьНабораДанных.ВыражениеПриемник = "ДатаОстатков";
СвязьНабораДанных.Параметр = "ДатаОстатков";
// Добавляем поля набора данных
ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "Договор";
ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "Договор";
ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "Договор";
ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "ДатаОстатков";
ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "ДатаОстатков";
ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "ДатаОстатков";
ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных2.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "СуммаОстаток";
ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "СуммаОстаток";
ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "СуммаОстаток";
// добавляем ресурс
Ресурс = СхемаКомпоновкиДанных.ПоляИтога.Добавить();
Ресурс.ПутьКДанным = "СуммаОстаток";
Ресурс.Выражение = "Сумма(СуммаОстаток)";
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
// формируем структуру выходящих данных
НастройкиКомпоновки = КомпоновщикНастроек.Настройки;
ГруппировкаКомпоновкиДанных = НастройкиКомпоновки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ГруппировкаКомпоновкиДанных.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных = ГруппировкаКомпоновкиДанных.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировкиКомпоновкиДанных.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Договор");
ПолеГруппировкиКомпоновкиДанных = ГруппировкаКомпоновкиДанных.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировкиКомпоновкиДанных.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("ДатаОстатков");
АвтоВыбранноеПолеКомпоновкиДанных = ГруппировкаКомпоновкиДанных.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоВыбранноеПолеКомпоновкиДанных.Использование = Истина;
ВыбранноеПолеКомпоновкиДанных = НастройкиКомпоновки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("СуммаОстаток");
// инициализируем макет, выполнем в коллекцию
ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений");
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки,,,ТипГенератора);
ВнешниеНаборы = Новый Структура("тз", тз);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы);
ОбъектДляЗагрузки = Новый ТаблицаЗначений;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ОбъектДляЗагрузки);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Сообщение отредактировал Batchir - 30.11.21, 14:51