|
Итоги по нескольким полям в запросе | ☑ | ||
---|---|---|---|---|
0
iceman2112
29.01.13
✎
13:16
|
Можно в запросе сделать итоги по нескольким полям
Т.е. чтобы результат запроса было дерево вида: T1 N1 - + G1 + G2 T1 N2 - + G2 + G3 + G4 T2 N2 - + G3 Я знаю как сделать T1 N1 G1 G2 N2 G2 .................. |
|||
1
Alexaha
29.01.13
✎
13:19
|
ну и сделай группировку не по одному полю, а по двум
что мешает? |
|||
2
iceman2112
29.01.13
✎
13:29
|
Группировка, я потом не смогу выборку открыть - а это как раз и нужно.
Т.е в первом случае было бы: ВыборкаПоТиN = Результат.Выбрать(ОбходПоГруппировкам); Пока ВыборкаПоТиN.Следующий() Цикл ВыборкаПОG = ВыборкаПоТиN.Выбрать(ОбходПоГруппировкам); Пока ВыборкаПОG.Следующий() Цикл .... КонецЦикла; КонецЦикла; а во втором примере 3 цикла |
|||
3
Fragster
гуру
29.01.13
✎
13:31
|
1 цикл:
// FIFO по сделкам и складам Выборка = Построитель.Результат.Выбрать(ОбходРезультатаЗапроса.Прямой); Пока Выборка.Следующий() Цикл Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке И Выборка.Группировка() = "Количество" // это последнее поле в итогах Тогда ОстатокКоличества = Выборка.Количество; // остатокколичества - это поле в детальных записях. в итогах выражение "сумма" для него Если ОстатокКоличества > Выборка.КоличествоОстаток Тогда Отказ = Истина; КонецЕсли; КонецЕсли; Если Не Отказ И Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ДетальнаяЗапись Тогда КоличествоЗаписи = Мин(Выборка.КоличествоОстаток, ОстатокКоличества); Если КоличествоЗаписи = 0 Тогда Продолжить; КонецЕсли; ,,,,,,,,,,,,,,, ОстатокКоличества = ОстатокКоличества - КоличествоЗаписи; КонецЕсли; КонецЦикла; |
|||
4
Fragster
гуру
29.01.13
✎
13:31
|
// КоличествоОстаток - это поле в детальных записях. в итогах выражение "сумма" для него
|
|||
5
Fragster
гуру
29.01.13
✎
13:32
|
как выбрать сразу по 2-м полям - так и не понял
|
|||
6
Alexaha
29.01.13
✎
13:33
|
(2) ааа...я думал ты про СКД...
|
|||
7
le_
29.01.13
✎
13:33
|
Если использовать СКД, можно настроить группировку по двум полям. Результат можно выгрузить в дерево, если это не отчет.
|
|||
8
iceman2112
29.01.13
✎
13:34
|
(3) ща гляну.
Но суммировать вообще ничего не надо. Важен сам обход по дереву. Т.е. У меня Подразделение, Сотрудник и Надбавки. Вот нужно отрыть выборку по подздразделению и сотруднику, а потом обойти их надбавки |
|||
9
Fragster
гуру
29.01.13
✎
13:35
|
(8) так даже проще
|
|||
10
Fragster
гуру
29.01.13
✎
13:37
|
Выборка = Построитель.Результат.Выбрать(ОбходРезультатаЗапроса.Прямой);
Пока Выборка.Следующий() Цикл Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке И Выборка.Группировка() = "Сотрудник" // это последнее поле в итогах Тогда //тут действия для группировки Если; Если Не Отказ И Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ДетальнаяЗапись Тогда //тут действия для детальных записей КонецЕсли; КонецЦикла; |
|||
11
iceman2112
29.01.13
✎
13:42
|
))) Похоже это ответ.
|
|||
12
iceman2112
30.01.13
✎
11:55
|
ВыборкаЗапроса1 = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Поле1,Поле2,Поле3");
Пока ВыборкаЗапроса1.Следующий() Цикл Если ВыборкаЗапроса1.Группировка() <> "Поле3" Тогда Продолжить; КонецЕсли; // тут у тебя уже Поле1, Поле2, Поле3 заполнены КонецЦикла; |
|||
13
Fragster
гуру
30.01.13
✎
11:58
|
(12) а за третий параметр разобрался?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |