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

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 Сейчас в теме
В цикле надо обходить детальные записи ещё одним циклом.
Оставьте свое сообщение
Вакансии
Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день