powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Как создать такой отчет в Crystal Reports? Куб-не куб, объединение 2-ух subtotals.
6 сообщений из 6, страница 1 из 1
Как создать такой отчет в Crystal Reports? Куб-не куб, объединение 2-ух subtotals.
    #37001103
ru_efim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из БД на MS SQL, получаю набор данных
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 |Место		|Производитель		|Тип работ	|Объем(шт.)	|Объем(п.м.) 	| 
 _______________________________________________________________________________________
|Карьер 1	|производитель А	|тип работ 1	|10		|100		|
|Карьер 1	|производитель А	|тип работ2	|10		|50		|
|Карьер 1	|производитель В	|тип работ 1	|5		|100		|
|Карьер 2	|производитель А	|тип работ 1	|5		|50		|
|Карьер 2	|производитель В	|тип работ2	|10		|100		|
|Карьер 3	|производитель А	|тип работ 1	|10		|50		|
|Карьер 3	|производитель А	|тип работ 2	|10		|50		|
|Карьер 3	|производитель В	|тип работ 1	|20		|100		|
|Карьер 3	|производитель В	|тип работ 2	|20		|100		|

Надо получить в Crystal Reports 10 вот такой отчет:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 Место		Производитель		Тип работ	Объем(шт.)	Объем(п.м.) 
Карьер 1	производитель работ А	тип работ 1	10		100
Карьер 1	производитель работ А	тип работ2	10		50
		 Итого Производитель работ А		20		150 
Карьер 1	производитель работ В	тип работ 1	5		100
		 Итого Производитель работ В		5		100 
 Итого Карьер 1						25		250 
Карьер 2	производитель работ А	тип работ 1	5		50
		 Итого Производитель работ А		5		50 
Карьер 2	производитель работ В	тип работ2	10		100
		 Итого Производитель работ В		10		100 
 Итого Карьер 2						15		150 
Карьер 3	производитель работ А	тип работ 1	10		50
Карьер 3	производитель работ А	тип работ 2	10		50
		 Итого Производитель работ А		20		100 
Карьер 3	производитель работ В	тип работ 1	20		100
Карьер 3	производитель работ В	тип работ 2	20		100
		 Итого Производитель работ В		40		200 
 Итого Карьер 3						60		300 
 Всего							100		700 
		 В том числе производитель работ А	45		300 
		 В том числе производитель работ В	55		400 
, т.е. имеем кроме секции Details группу по Производителю работ, с подсчетом сумм по объемам в Group Footer, вложенную в группу по Месту проведения работ, так же с подсчетом сумм по объемам. Ну и наконец, общий итог с суммой по объемам в секции Report Footer.
Вся проблема в строках ниже общих итогов, в тех которые представляют общие суммарные объемы по строкам сгруппированным по Производителю работ. ( две последние, выделены курсивом ) Кол-во мест проведения работ, производителей, типов работ величины переменные.
Сам смог додуматься только до следующего
1. Сформировать sql-запросом нужный, в конце концов, набор строк т.е. со всеми агрегатными строками, а средствами Crystal Reports его просто отформатировать. Но по моему это какая то кривая идея.
2. Наверное можно было бы добавить строки с общими итогами по Производителю работ(те последние, выделены курсивом) с помощью Subrepert. Но данный отчет уже сам Subrepot.
3. Общие итоговые объемы по Производителям вычислить в Crystal Reports с помощью формул. В принципе это возможно т.к. на данный момент Производителей всего два. Но это то-же плохая идея т.к. через месяц их может стать три, через 3 месяца четыре и т.д.
Выручите, подскажите пожалуйста, хотя бы в каком направлении думать.
...
Рейтинг: 0 / 0
Как создать такой отчет в Crystal Reports? Куб-не куб, объединение 2-ух subtotals.
    #37001983
SQLPowerUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ru_efim,
1. Сформировать sql-запросом нужный, в конце концов, набор строк т.е. со всеми агрегатными строками, а средствами Crystal Reports его просто отформатировать. Но по моему это какая то кривая идея.Почему кривая? Можно одним select`ом
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
set nocount on

declare @t table (mesto varchar( 500 ), pro varchar( 500 ), tip varchar( 100 ), volume1 int, volume2 int)
insert @t
 select 'Карьер 1',	'производитель работ A', 'тип работ 1',	 10 ,  100  union all
 select 'Карьер 1',	'производитель работ A', 'тип работ 2',	 10 ,  50  union all
 select 'Карьер 1',	'производитель работ B', 'тип работ 1',	 5 ,   100  union all

 select 'Карьер 2',	'производитель работ A', 'тип работ 1',	 5 ,   50  union all
 select 'Карьер 2',	'производитель работ B', 'тип работ 2',	 10 ,  100  union all
 
 select 'Карьер 3',	'производитель работ A', 'тип работ 1',	 10 ,   50  union all
 select 'Карьер 3',	'производитель работ A', 'тип работ 2',	 10 ,   50  union all
 select 'Карьер 3',	'производитель работ B', 'тип работ 1',	 20 ,  100  union all
 select 'Карьер 3',	'производитель работ B', 'тип работ 2',	 20 ,  100 


select case when grouping(mesto)= 1  and grouping(pro)= 1  then 'Всего' when grouping(pro)= 1  then 'Итого ' + mesto 
when grouping(tip)= 1  then '' else mesto end [Место],
case when grouping(pro)= 1  and grouping(tip)= 1  then '' when grouping(mesto)= 1  then 'В том числе ' + pro when grouping(tip)= 1  then ('Итого ' + pro)
else pro end [Производитель],
isnull(tip, '') [Тип работ], 
sum(volume1) [Объем (шт.)],
sum(volume2) [Объем (п.м.)]
--, grouping(mesto) gr_mesto, grouping(pro) gr_pro, grouping(tip) gr_tip  /* Можно раскомментировать */
from @t
group by  mesto, pro, tip
with cube
having ((grouping(mesto) =  0 )
or (grouping(mesto)= 1  and grouping(pro)= 1  and grouping(tip)= 1 )
or (grouping(mesto)= 1  and grouping(pro) =  0  and grouping(tip)= 1 ))
and not (grouping(mesto) =  0  and grouping(pro)= 1  and grouping(tip) =  0 )

Результат:
МестоПроизводительТип работОбъем (шт.)Объем (п.м.)Карьер 1производитель работ Aтип работ 110100Карьер 1производитель работ Aтип работ 21050Итого производитель работ A20150Карьер 1производитель работ Bтип работ 15100Итого производитель работ B5100Итого Карьер 125250Карьер 2производитель работ Aтип работ 1550Итого производитель работ A550Карьер 2производитель работ Bтип работ 210100Итого производитель работ B10100Итого Карьер 215150Карьер 3производитель работ Aтип работ 11050Карьер 3производитель работ Aтип работ 21050Итого производитель работ A20100Карьер 3производитель работ Bтип работ 120100Карьер 3производитель работ Bтип работ 220100Итого производитель работ B40200Итого Карьер 360300Всего100700В том числе производитель работ A45300В том числе производитель работ B55400

З.Ы. select можно и упростить (там где куча case when ) в зависимости от того, как будет отображать Crystal на экране
...
Рейтинг: 0 / 0
Как создать такой отчет в Crystal Reports? Куб-не куб, объединение 2-ух subtotals.
    #37002438
ustass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не стоит делать изврат там где можно решить вопрос средствами отчетной системы. У Автора топика была, вполне, здравая идея, одно уточнение нужно не два подотчета а один, реализующий альтернативную группировку с те ми же параметрами, что и у основного отчета. И подсоединить подотчет по входящим параметрам основного отчета. Единственный минус этого решения - одинаковый запрос будет выполняться два раза.
...
Рейтинг: 0 / 0
Как создать такой отчет в Crystal Reports? Куб-не куб, объединение 2-ух subtotals.
    #37002845
MarusyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ustass, имхо, делать сабрепорт далеко не лучшее решение. Если данных много и запрос выполняется хотя бы 3-5 сек, то увеличение времени формирования отчета в два раза будет очень заметным.
ru_efim, итоги можно сделать при помощи формул и не завязываясь на количество производителей работ. С помощью использования массивов, например. Сделать это чуточку сложнее, чем добавить еще один сабрепорт, зато работать будет быстро.
...
Рейтинг: 0 / 0
Как создать такой отчет в Crystal Reports? Куб-не куб, объединение 2-ух subtotals.
    #37006300
ustass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MarusyaD,
Формулы можно использовать только в том случае если количество значений "производитель работ" конечно и не поменяется в дальнейшем. Или вы предлагаете накапливать все уникальные значения в строке через разделители и парсить ее для каждой строки датасета .
Кроме того запрос в сабрепорте можно изменить оставив только необходимые поля для подотчета("производитель работ" и две суммы) и фильтры, аналогичные основному запросу.В этом случае скорость работы приблизится к скорости выполнения запроса, предложенного SQLPowerUser , а процесс создания и дальнейшей поддержки будет гораздо легче.
...
Рейтинг: 0 / 0
Как создать такой отчет в Crystal Reports? Куб-не куб, объединение 2-ух subtotals.
    #37320539
CrazHunt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что мешает это сделать двойной группировкой?
Первая по полю "Место", вторая по "Производитель".
Таким образом получится "вложенная группировка", а ИТОГО можно запихнуть в групфутер
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Как создать такой отчет в Crystal Reports? Куб-не куб, объединение 2-ух subtotals.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]