Имя: Пароль:
1C
1С v8
РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам) — как правильно?
0 mistеr
 
15.02.16
20:38
Делаю сложный отчет без СКД. Впервые в жизни понадобился нестандартный обход выборки, и не могу с ним разрбраться. В запросе у меня указано

ИТОГИ
    СУММА(Дней), СУММА(Часов)
ПО
    Должность, Сотрудник, Период, ВидВремени

В отчете мне нужны следующие уровни:
1) Должность, Сотрудник
2) Период
3) ВидВремени

Как правильно вызывать Выбрать()? К примеру, вызываю

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

В этой выборке заполнено только поле Должность, а вложенные выборки вообще пустые.
1 Defender aka LINN
 
15.02.16
21:44
Потому что 2 цикла надо просто в верхнем только выборка
2 EvgeniuXP
 
15.02.16
21:56
Если Выборка.Уровень(1) Тогда

выводи Должность, Сотрудник

ИначеЕсли Выборка.Уровень(2) Тогда

выводи Период

ИначеЕсли Выборка.Уровень(3) Тогда

выводи ВидВремени
3 EvgeniuXP
 
15.02.16
21:56
можно одним циклом :)
4 EvgeniuXP
 
15.02.16
21:58
Перед Если напиши просто

Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий Цикл

... см. выше


КонецЦикла;
5 EvgeniuXP
 
15.02.16
21:59
(2) вместо Выборка.Уровень(1) - пиши Выборка.Уровень() = 1
6 mistеr
 
15.02.16
22:12
(2) (4) Не понял. Мне не нужна простая выборка, мне нужны именно вложенные выборки по группировкам. И они отлично работают, если на каждом уровне указывать по одному полю группировки. Но в моей ситуации нужна группировка по нескольким полям.

Как ее получить?
7 EvgeniuXP
 
15.02.16
22:37
так в запросе и так группирует - или ошибаюсь? при обычной выборке получишь итоги на соответствующих уровнях
8 EvgeniuXP
 
15.02.16
22:38
а выборку проводит последовательно как и при группировках
9 mistеr
 
15.02.16
23:04
(7) Как при обычной выборке мен получить итоги по (Должность, Сотрудник)?
10 patria0muerte
 
16.02.16
04:04
В общем случае так:

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

Пока ВыборкаДолжность.Следующий() Цикл

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

Пока ВыборкаСотрудник.Следующий() Цикл

//Здесь у тебя в ВыборкаСотрудник есть должности и сотрудники

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

Пока ВыборкаПериод.Следующий() Цикл

//Тут в ВыборкаПериод у тебя появляются еще и периоды

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

Пока ВыборкаВидВремени.Следующий() Цикл

//Тут у тебя в ВыборкаВидВремени появляются виды времени

ВЫборкаДетальныеЗаписи = ВыборкаВидВремени.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

//Тут у тебя в ВыборкаДетальныеЗаписи вся ветка дерева

КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
11 mistеr
 
16.02.16
10:08
(10) Так я умею, как писал в (6) (хотя не точно сформулировал). Но вопрос в другом: как получить итоги по (Должность, Сотрудник)? Только не говори "самому посчитать".

Кто-нибудь вообще знает, как использовать второй и третий параметры в Выбрать()? Их описание в СП обманчиво, как оказалось.
12 rozer76
 
16.02.16
11:16
(11) или в одном цикле с уровнями или как в (10)
13 mistеr
 
16.02.16
11:41
(12) А как "в одном цикле с уровнями"?
14 mistеr
 
16.02.16
18:46
Апну пожалуй.
15 patria0muerte
 
17.02.16
10:03
(11) Отлично, что умеешь.

Как раз таки в (10) в ВыборкаСотрудник у тебя и будут итоги по (Должность, Сотрудник). Чего не устраивает то?
16 patria0muerte
 
17.02.16
10:05
(11)Можешь вот тут глянуть, может подойдет тебе такой пример:

Структура организации с должностями и физлицами в виде дерева.
Независимо от того, куда вы едете — это в гору и против ветра!