ОбходРезультатаЗапроса.ПоГруппировкам

1. ArBus 25.01.13 01:50 Сейчас в теме
При обходе результата запроса обрабатываются только те записи, у которых тип=ИтогПоГруппировке. Детальных записей нет. Почему?

Запрос.Текст="
|ВЫБРАТЬ
| период,
| подразделение,
| объект,
| регистратор,
| НазначениеПлатежа,
| СУММА(Сумма) КАК СуммаПлатежей
|ИЗ
| РегистрНакопления.ПлатежныйКалендарь
|ГДЕ
| (Период>=&НачДата) И (Период<=&КонДата) И (НаправлениеДвижения = ЗНАЧЕНИЕ(Перечисление.НаправленияДвиженияДенег.Платеж))
|СГРУППИРОВАТЬ ПО
| Период,
| Объект,
| Регистратор,
| Подразделение,
| НазначениеПлатежа
|УПОРЯДОЧИТЬ По
| Период,
| Объект
|ИТОГИ
| СУММА(СуммаПлатежей)
|ПО
| Период";

Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка.Следующий() Цикл
Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда
ОбластьСтрокаПериод.Параметры.Период=Выборка.Период;
ОбластьСтрокаПериод.Параметры.СуммаПлатежей=Выборка.СуммаПлатежей;
ТабДок.Вывести(ОбластьСтрокаПериод);
Иначе
ОбластьСтрокаОбъект.Параметры.Заполнить(Выборка);
ТабДок.Вывести(ОбластьСтрокаОбъект);
КонецЕсли;
КонецЦикла;
По теме из базы знаний
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. Ягг 495 25.01.13 07:28 Сейчас в теме
(1) ArBus, а потому что у тебя только оодин обход выборки -

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

этот обход выбирате записи только по 1 группировке (игнорируя детальные).

В твоем случае два варианта:
1. Оставить текст как есть, но
или убрать "ОбходРезультатаЗапроса.ПоГруппировкам", оставить:
Выборка=Запрос.Выполнить().Выбрать(); //будет линейный обход всех строк (итоговых и детальных).

или написать Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.Прямой); -тот же самый эффект

Но 1-вым способом обычно не пользуются (даже не уверен что будет работать - чисто теоретически пишу :) )

2. Обычно делают две вложенные выборки
 Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка.Следующий() цикл
  // тут итоги по группировкам
  вб2 = Выборка.Выбрать();
  пока Вб2.Следующий() цикл
   // тут детальные
  КонецЦикла;
КонецЦикла; 
Показать
a.russkikh; user1469276; dikd; TVA_11; 13KrAs; ekomova; burlakov_a_a; +7 Ответить
4. ArBus 25.01.13 09:45 Сейчас в теме
(3) Сделал такие выборки:

Пока Выборка.Следующий() Цикл
Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда
ОбластьСтрокаПериод.Параметры.Период=Выборка.Период;
ОбластьСтрокаПериод.Параметры.СуммаПлатежей=Выборка.СуммаПлатежей;
ТабДок.Вывести(ОбластьСтрокаПериод);
ВыборкаДетали = Выборка.Выбрать();
Пока ВыборкаДетали.Следующий() Цикл
ОбластьСтрокаОбъект.Параметры.Заполнить(ВыборкаДетали);
ТабДок.Вывести(ОбластьСтрокаОбъект);
КонецЦикла;
КонецЕсли;
КонецЦикла;

В итоге, если, например, за 05.01.13г. есть платежи по разным подразделениям, то группировка по периоду идет 2раза... т.е.:

05.01.13
Основное подразделение 100руб.
05.01.13
Обособленное подразделение 200руб.

как привести к след.виду:
05.01.13
Основное подразделение 100руб.
Обособленное подразделение 200руб.
5. Ягг 495 25.01.13 09:49 Сейчас в теме
(4) ArBus, не мучайся, сделай вложенные циклы (способ 2 из (3)) это будет и правильнее и легче :)
6. ArBus 25.01.13 09:53 Сейчас в теме
(5) так так и сделано, все равно не получается как надо
8. Ягг 495 25.01.13 10:00 Сейчас в теме
(6) ArBus, ааа.. убери ты все эти проверки на типы записей (код плохо читаетатся - виноват, не заметил). :)

У тебя видимо "точность" поля период идет с секундами. Кодга ты выводищь отчет используешь формат отсчения времени, но для группировки "05.01.2013 00:00:01" и "05.01.2013 00:00:02" два соверщенно разных значения, и каждое группирвуется отдельно.

В запросе вместо

"|ВЫБРАТЬ
| период, ..."

напиши

"|ВЫБРАТЬ
| НачалоПериода(период, ДЕНЬ ) как период, ..."

т.е. уже в запросе приведи к началу дня (что бы "05.01.2013 00:00:01" и "05.01.2013 00:00:02" воспринимались как одно и тоже "05.01.2013 00:00:00")


ЗЫ. А вобще это наверно можно сделать через виртуальнуюж таблицу оборотв с периодичностью день. Так наверно правильно будет.
9. ArBus 25.01.13 10:04 Сейчас в теме
(8) СПАСИБО БОЛЬШОЕ! ВСЕ ПОЛУЧИЛОСЬ
7. ArBus 25.01.13 09:58 Сейчас в теме
(5) думаю, дело в тексте запроса. ИТОГИ. Но как нужно правильно написать?
2. Rulllan 4 25.01.13 07:25 Сейчас в теме
В цикле надо обходить детальные записи ещё одним циклом.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот