Иерархический обход по вычисляемому полю без СКД
Есть запрос, где один из уровней группировки - вычисляемое поле. Требуется обойти его результат иерархически, то есть вложенными циклами. Для этого обычно вторым параметром в РезультатЗапроса.Выбрать() указывают имя группировки. Что писать в этом случае? Или надо как-то по-другому?
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТВ_Программа.Период КАК Период,
| МАКСИМУМ(ТВ_Программа.ТВ_Передача) КАК ТВ_Передача,
| НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ТВ_Программа.Период, ЧАС, -6), ДЕНЬ) КАК НачалоЭфирногоДня
|ИЗ
| РегистрСведений.ТВ_Программа КАК ТВ_Программа
|ГДЕ
| ТВ_Программа.Период МЕЖДУ &ДатаС И &ДатаПо
|
|СГРУППИРОВАТЬ ПО
| НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ТВ_Программа.Период, ДЕНЬ, -6), ДЕНЬ),
| ТВ_Программа.Период
|
|УПОРЯДОЧИТЬ ПО
| НачалоЭфирногоДня,
| Период";
Запрос.УстановитьПараметр("ДатаС", ДатаС);
Запрос.УстановитьПараметр("ДатаПо", ДатаПо);
РезультатЗапроса = Запрос.Выполнить();
// что писать вместо имени?????
ВыборкаГруппировка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "");
Пока ВыборкаГруппировка.Следующий() Цикл
Сообщить("*** "+ВыборкаГруппировка.НачалоЭфирногоДня+" *** "+ВыборкаГруппировка.Период);
ВыборкаДетальныеЗаписи=ВыборкаГруппировка.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Период);
КонецЦикла;
КонецЦикла;
ПоказатьПо теме из базы знаний
Найденные решения
(8)погоди. у тебя в запросе вообще итогов нет. должно быть типа того
а у тебя просто сгруппированы строки. результат будет плоская таблица, а не дерево значений
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| 25 + 33 КАК МоеНазвание,
| Номенклатура.Артикул КАК Артикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ИТОГИ ПО
| МоеНазвание,
| Артикул";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаМоеНазвание = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"МоеНазвание");
Пока ВыборкаМоеНазвание.Следующий() Цикл
// Вставить обработку выборки ВыборкаМоеНазвание
ВыборкаАртикул = ВыборкаМоеНазвание.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Артикул");
Пока ВыборкаАртикул.Следующий() Цикл
// Вставить обработку выборки ВыборкаАртикул
ВыборкаДетальныеЗаписи = ВыборкаАртикул.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
КонецЦикла;
КонецЦикла;
Показатьа у тебя просто сгруппированы строки. результат будет плоская таблица, а не дерево значений
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
| ТВ_Программа.Период МЕЖДУ &ДатаС И &ДатаПо
|
|СГРУППИРОВАТЬ ПО
| НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ТВ_Программа.Период, ДЕНЬ, -6), ДЕНЬ),
|
|УПОРЯДОЧИТЬ ПО
попробуйте убрать | ТВ_Программа.Период и
написать
ВыборкаГруппировка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
2 параметр не обязательный
(8)погоди. у тебя в запросе вообще итогов нет. должно быть типа того
а у тебя просто сгруппированы строки. результат будет плоская таблица, а не дерево значений
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| 25 + 33 КАК МоеНазвание,
| Номенклатура.Артикул КАК Артикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ИТОГИ ПО
| МоеНазвание,
| Артикул";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаМоеНазвание = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"МоеНазвание");
Пока ВыборкаМоеНазвание.Следующий() Цикл
// Вставить обработку выборки ВыборкаМоеНазвание
ВыборкаАртикул = ВыборкаМоеНазвание.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Артикул");
Пока ВыборкаАртикул.Следующий() Цикл
// Вставить обработку выборки ВыборкаАртикул
ВыборкаДетальныеЗаписи = ВыборкаАртикул.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
КонецЦикла;
КонецЦикла;
Показатьа у тебя просто сгруппированы строки. результат будет плоская таблица, а не дерево значений
(9) Через "ИТОГИ" работает. И на "НачалоЭфирногоДня" не ругается, и ни группировать по периоду, ни указывать имя группировки не нужно:
ВЫБРАТЬ
| ТВ_Программа.Период КАК Период,
| ТВ_Программа.ТВ_Передача КАК ТВ_Передача,
| НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ТВ_Программа.Период, ЧАС, -6), ДЕНЬ) КАК НачалоЭфирногоДня
|ИЗ
| РегистрСведений.ТВ_Программа КАК ТВ_Программа
|ГДЕ
| ТВ_Программа.Период МЕЖДУ &ДатаС И &ДатаПо
|
|УПОРЯДОЧИТЬ ПО
| НачалоЭфирногоДня,
| Период
|ИТОГИ
| МАКСИМУМ(ТВ_Передача)
|ПО
| НачалоЭфирногоДня
Показать