Группировка В Запросе

Дайнеко

Well-known member
19.11.2009
951
0
#1
Совсем измучался с запросом. Запрос простой, но могу красиво выбрать результаты.
Сам запрос:
Код:
	Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
|	БухИтогиОстаткиИОбороты.Счет							КАК Счет,
|	БухИтогиОстаткиИОбороты.Счет.Код						КАК СчетКод,
|	БухИтогиОстаткиИОбороты.Субконто1						КАК Субконто1,
|	БухИтогиОстаткиИОбороты.Субконто2						КАК Субконто2,
|	БухИтогиОстаткиИОбороты.Валюта							КАК Валюта1,
|	БухИтогиОстаткиИОбороты.Валюта							КАК Валюта2,
|	БухИтогиОстаткиИОбороты.СуммаРНачальныйОстатокДт		КАК НачРубДт,
|	БухИтогиОстаткиИОбороты.СуммаРНачальныйОстатокКт		КАК НачРубКт,
.........
|ИЗ
|	РегистрБухгалтерии.БухИтоги.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , Счет В ИЕРАРХИИ (&Счет), , ) КАК БухИтогиОстаткиИОбороты
|ИТОГИ
|	СУММА(НачРубДт),
|	СУММА(НачРубКт),
...........
|ПО
|	Субконто1 ИЕРАРХИЯ,
|	Валюта КАК Валюта1,
|	Субконто2 ИЕРАРХИЯ,
|	Валюта КАК Валюта2,
|АВТОУПОРЯДОЧИВАНИЕ
|;";
В чем задача: Вывести Субконто поочередно. Под каждым его валюты. Но необходимо по группировкам Валюта сделать 2 прохода. Пример приведу с 60 счетом, имеющим 2 субконто

Клиент 1
- рубль
- доллар
Договор 11 Клиента 1
- рубль
- доллар
Договор 12 Клиента 1
- рубль
- доллар

Клиент 2
- рубль
- доллар
Договор 21 Клиента 2
- рубль
- доллар
Договор 22 Клиента 2
- рубль
- доллар

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

//----------------------------------------------------------
//	
Процедура ВыбратьСубконто(Выборка, Макет, ДокументРезультат)
Пока Выборка.Следующий() Цикл
ИмяГруппировки	= Выборка.Группировка();
Субконто		= Выборка[ИмяГруппировки];
Сообщить(""+Субконто+ " "+Выборка.ТипЗаписи());

//	Валюта
Если Входит(ИмяГруппировки, "Субконто") И Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда
ВыбратьВалюты(Выборка, Макет, ДокументРезультат);
Иначе
Продолжить;
КонецЕсли;
ВыбратьСубконто(Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам), Макет, ДокументРезультат);
КонецЦикла;		// Результат
КонецПроцедуры		// ВыбратьСубконто


//----------------------------------------------------------
Процедура ВыбратьВалюты(Выборка, Макет, ДокументРезультат)

ВыборкаВалют = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Валюта1,Валюта2,Валюта3,Валюта4");
Пока ВыборкаВалют.Следующий() Цикл
ИмяГруппировки	= ВыборкаВалют.Группировка();
Валюта			= ВыборкаВалют[ИмяГруппировки];
Сообщить(" Валюта:" + Валюта);
КонецЦикла;		// ВыборкаВалют

ВыборкаВалют = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Валюта1,Валюта2,Валюта3,Валюта4");
Пока ВыборкаВалют.Следующий() Цикл
ИмяГруппировки	= ВыборкаВалют.Группировка();
Валюта			= ВыборкаВалют[ИмяГруппировки];
Сообщить(" Валюта:" + Валюта);
КонецЦикла;		// ВыборкаВалют
КонецПроцедуры		// ВыбратьВалюты

В чем бяка:
* Мне надо делать 2 прохода по валютам. На первом я выясняю, а нужно ли их вообще выводить.
* Как я понял, Субконто2 подчинено группировке Валюта. И если Валюту не выберу, то группировка Субкотно второго и ниже уровня и не выбирается.
* Пока не было валют, а были только субконто отлично работал и Простой порядок обхода. Хорошо им обойтись.
Пробовал использовать в методе Выбрать() второй параметр. "Группировки"
Выбрать(<ТипОбхода>, <Группировки>, <ГруппировкиДляЗначенийГруппировок>)
Определение не доходит до головы.

Много написал, позже могу уточнить.
 

unknown181538

НеГуру
28.12.2008
1 417
0
#2
Сталкивался с такой бякой.
Могу предложить только некрасивое решение:
Например, еще одним пакетом запроса получить итоги без договоров, выгрузить в ТЗ, и при получении контрагента отбирать строки... ну или еще что-нибудь в этом роде..
 

Дайнеко

Well-known member
19.11.2009
951
0
#3
Могу предложить только некрасивое решение:
Я делаю универсальный отчет: Оборотно-сальдовая по счету. Из типовой бух-ии не совсем подходит. А глядя на его написание - совсем не подходит.

Перефразирую вопрос так. Если разворачиваю только по субконто - все отлично. А нужен еще один шаг - каждое субконто развернуть по валютам. Хоть запрос давай на каждой строке.
 

unknown181538

НеГуру
28.12.2008
1 417
0
#5
Вы смогли разобраться, как в типовом решена проблема, что сначала выводится одна группировка, потом другая без подчинения первой?
 

Дайнеко

Well-known member
19.11.2009
951
0
#6
Да разбирался. В типовой схема упрощена: почти все счета отмечены как НЕвалютные. А отчет по валютным выводит все валюты. У меня все счета валютные и задача сложнее:
- сделать цикл по валютам
- вторым циклом вывести, если там не только рубли.