Имя: Пароль:
1C
1С v8
Итоги в запросе
0 EugeniaK
 
27.03.13
19:33
Чего-то я запуталась.
Есть запрос с несколькими итогами
Например
ВЫБРАТЬ Подразделение, Сотрудник, Начисление, Период, Сумма
    ИЗ Начисления
 ИТОГИ
   Сумма(Сумма)
    ПО
   Подразделение
   Сотрудник
   Начисление

Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Получается выборка
Строка1: Подразделение = "Цех1", Сотрудник = Неопределено, Начисление = Неопределено, Сумма = 100
Строка2: Подразделение = "Цех2", Сотрудник = Неопределено, Начисление = Неопределено, Сумма = 110

Как правильно написать команду "Выбрать", чтобы получить выборку по нескольким итогам одновременно?
Т.е.
Строка1: Подразделение = "Цех1", Сотрудник = Иванов, Начисление = Нач1, Сумма = 50
Строка2: Подразделение = "Цех1", Сотрудник = Петров, Начисление = Нач2, Сумма = 60
Пробовала
Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Начисление");
Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Подразделение,Сотрудник,Начисление");

Я конечно понимаю, что можно написать
ВыборкаПодразделение = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Подразделение");
Пока ВыборкаПодразделение.Следующий() Цикл
ВыборкаСотрудник = ВыборкаПодразделение.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Подразделение");
Пока ВыборкаСотрудник.Следующий() Цикл
ВыборкаНачисление = ВыборкаСотрудник.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Подразделение");
//Код
КонецЦикла;

КонецЦикла;

Но как-то это криво.
1 ale-sarin
 
27.03.13
19:35
Использовать не ИТОГИ, а СГРУППИРОВАТЬ, я так думаю. Если правильно понял.
2 EugeniaK
 
27.03.13
19:37
(1) Не подходит.
При "сгруппировать" я получу только итоги.
А мне нужны итоги по трем группам одновременно, но к ним еще и детальные строки.
3 ale-sarin
 
27.03.13
19:39
(2) СКД так умеет.
4 EugeniaK
 
27.03.13
19:41
(3) Умеет.
Но нужно в программе.
5 zladenuw
 
27.03.13
19:41
(4) и че в программе ? ты с скд можешь получить дерево с  результатом твоего запроса
6 GANR
 
27.03.13
19:50
(0) Чем цикл внутри цикла плох?
Выдели код, нажми Alt + Shift + F - все будет структурировано и НЕкриво ))).
7 EugeniaK
 
27.03.13
20:42
(6) Цикл плох тем, что для документа с 200 сотрудников получится 200 вызовов команды
ВыборкаСотрудник.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Начисление");
Т.е. 200 выборок по 3-5 строчек.
Мне кажется с точки зрения производительности это не самый лучший вариант.
8 EugeniaK
 
27.03.13
20:43
(6) Я не в конфигураторе, а просто в сообщении набирала, поэтому Alt + Shift + F не поможет.
Сам код несколько сложнее, просто по аналогии написала.
9 EugeniaK
 
27.03.13
20:48
(5) Имешь в виду скормить выборку построителю отчетов или как?
Тогда уж лучше тройной цикл в цикле.
10 magicSan
 
27.03.13
20:52
ВЫБРАТЬ Подразделение, Сотрудник, Начисление, Период, Сумма
    ИЗ Начисления
 ИТОГИ
   Сумма(Сумма)
    ПО
   Подразделение
11 GANR
 
27.03.13
20:57
(7) > кажется с точки зрения производительности
Замер производительности страшных цифр не показывал мне ни разу при таком обходе. Ну, возможно процентов на 10 она изменится. Вот если получение данных, (читай, запрос) или БольшаяТаблицаЗначений.НайтиСтроки(СтруктураНеиндекисрованныхПолей) в цикле сделать - вот это будет страшно.
12 EugeniaK
 
27.03.13
21:00
(10)
Такая команда даст итог только по подразделению.

Нужно итог по группе полей.
Вида:
Строка1Итога: Подразделение = "Цех1",Сотрудник="Иванов",Начисление="Вид1", Период =Неопределено, Сумма = 100
ДетальнаяСтрока1: Период = 2012, сумма = 40
ДетальнаяСтрока2: Период = 2013, сумма = 60
Строка2Итога: Подразделение = "Цех1",Сотрудник="Иванов",Начисление="Вид2", Период =Неопределено, Сумма = 150
ДетальнаяСтрока1: Период = 2012, сумма = 70
ДетальнаяСтрока2: Период = 2013, сумма = 80
13 rs_trade
 
27.03.13
21:03
(12)  ИТОГИ
   Сумма(Сумма)
   МАКСИМУМ(Сотрудник)
   МАКСИМУМ(Начисление)
ПО
   Подразделение
14 magicSan
 
27.03.13
21:06
(13) )))))) оно самое
15 EugeniaK
 
27.03.13
21:14
(13)
Насколько я понимаю, такой запрос даст результат вида:
Строка1Итога: Подразделение = "Цех1",Сотрудник="Иванов",Начисление="Вид2", Период =Неопределено, Сумма = 250
ДетальнаяСтрока1: Период = 2012,Сотрудник="Иванов",Начисление="Вид1", сумма = 40
ДетальнаяСтрока2: Период = 2013,Сотрудник="Иванов",Начисление="Вид1", сумма = 60
ДетальнаяСтрока3: Период = 2012,Сотрудник="Иванов", Начисление="Вид2", сумма = 70
ДетальнаяСтрока4: Период = 2013,Сотрудник="Иванов",Начисление="Вид2", сумма = 80
А мне нужно (12)
16 magicSan
 
27.03.13
21:23
(15) Строка1Итога: Подразделение = "Цех1",Сотрудник="Иванов",Начисление="Вид2", Период =Неопределено, Сумма = 250
ДетальнаяСтрока1: Период = 2012,Сотрудник="Иванов",Начисление="Вид1", сумма = 40
ДетальнаяСтрока2: Период = 2013,Сотрудник="Иванов",Начисление="Вид1", сумма = 60

Строка1Итога: Подразделение = "Цех1",Сотрудник="Иванов",Начисление="Вид2", Период =Неопределено, Сумма = 250

ДетальнаяСтрока3: Период = 2012,Сотрудник="Иванов", Начисление="Вид2", сумма = 70
ДетальнаяСтрока4: Период = 2013,Сотрудник="Иванов",Начисление="Вид2", сумма = 80
17 EugeniaK
 
27.03.13
21:23
(13) Т.е. нужна сумма по каждой комбинации полей Подразделение,Сотрудник,Начисление
И потом по каждой комбинации трех полей нужен набор детальных строк.
18 magicSan
 
27.03.13
21:39
сгруппировать по трем полям , попутно внедрив ещё одно поле ключ - типа  "Цех1ИвановВид2". потом раставить контрольгнные точки н ановом поле ...
19 magicSan
 
27.03.13
21:48
а вообще если обработка запроса управляема то (13)
20 EugeniaK
 
27.03.13
21:58
(18) Вариант. Теоретически работать будет.
Но как-то некрасиво.
(19) Имеешь в виду потом идти циклом и рассчитывать нужные итоги отдельно?
21 magicSan
 
27.03.13
22:01
(20) там всё посчитано струткру а как у вас просто
"лишние" поля в дентальных записях
22 magicSan
 
27.03.13
22:03
Строка1Итога: Подразделение = "Цех1",Сотрудник="Иванов",Начисление="Вид1", Период =Неопределено, Сумма = 100

ДетальнаяСтрока1: Период = 2012,Сотрудник="Иванов",Начисление="Вид1", сумма = 40
ДетальнаяСтрока2: Период = 2013,Сотрудник="Иванов",Начисление="Вид1", сумма = 60

Строка1Итога: Подразделение = "Цех1",Сотрудник="Иванов",Начисление="Вид2", Период =Неопределено, Сумма = 150

ДетальнаяСтрока3: Период = 2012,Сотрудник="Иванов", Начисление="Вид2", сумма = 70
ДетальнаяСтрока4: Период = 2013,Сотрудник="Иванов",Начисление="Вид2", сумма = 80
23 EugeniaK
 
27.03.13
22:18
(21) Не поняла про структуру
24 magicSan
 
28.03.13
07:17
там всё посчитано
СТРУТКТУРА как у вас но в детальных записях "лишние " поля
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс