|
v7: Не группирует по периодам | ☑ | ||
---|---|---|---|---|
0
Anempadest
27.01.15
✎
05:10
|
Делаю отчёт о продаже. Очень простой:
Год | Квартал | Месяц | День | Сумма В отчёт выводится: Год | Последний квартал года | Последний месяц года | Последний день года | Итог за год Происходит группировка только по годам. По нижестоящим группировкам запрос просто суммирует значение за год. Бьюсь уже полдня - не знаю, что делать. Помогите! |
|||
1
VladZ
27.01.15
✎
05:16
|
Видимо, что-то пошло не так.
Показывай, что делаешь. |
|||
2
Anempadest
27.01.15
✎
05:18
|
Вот текст запроса:
Период С ДатаН По ДатаК; _Налоговый=Регистр.База.Налоговый; _Сумма=Регистр.База.Сумма; Группировка Год; Группировка Квартал; Группировка Месяц; Группировка День; Функция Сумма=Сумма(_Сумма); Функция СуммаПродажа=Сумма(_Сумма) Когда (_Сумма>0); Функция СуммаВозврат=Сумма(_Сумма) Когда (_Сумма<0); Условие(_Налоговый=Перечисление.Булево.Да); |
|||
3
Anempadest
27.01.15
✎
05:23
|
Что характерно?
Если делать запрос по кварталам, то картина аналогичная. Запрос делает переборку только по первому значению группировки, а по нижестоящим выводит одной строкой последний месяц/последний день и общую сумму по первому значению группировки. |
|||
4
Anempadest
27.01.15
✎
05:45
|
Нашёл.
Пишут, что группировки по периодам ВМЕСТЕ не дружат. В запросе должна быть только одна группировка по периоду. Или Год, или Квартал, или Месяц, или День. Вместе нельзя. Это правда? |
|||
5
VladZ
27.01.15
✎
05:50
|
Что-то не помню таких проблем.
|
|||
6
Anempadest
27.01.15
✎
05:53
|
||||
7
Anempadest
27.01.15
✎
05:55
|
Ладно, буду распечатывать отчёты за каждый месяц с детализацией по дням :)
|
|||
8
VladZ
27.01.15
✎
06:07
|
Варианты решения:
1. Закинуть результат запроса в таблицу значений. Добавить нужную инфу. Привести ТЗ к нужному виду. 2. На этапе вывода получать необходимую инфу. |
|||
9
Anempadest
27.01.15
✎
06:17
|
Закинуть результат в ТЗ и привести к нужному виду - это интересно. Спасибо.
|
|||
10
Anempadest
27.01.15
✎
16:39
|
Однако получился совсем не простой отчёт.
М=СоздатьОбъект("ТаблицаЗначений"); М.НоваяКолонка("Год","Число",4,0); М.НоваяКолонка("Продажа","Число",20,2); М.НоваяКолонка("Возврат","Число",20,2); М.НоваяКолонка("Сумма","Число",20,2); М.НоваяКолонка("Кварталы","ТаблицаЗначений"); //дни Пока Запрос.Группировка()=1 Цикл //год ТекГод=ДатаГод(Запрос.День); НомерСтр=0; Если М.НайтиЗначение(ТекГод,НомерСтр,"Год")=0 Тогда М.НоваяСтрока(); М.Год=ТекГод; М.Кварталы=СоздатьОбъект("ТаблицаЗначений"); М.Кварталы.НоваяКолонка("Квартал","Число",1,0); М.Кварталы.НоваяКолонка("Продажа","Число",20,2); М.Кварталы.НоваяКолонка("Возврат","Число",20,2); М.Кварталы.НоваяКолонка("Сумма","Число",20,2); М.Кварталы.НоваяКолонка("Месяцы","ТаблицаЗначений"); Иначе М.ТекущаяСтрока(НомерСтр); КонецЕсли; //квартал ТекКвартал=гДатаКвартал(Запрос.День); НомерСтр=0; Если М.Кварталы.НайтиЗначение(ТекКвартал,НомерСтр,"Квартал")=0 Тогда М.Кварталы.НоваяСтрока(); М.Кварталы.Квартал=ТекКвартал; М.Кварталы.Месяцы=СоздатьОбъект("ТаблицаЗначений"); М.Кварталы.Месяцы.НоваяКолонка("Месяц","Число",2,0); М.Кварталы.Месяцы.НоваяКолонка("Продажа","Число",20,2); М.Кварталы.Месяцы.НоваяКолонка("Возврат","Число",20,2); М.Кварталы.Месяцы.НоваяКолонка("Сумма","Число",20,2); М.Кварталы.Месяцы.НоваяКолонка("Дни","ТаблицаЗначений"); Иначе М.Кварталы.ТекущаяСтрока(НомерСтр); КонецЕсли; //месяц ТекМесяц=ДатаМесяц(Запрос.День); НомерСтр=0; Если М.Кварталы.Месяцы.НайтиЗначение(ТекМесяц,НомерСтр,"Месяц")=0 Тогда М.Кварталы.Месяцы.НоваяСтрока(); М.Кварталы.Месяцы.Месяц=ТекМесяц; М.Кварталы.Месяцы.Дни=СоздатьОбъект("ТаблицаЗначений"); М.Кварталы.Месяцы.Дни.НоваяКолонка("День","Дата"); М.Кварталы.Месяцы.Дни.НоваяКолонка("Продажа","Число",20,2); М.Кварталы.Месяцы.Дни.НоваяКолонка("Возврат","Число",20,2); М.Кварталы.Месяцы.Дни.НоваяКолонка("Сумма","Число",20,2); М.Кварталы.Месяцы.Дни.НоваяКолонка("Документы","ТаблицаЗначений"); Иначе М.Кварталы.Месяцы.ТекущаяСтрока(НомерСтр); КонецЕсли; //день ТекДень=Запрос.День; НомерСтр=0; Если М.Кварталы.Месяцы.Дни.НайтиЗначение(ТекДень,НомерСтр,"День")=0 Тогда М.Кварталы.Месяцы.Дни.НоваяСтрока(); М.Кварталы.Месяцы.Дни.День=ТекДень; М.Кварталы.Месяцы.Дни.Документы=СоздатьОбъект("ТаблицаЗначений"); М.Кварталы.Месяцы.Дни.Документы.НоваяКолонка("Документ","Документ"); М.Кварталы.Месяцы.Дни.Документы.НоваяКолонка("Продажа","Число",20,2); М.Кварталы.Месяцы.Дни.Документы.НоваяКолонка("Возврат","Число",20,2); М.Кварталы.Месяцы.Дни.Документы.НоваяКолонка("Сумма","Число",20,2); Иначе М.Кварталы.Месяцы.Дни.ТекущаяСтрока(НомерСтр); КонецЕсли; //документ М.Кварталы.Месяцы.Дни.Документы.НоваяСтрока(); М.Кварталы.Месяцы.Дни.Документы.Документ=Запрос._Продажа; М.Кварталы.Месяцы.Дни.Документы.Продажа=Запрос.СуммаПродажа; М.Кварталы.Месяцы.Дни.Документы.Возврат=Запрос.СуммаВозврат; М.Кварталы.Месяцы.Дни.Документы.Сумма=Запрос.Сумма; //день М.Кварталы.Месяцы.Дни.Продажа=М.Кварталы.Месяцы.Дни.Продажа+Запрос.СуммаПродажа; М.Кварталы.Месяцы.Дни.Возврат=М.Кварталы.Месяцы.Дни.Возврат+Запрос.СуммаВозврат; М.Кварталы.Месяцы.Дни.Сумма=М.Кварталы.Месяцы.Дни.Сумма+Запрос.Сумма; //месяцы М.Кварталы.Месяцы.Продажа=М.Кварталы.Месяцы.Продажа+Запрос.СуммаПродажа; М.Кварталы.Месяцы.Возврат=М.Кварталы.Месяцы.Возврат+Запрос.СуммаВозврат; М.Кварталы.Месяцы.Сумма=М.Кварталы.Месяцы.Сумма+Запрос.Сумма; //кварталы М.Кварталы.Продажа=М.Кварталы.Продажа+Запрос.СуммаПродажа; М.Кварталы.Возврат=М.Кварталы.Возврат+Запрос.СуммаВозврат; М.Кварталы.Сумма=М.Кварталы.Сумма+Запрос.Сумма; //годы М.Продажа=М.Продажа+Запрос.СуммаПродажа; М.Возврат=М.Возврат+Запрос.СуммаВозврат; М.Сумма=М.Сумма+Запрос.Сумма; КонецЦикла; //вывод М.ВыбратьСтроки(); Пока М.ПолучитьСтроку()=1 Цикл ПерваяСтрока1=Т.ВысотаТаблицы(); М.Кварталы.ВыбратьСтроки(); Пока М.Кварталы.ПолучитьСтроку()=1 Цикл ПерваяСтрока2=Т.ВысотаТаблицы(); М.Кварталы.Месяцы.ВыбратьСтроки(); Пока М.Кварталы.Месяцы.ПолучитьСтроку()=1 Цикл ПерваяСтрока3=Т.ВысотаТаблицы(); М.Кварталы.Месяцы.Дни.ВыбратьСтроки(); Пока М.Кварталы.Месяцы.Дни.ПолучитьСтроку()=1 Цикл ПерваяСтрока4=Т.ВысотаТаблицы(); М.Кварталы.Месяцы.Дни.Документы.ВыбратьСтроки(); Пока М.Кварталы.Месяцы.Дни.Документы.ПолучитьСтроку()=1 Цикл тГод=М.Год; тКвартал=Формат(М.Кварталы.Квартал,"Ч(0)2")+"-"+М.Год; тМесяц=Формат(Дата(М.Год,М.Кварталы.Месяцы.Месяц,1),"Д ММММГГГГ"); тДень=М.Кварталы.Месяцы.Дни.День; тДокумент=М.Кварталы.Месяцы.Дни.Документы.Документ; тПродажа=М.Кварталы.Месяцы.Дни.Документы.Продажа; тВозврат=М.Кварталы.Месяцы.Дни.Документы.Возврат; тСумма=М.Кварталы.Месяцы.Дни.Документы.Сумма; Т.ВывестиСекцию("Строка"); КонецЦикла; тПродажа=М.Кварталы.Месяцы.Дни.Продажа; тВозврат=М.Кварталы.Месяцы.Дни.Возврат; тСумма=М.Кварталы.Месяцы.Дни.Сумма; Т.ВывестиСекцию("День"); Т.Область(ПерваяСтрока4+1,4,Т.ВысотаТаблицы(),4).Объединить(); КонецЦикла; тПродажа=М.Кварталы.Месяцы.Продажа; тВозврат=М.Кварталы.Месяцы.Возврат; тСумма=М.Кварталы.Месяцы.Сумма; Т.ВывестиСекцию("Месяц"); Т.Область(ПерваяСтрока3+1,3,Т.ВысотаТаблицы(),3).Объединить(); КонецЦикла; тПродажа=М.Кварталы.Продажа; тВозврат=М.Кварталы.Возврат; тСумма=М.Кварталы.Сумма; Т.ВывестиСекцию("Квартал"); Т.Область(ПерваяСтрока2+1,2,Т.ВысотаТаблицы(),2).Объединить(); КонецЦикла; тПродажа=М.Продажа; тВозврат=М.Возврат; тСумма=М.Сумма; Т.ВывестиСекцию("Год"); Т.Область(ПерваяСтрока1+1,1,Т.ВысотаТаблицы(),1).Объединить(); КонецЦикла; тПродажа=М.Итог("Продажа"); тВозврат=М.Итог("Возврат"); тСумма=М.Итог("Сумма"); Т.ВывестиСекцию("Итог"); |
|||
11
Ёпрст
27.01.15
✎
17:01
|
Пищи прямой запрос и там какая угодно группировка и группировки.. хоть кубики делай
|
|||
12
Anempadest
27.01.15
✎
17:06
|
(11) Прямой запрос к регистру? Можно. Но теперь, когда используется ТЗ, как хранилище, уже без разницы откуда брать данные - через запрос или через прямое обращение к регистру.
|
|||
13
Ёпрст
27.01.15
✎
17:07
|
(12) На большом периоде..твоя ТЗ загнётся
|
|||
14
Ёпрст
27.01.15
✎
17:07
|
а так - сразу будешь иметь всё, из-запроса.
|
|||
15
Anempadest
27.01.15
✎
17:14
|
(14) Не понял. Я ведь и делаю запрос. Выбираю все подряд документы из регистра. А потом эти документы запихиваю в ТЗ с группировкой по Год, Квартал, Месяц, День.
Как по-другому получить такие группировки? |
|||
16
Ёпрст
27.01.15
✎
17:27
|
(15) в прямом запросе, сразу
|
|||
17
Anempadest
27.01.15
✎
17:39
|
(16) Это невозможно. 1С не способна сделать запрос, в котором одновременно будут использоваться предопределённые группировки Год, Квартал, Месяц и День. Что-то одно.
Городил бы я огород? :) |
|||
18
Ёпрст
27.01.15
✎
17:43
|
(17) читай по-губам: прямой запрос.
Это не черный, из(0), это прямой |
|||
19
Ёпрст
27.01.15
✎
17:44
|
т.е прямое обращение к таблицам ИБ
|
|||
20
Anempadest
27.01.15
✎
18:07
|
(18) Прошу прощения, если не знаю, что такое "Прямой запрос".
Прямой запрос к таблицам ИБ пишется на Встроенном языке 1С? |
|||
21
Ёпрст
27.01.15
✎
18:19
|
(20) в основном, на t-sql
|
|||
22
Ёпрст
27.01.15
✎
18:19
|
||||
23
Anempadest
27.01.15
✎
18:30
|
(22) Понятно. Благодарю.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |