|
Обход по группировкам и получение общего итога | ☑ | ||
---|---|---|---|---|
0
moonlight
28.06.17
✎
13:46
|
Добрый день!
Например есть такой запрос: ВЫБРАТЬ Продажи.Контрагент КАК Покупатель, Продажи.Маршрут КАК Маршрут, СУММА(Продажи.Количество * Продажи.Номенклатура.ЕдиницаХраненияОстатков.Вес) КАК Вес, СУММА(Продажи.Стоимость) КАК Сумма ИЗ РегистрНакопления.Продажи.Регистратор КАК Продажи СГРУППИРОВАТЬ ПО Продажи.Контрагент, Продажи.Маршрут ИТОГИ СУММА(Вес), СУММА(Сумма) ПО ОБЩИЕ, Маршрут как правильно организовать обход результата данного запроса, чтобы при выводе в табличный документ вначале выводилась группировка по Маршруту с итогам, затем детальные записи (Покупатель, количество, Вес), а в конце выводится общий итог? |
|||
1
pessok
28.06.17
✎
13:48
|
если я правильно понял вопрос, то второй параметр у Выбрать - имя группировки
|
|||
2
1dvd
28.06.17
✎
13:56
|
конструктором смастряч
|
|||
3
Рэйв
28.06.17
✎
13:59
|
.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам)
|
|||
4
Tateossian
28.06.17
✎
14:00
|
РезультатЗапроса (QueryResult)
Выбрать (Select) Синтаксис: Выбрать(<ТипОбхода>, <Группировки>, <ГруппировкиДляЗначенийГруппировок>) Параметры: <ТипОбхода> (необязательный) Тип: ОбходРезультатаЗапроса. Задает тип обхода записей в получаемой выборке. Значение по умолчанию: Прямой. <Группировки> (необязательный) Тип: Строка. Список группировок по которым будет вестись обход, разделенных запятыми. Для детальных записей указывается пустая строка. В случае, если группировки не указаны - будет использоваться следующая группировка, указанная в предложении запроса "ИТОГИ". <ГруппировкиДляЗначенийГруппировок> (необязательный) Тип: Строка. Список группировок, из которых будут выбираться значения группировок для обхода, разделенных запятыми. Если указано "Все", то будут выбираться все значения группировок. Если указана пустая строка, то значения для группировок будут выбираться из предыдущей группировки. Возвращаемое значение: Тип: ВыборкаИзРезультатаЗапроса. |
|||
5
Cyberhawk
28.06.17
✎
14:02
|
"как правильно организовать обход результата данного запроса" // Правильно будет организовать обход результата данного запроса силами СКД
|
|||
6
kumena
28.06.17
✎
14:26
|
> Правильно будет организовать обход результата данного запроса силами СКД
стесняюсь спросить, а как ты при 8.0 то жил? |
|||
7
moonlight
28.06.17
✎
14:37
|
(4) ТО что выбрать понятно. Сформулирую по другому. Я делаю перебор результата запроса
ВыборкаМаршрут = ПостроительОтчета.Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Маршрут"); Пока ВыборкаМаршрут.Следующий() Цикл ОбластьМаршрут.Параметры.Заполнить(ВыборкаМаршрут); ДокументРезультат.Вывести(ОбластьМаршрут); ОбластьШапка=МакетОтчета.ПолучитьОбласть("ШапкаТаблицы"); ДокументРезультат.Вывести(ОбластьШапка); Выборка = ВыборкаМаршрут.Выбрать(ОбходРезультатаЗапроса.Прямой); Пока Выборка.Следующий() Цикл ОбластьСтрокаДетали=МакетОтчета.ПолучитьОбласть("СтрокаДетали"); ОбластьСтрокаДетали.Параметры.Заполнить(Выборка); ОбластьСтрокаДетали.Параметры.нпп=нпп; ДокументРезультат.Вывести(ОбластьСтрокаДетали); КонецЦикла; ОбластьМаршрутИтоги=МакетОтчета.ПолучитьОбласть("МаршрутИтоги"); ОбластьМаршрутИтоги.Параметры.Заполнить(ВыборкаМаршрут); ДокументРезультат.Вывести(ОбластьМаршрутИтоги); КонецЦикла; и детальные записи задваиваются и не могу понять почему? |
|||
8
mistеr
28.06.17
✎
14:42
|
Я один тут не понимаю, что за таблица РегистрНакопления.Продажи.Регистратор?
|
|||
9
kumena
28.06.17
✎
14:45
|
(7) а общие итоги почему не выбираешь?
|
|||
10
kumena
28.06.17
✎
14:46
|
> Я один тут не понимаю, что за таблица РегистрНакопления.Продажи.Регистратор?
в контексте итогов это вообще не важно и может просто для примера что-то написано. |
|||
11
moonlight
28.06.17
✎
15:36
|
(10) Хотел упростить текст запроса, вот и ошибся. Вот оригинал запроса:
ВЫБРАТЬ Продажи.Контрагент КАК Покупатель, СУММА(Продажи.Количество * Продажи.Номенклатура.ЕдиницаХраненияОстатков.Вес) КАК Вес, СУММА(Продажи.Стоимость) КАК Сумма, Маршруты.Маршрут КАК Маршрут ИЗ РегистрНакопления.Продажи КАК Продажи ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ВложенныйЗапрос.Контрагент КАК Контрагент, ВложенныйЗапрос.Склад КАК Склад, ВложенныйЗапрос.Маршрут КАК Маршрут ИЗ (ВЫБРАТЬ Контрагентыд1сМаршрутыПокупателя.Ссылка КАК Контрагент, д1сМаршрутыСклады.Склад КАК Склад, Контрагентыд1сМаршрутыПокупателя.МаршрутПокупателя КАК Маршрут, КОЛИЧЕСТВО(Контрагентыд1сМаршрутыПокупателя.НомерСтроки) КАК КоличествоМаршрутов ИЗ Справочник.Контрагенты.д1сМаршрутыПокупателя КАК Контрагентыд1сМаршрутыПокупателя ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.д1сМаршруты.Склады КАК д1сМаршрутыСклады ПО Контрагентыд1сМаршрутыПокупателя.МаршрутПокупателя = д1сМаршрутыСклады.Ссылка СГРУППИРОВАТЬ ПО Контрагентыд1сМаршрутыПокупателя.Ссылка, д1сМаршрутыСклады.Склад, Контрагентыд1сМаршрутыПокупателя.МаршрутПокупателя) КАК ВложенныйЗапрос ГДЕ ВложенныйЗапрос.КоличествоМаршрутов = 1) КАК Маршруты ПО Продажи.Контрагент = Маршруты.Контрагент И Продажи.Регистратор.Склад = Маршруты.Склад ГДЕ Продажи.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг И Продажи.Период МЕЖДУ НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ) И КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ) {ГДЕ Маршруты.Маршрут.*} СГРУППИРОВАТЬ ПО Продажи.Контрагент, Маршруты.Маршрут ИТОГИ СУММА(Вес), СУММА(Сумма) ПО ОБЩИЕ, Маршрут |
|||
12
moonlight
28.06.17
✎
15:36
|
(7) каким образом?
|
|||
13
1dvd
28.06.17
✎
15:39
|
(11) проблема не в переборе результата, а в запросе
|
|||
14
Cyberhawk
28.06.17
✎
15:54
|
(6) Вроде нормально
|
|||
15
moonlight
28.06.17
✎
15:59
|
Ну как бы вопрос мой вообще может касаться любого запроса, где есть группировка, итоги и общий итог. Поэтомуменя интересует схема вызова методов Выбрать() и параметры, чтобы получит вывести шапку группировки, детали, итог по группировки и в самом конце общий итог?
|
|||
16
moonlight
28.06.17
✎
16:33
|
Добавил перед выборкой по Маршруту следующее
ВыборкаОбщийИтог = ПостроительОтчета.Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Если НЕ ВыборкаОбщийИтог.Следующий() тогда Возврат; КонецЕсли; //ВыборкаМаршрут = ПостроительОтчета.Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Маршрут"); ВыборкаМаршрут = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Маршрут"); Заработало. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |