Иерархический обход по вычисляемому полю без СКД

1. DWZ2 21.01.20 15:05 Сейчас в теме
Есть запрос, где один из уровней группировки - вычисляемое поле. Требуется обойти его результат иерархически, то есть вложенными циклами. Для этого обычно вторым параметром в РезультатЗапроса.Выбрать() указывают имя группировки. Что писать в этом случае? Или надо как-то по-другому?

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

Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Номенклатура.Ссылка КАК Ссылка,
		|	25 + 33 КАК МоеНазвание,
		|	Номенклатура.Артикул КАК Артикул
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура
		|ИТОГИ ПО
		|	МоеНазвание,
		|	Артикул";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаМоеНазвание = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"МоеНазвание");
	
	Пока ВыборкаМоеНазвание.Следующий() Цикл
		// Вставить обработку выборки ВыборкаМоеНазвание
	
		ВыборкаАртикул = ВыборкаМоеНазвание.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Артикул");
	
		Пока ВыборкаАртикул.Следующий() Цикл
			// Вставить обработку выборки ВыборкаАртикул
	
			ВыборкаДетальныеЗаписи = ВыборкаАртикул.Выбрать();
	
			Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
				// Вставить обработку выборки ВыборкаДетальныеЗаписи
			КонецЦикла;
		КонецЦикла;
	КонецЦикла;
Показать




а у тебя просто сгруппированы строки. результат будет плоская таблица, а не дерево значений
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Lenten 25 21.01.20 15:34 Сейчас в теме
  |    ТВ_Программа.Период МЕЖДУ &ДатаС И &ДатаПо
        |
        |СГРУППИРОВАТЬ ПО
        |    НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ТВ_Программа.Период, ДЕНЬ, -6), ДЕНЬ),
 
        |
        |УПОРЯДОЧИТЬ ПО


попробуйте убрать | ТВ_Программа.Период и

написать

ВыборкаГруппировка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);


2 параметр не обязательный
3. DWZ2 21.01.20 15:47 Сейчас в теме
4. Lenten 25 21.01.20 15:52 Сейчас в теме
(3) из запроса. группируйте только по НачалоЭфирногоДня
5. DWZ2 22.01.20 06:50 Сейчас в теме
(4) Не пойдёт. Мне нужны 2 группировки - по эфирному дню и внутри него по программе.
6. Lenten 25 22.01.20 09:23 Сейчас в теме
(5) у вас и так на один период 1 программа. вы же написали
 |    ТВ_Программа.Период КАК Период,
        |    МАКСИМУМ(ТВ_Программа.ТВ_Передача) КАК ТВ_Передача,
10. DWZ2 22.01.20 16:44 Сейчас в теме
(6) А без него ругается

Поле не входит в группу "ТВ_Программа.Период"
НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(<<?>>ТВ_Программа.Период, ЧАС, -6), ДЕНЬ) КАК НачалоЭфирногоДня
7. Lenten 25 22.01.20 09:33 Сейчас в теме
(5) но возвращаясь к первоначальному вопросу, можно писать так

ВыборкаГруппировка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "НачалоЭфирногоДня");
8. DWZ2 22.01.20 16:36 Сейчас в теме
(7)
"НачалоЭфирногоДня"


Ругается
Измерение не найдено "НачалоЭфирногоДня"
9. Lenten 25 22.01.20 16:43 Сейчас в теме
(8)погоди. у тебя в запросе вообще итогов нет. должно быть типа того

Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Номенклатура.Ссылка КАК Ссылка,
		|	25 + 33 КАК МоеНазвание,
		|	Номенклатура.Артикул КАК Артикул
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура
		|ИТОГИ ПО
		|	МоеНазвание,
		|	Артикул";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаМоеНазвание = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"МоеНазвание");
	
	Пока ВыборкаМоеНазвание.Следующий() Цикл
		// Вставить обработку выборки ВыборкаМоеНазвание
	
		ВыборкаАртикул = ВыборкаМоеНазвание.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Артикул");
	
		Пока ВыборкаАртикул.Следующий() Цикл
			// Вставить обработку выборки ВыборкаАртикул
	
			ВыборкаДетальныеЗаписи = ВыборкаАртикул.Выбрать();
	
			Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
				// Вставить обработку выборки ВыборкаДетальныеЗаписи
			КонецЦикла;
		КонецЦикла;
	КонецЦикла;
Показать




а у тебя просто сгруппированы строки. результат будет плоская таблица, а не дерево значений
11. DWZ2 22.01.20 16:50 Сейчас в теме
(9) Через "ИТОГИ" работает. И на "НачалоЭфирногоДня" не ругается, и ни группировать по периоду, ни указывать имя группировки не нужно:

ВЫБРАТЬ
		|	ТВ_Программа.Период КАК Период,
		|	ТВ_Программа.ТВ_Передача КАК ТВ_Передача,
		|	НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ТВ_Программа.Период, ЧАС, -6), ДЕНЬ) КАК НачалоЭфирногоДня
		|ИЗ
		|	РегистрСведений.ТВ_Программа КАК ТВ_Программа
		|ГДЕ
		|	ТВ_Программа.Период МЕЖДУ &ДатаС И &ДатаПо
		|
		|УПОРЯДОЧИТЬ ПО
		|	НачалоЭфирногоДня,
		|	Период
		|ИТОГИ
		|	МАКСИМУМ(ТВ_Передача)
		|ПО
		|	НачалоЭфирногоДня
Показать
Оставьте свое сообщение
Вакансии
Программист 1С
Казань
зарплата от 150 000 руб.
Полный день

Программист 1С:ERP
Москва
зарплата от 100 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 200 000 руб. до 300 000 руб.
Полный день

Программист 1С (удаленно)
Самара
зарплата от 230 000 руб. до 230 000 руб.
Полный день

Руководитель группы разработки 1С
Москва
зарплата от 250 000 руб. до 250 000 руб.
Полный день