При обходе результата запроса обрабатываются только те записи, у которых тип=ИтогПоГруппировке. Детальных записей нет. Почему?
Запрос.Текст="
|ВЫБРАТЬ
| период,
| подразделение,
| объект,
| регистратор,
| НазначениеПлатежа,
| СУММА(Сумма) КАК СуммаПлатежей
|ИЗ
| РегистрНакопления.ПлатежныйКалендарь
|ГДЕ
| (Период>=&НачДата) И (Период<=&КонДата) И (НаправлениеДвижения = ЗНАЧЕНИЕ(Перечисление.НаправленияДвиженияДенег.Платеж))
|СГРУППИРОВАТЬ ПО
| Период,
| Объект,
| Регистратор,
| Подразделение,
| НазначениеПлатежа
|УПОРЯДОЧИТЬ По
| Период,
| Объект
|ИТОГИ
| СУММА(СуммаПлатежей)
|ПО
| Период";
Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка.Следующий() Цикл
Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда
ОбластьСтрокаПериод.Параметры.Период=Выборка.Период;
ОбластьСтрокаПериод.Параметры.СуммаПлатежей=Выборка.СуммаПлатежей;
ТабДок.Вывести(ОбластьСтрокаПериод);
Иначе
ОбластьСтрокаОбъект.Параметры.Заполнить(Выборка);
ТабДок.Вывести(ОбластьСтрокаОбъект);
КонецЕсли;
КонецЦикла;
Запрос.Текст="
|ВЫБРАТЬ
| период,
| подразделение,
| объект,
| регистратор,
| НазначениеПлатежа,
| СУММА(Сумма) КАК СуммаПлатежей
|ИЗ
| РегистрНакопления.ПлатежныйКалендарь
|ГДЕ
| (Период>=&НачДата) И (Период<=&КонДата) И (НаправлениеДвижения = ЗНАЧЕНИЕ(Перечисление.НаправленияДвиженияДенег.Платеж))
|СГРУППИРОВАТЬ ПО
| Период,
| Объект,
| Регистратор,
| Подразделение,
| НазначениеПлатежа
|УПОРЯДОЧИТЬ По
| Период,
| Объект
|ИТОГИ
| СУММА(СуммаПлатежей)
|ПО
| Период";
Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка.Следующий() Цикл
Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда
ОбластьСтрокаПериод.Параметры.Период=Выборка.Период;
ОбластьСтрокаПериод.Параметры.СуммаПлатежей=Выборка.СуммаПлатежей;
ТабДок.Вывести(ОбластьСтрокаПериод);
Иначе
ОбластьСтрокаОбъект.Параметры.Заполнить(Выборка);
ТабДок.Вывести(ОбластьСтрокаОбъект);
КонецЕсли;
КонецЦикла;
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) ArBus, а потому что у тебя только оодин обход выборки -
Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
этот обход выбирате записи только по 1 группировке (игнорируя детальные).
В твоем случае два варианта:
1. Оставить текст как есть, но
или убрать "ОбходРезультатаЗапроса.ПоГруппировкам", оставить:
Выборка=Запрос.Выполнить().Выбрать(); //будет линейный обход всех строк (итоговых и детальных).
или написать Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.Прямой); -тот же самый эффект
Но 1-вым способом обычно не пользуются (даже не уверен что будет работать - чисто теоретически пишу :) )
2. Обычно делают две вложенные выборки
Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
этот обход выбирате записи только по 1 группировке (игнорируя детальные).
В твоем случае два варианта:
1. Оставить текст как есть, но
или убрать "ОбходРезультатаЗапроса.ПоГруппировкам", оставить:
Выборка=Запрос.Выполнить().Выбрать(); //будет линейный обход всех строк (итоговых и детальных).
или написать Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.Прямой); -тот же самый эффект
Но 1-вым способом обычно не пользуются (даже не уверен что будет работать - чисто теоретически пишу :) )
2. Обычно делают две вложенные выборки
Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка.Следующий() цикл
// тут итоги по группировкам
вб2 = Выборка.Выбрать();
пока Вб2.Следующий() цикл
// тут детальные
КонецЦикла;
КонецЦикла;
Показать
(3) Сделал такие выборки:
Пока Выборка.Следующий() Цикл
Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда
ОбластьСтрокаПериод.Параметры.Период=Выборка.Период;
ОбластьСтрокаПериод.Параметры.СуммаПлатежей=Выборка.СуммаПлатежей;
ТабДок.Вывести(ОбластьСтрокаПериод);
ВыборкаДетали = Выборка.Выбрать();
Пока ВыборкаДетали.Следующий() Цикл
ОбластьСтрокаОбъект.Параметры.Заполнить(ВыборкаДетали);
ТабДок.Вывести(ОбластьСтрокаОбъект);
КонецЦикла;
КонецЕсли;
КонецЦикла;
В итоге, если, например, за 05.01.13г. есть платежи по разным подразделениям, то группировка по периоду идет 2раза... т.е.:
05.01.13
Основное подразделение 100руб.
05.01.13
Обособленное подразделение 200руб.
как привести к след.виду:
05.01.13
Основное подразделение 100руб.
Обособленное подразделение 200руб.
Пока Выборка.Следующий() Цикл
Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда
ОбластьСтрокаПериод.Параметры.Период=Выборка.Период;
ОбластьСтрокаПериод.Параметры.СуммаПлатежей=Выборка.СуммаПлатежей;
ТабДок.Вывести(ОбластьСтрокаПериод);
ВыборкаДетали = Выборка.Выбрать();
Пока ВыборкаДетали.Следующий() Цикл
ОбластьСтрокаОбъект.Параметры.Заполнить(ВыборкаДетали);
ТабДок.Вывести(ОбластьСтрокаОбъект);
КонецЦикла;
КонецЕсли;
КонецЦикла;
В итоге, если, например, за 05.01.13г. есть платежи по разным подразделениям, то группировка по периоду идет 2раза... т.е.:
05.01.13
Основное подразделение 100руб.
05.01.13
Обособленное подразделение 200руб.
как привести к след.виду:
05.01.13
Основное подразделение 100руб.
Обособленное подразделение 200руб.
(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")
ЗЫ. А вобще это наверно можно сделать через виртуальнуюж таблицу оборотв с периодичностью день. Так наверно правильно будет.
У тебя видимо "точность" поля период идет с секундами. Кодга ты выводищь отчет используешь формат отсчения времени, но для группировки "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")
ЗЫ. А вобще это наверно можно сделать через виртуальнуюж таблицу оборотв с периодичностью день. Так наверно правильно будет.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот