Гость
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / SSRS. программный запуск отчёта / 9 сообщений из 9, страница 1 из 1
10.07.2019, 10:38
    #39835837
NewIvanovec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS. программный запуск отчёта
SSRS.
мне нужно сделать 15 выгрузок отчёта в excel.
другими словами - нужно запустить 15 раз отчёт с разными параметрами.
можно ли как-то запустить отчёт не через интерфейс, а как-то программно.
...
Рейтинг: 0 / 0
10.07.2019, 11:42
    #39835877
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS. программный запуск отчёта
NewIvanovec,

если у тебя хватит желания разбираться :)

Делал как-то ХП которая создавала временную подписку на отчет в заданном формате, а, затем, после отправки на заданный(е) е-мэйл(ы), удаляла эту подписку
... в принципе, работало :)

Вот тебе нужно будет её просто вызвать 15 раз с нужными параметрами и получить на почту файл
Там можно настроить и просто сохранение файла на диск, без отправки на почту (я пока её тестировал так и делал), но уже не особо помню что это был за параметр ...

Параметры для отчета задаются в параметре ХП @RSParameters в виде xml-строки, вида
Код: xml
1.
<ParameterValues><ParameterValue><Name>BD</Name><Value>01.11.2016</Value></ParameterValue><ParameterValue><Name>ED</Name><Value>30.11.2016</Value></ParameterValue></ParameterValues> 



Код: sql
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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
-- =============================================
--	Author:			
--	Create date:	
--	Description:	Відправка по E-mail RS-звіту (Reporting Service) @RSReportName
--	Alter date:		
-- =============================================
create PROCEDURE [dbo].[spSendMailRSReport] 

		 @RSReportName				nvarchar(425)							--	Назва RS-звіту

		,@Mail_body					nvarchar(max)=null						--	"Тело" листа в форматі HTML 
		,@Mail_subject 				nvarchar(255)=null						--	Тема листа 
		,@Mail_importance			nvarchar(6)='Normal'					--	"Важливість" листа. 
		,@RenderFormat				nvarchar(100)=N'EXCELOPENXML'			--	Формат, в якому буде відправлено звіт
		,@RSParameters				nvarchar(max)=N'<ParameterValues />'	--	xml-строка значений параметров для отчета, вида <ParameterValues><ParameterValue><Name>BD</Name><Value>01.11.2016</Value></ParameterValue><ParameterValue><Name>ED</Name><Value>30.11.2016</Value></ParameterValue></ParameterValues>
		,@TO						nvarchar(max)='billy@microsoft.com'		--	Список адрес (через ";") на які буде відіслано звіт (адресат) 
		,@CC						nvarchar(max)=null						--	Список адрес (через ";") на які буде відіслано звіт (копія) 
		,@BCC						nvarchar(max)=null						--	Список адрес (через ";") на які буде відіслано звіт (скрита копія) 
AS
begin
	set nocount on
	--
	declare 
		 @SubscriptionID		uniqueidentifier	--	ID "подписки" на звіт (Subscription)
		,@ReportID				uniqueidentifier
		,@ReportPath			nvarchar(425)
		,@ScheduleID			uniqueidentifier	
		,@D						datetime=getdate()
		,@User					nvarchar(260)=N'NT AUTHORITY\SYSTEM' 
		,@UserSID				varbinary(85)

	declare @ExtensionSettings	nvarchar(max)
		
	declare @ES table (id int identity, Name nvarchar(100), Value nvarchar(max))
	
	--
	if @Mail_subject is null set @Mail_subject = @RSReportName;

	--	Параметри "підписки"
	insert into @ES (Name, Value) values ('TO', @TO)
	insert into @ES (Name, Value) values ('CC', @CC)
	insert into @ES (Name, Value) values ('BCC', @BCC)

	insert into @ES (Name, Value) values ('IncludeReport', 'True')
	insert into @ES (Name, Value) values ('RenderFormat', @RenderFormat)
	insert into @ES (Name, Value) values ('Subject', @Mail_subject)
	insert into @ES (Name, Value) values ('Comment', @Mail_body	)
	insert into @ES (Name, Value) values ('IncludeLink', 'False')

	insert into @ES (Name, Value) values ('Priority', @Mail_importance)

	--	xml-параметр ExtensionSettings "підписки"
	set @ExtensionSettings = cast(
				(select 
					Name 
					,Value

				from	@ES
				where	nullif(Value,'') is not null
				order by id 
	 
				for xml path('ParameterValue'), root('ParameterValues') )
			as nvarchar(max))

	--	Запис в "підписку"
	set @SubscriptionID=newid() 
	set @ScheduleID=newid() 

	begin try
		execute as login='sa'

			select @ReportID=c.ItemID, @ReportPath=c.Path from [ReportServer].dbo.[Catalog] c where c.Name = @RSReportName and c.[Type] in (2,4,8)

			select top 1 @UserSID=[Sid] from [ReportServer].dbo.[Users] c where c.UserName=@User 
	
			--	Создание "подписки". В ней сохраняются все параметры, по которым будет формироваться/отправляться отчет
			exec [ReportServer].[dbo].[CreateSubscription]      
						@id						=@SubscriptionID
						,@Locale				=N'uk-UA'
						,@Report_Name			=@ReportPath
						,@ReportZone			=0
						,@OwnerSid				=@UserSID 
						,@OwnerName				=@User
						,@OwnerAuthType			=1
						,@DeliveryExtension		=N'Report Server Email'
						,@InactiveFlags			=0
						,@ExtensionSettings		=@ExtensionSettings
						,@ModifiedBySid			=@UserSID
						,@ModifiedByName		=@User
						,@ModifiedByAuthType	=1 
						,@ModifiedDate			=@D 
						,@Description			=N'Temporary Subscription'
						,@LastStatus			='' 
						,@EventType				=N'TimedSubscription'
						,@Parameters			=@RSParameters					--N'<ParameterValues />'
						,@Version				=3


			--	
			exec [ReportServer].[dbo].[CreateTimeBasedSubscriptionNotification] 
						@SubscriptionID			=@SubscriptionID
						,@LastRunTime			=@D
						,@LastStatus			=N'New Subscription'


			--
			exec [ReportServer].dbo.AddEvent @EventType='TimedSubscription',  @EventData=@SubscriptionID

			--	Ожидание выполнения выгрузки/отправки отчета
			while exists(select 1 from [ReportServer].[dbo].[Event] where [EventData]=@SubscriptionID)
				WAITFOR DELAY '00:00:08';
			--	 

			--	Удаление "подписки"
			exec [ReportServer].[dbo].AddSubscriptionToBeingDeleted @SubscriptionID
			exec [ReportServer].[dbo].DeleteSubscription @SubscriptionID

		revert
	end try

	begin catch
		select 
			ERROR_NUMBER() AS ErrorNumber
			,ERROR_SEVERITY() AS ErrorSeverity
			,ERROR_STATE() AS ErrorState
			,ERROR_PROCEDURE() AS ErrorProcedure
			,ERROR_LINE() AS ErrorLine
			,ERROR_MESSAGE() AS ErrorMessage;
		--	
		return ERROR_NUMBER()			
	end catch

	--
	return 0 
end

...
Рейтинг: 0 / 0
10.07.2019, 20:59
    #39836100
NewIvanovec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS. программный запуск отчёта
court,

Спасибо большое. Чего только человек не придумывает :) класс
...
Рейтинг: 0 / 0
25.07.2019, 11:06
    #39841273
tashkafox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS. программный запуск отчёта
NewIvanovec,
или создать управляемую данными подписку (data-driven). В запросе к подписке нужно создать набор данных со всеми вариантами параметров.
Подписка сработает один раз, но отправит отчет столько раз, сколько строк в наборе данных (если конечно не будет строк, вызывающих ошибку при формировании отчета).
...
Рейтинг: 0 / 0
25.07.2019, 11:27
    #39841290
dvim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS. программный запуск отчёта
tashkafox, управляемую данными подписку
Только оно не работает на SQL Standart
Пришлось делать свою реализацию, как раз через запуск отчета по http

http://reports.***.**.ru/ReportServer/Pages/ReportViewer.aspx
Далее можно просто в url строке передать значения параметра и тип получаемого отчета.
Например, сразу получить xls Или pdf
Вот статья статья

Еще одна ссылка ссылка
...
Рейтинг: 0 / 0
25.07.2019, 11:28
    #39841291
dvim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS. программный запуск отчёта
У нас написано немало кода для получения и рассылки отчетов подобным образом.
Уже несколько лет полет нормальный
...
Рейтинг: 0 / 0
26.07.2019, 14:34
    #39841932
Santa89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS. программный запуск отчёта
Ничего сложно в этом нет. Создайте подписку с вашими параметрами - и запускайте SQL джоб этой подписки по расписанию
...
Рейтинг: 0 / 0
29.07.2019, 12:51
    #39842505
holod-iinna
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS. программный запуск отчёта
NewIvanovec,

А не проще сделать отчет, который бьется на несколько внутри и вызвать его за период?
Или задача такого не подразумевает?

А так да, подписку оформить
...
Рейтинг: 0 / 0
29.07.2019, 12:53
    #39842508
holod-iinna
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSRS. программный запуск отчёта
NewIvanovec,

Кстати, в голове еще родился вариант решения в лоб...
Нагерерить ссылок на экспорт в Excel и туда передавать требуемые параметры.
...
Рейтинг: 0 / 0
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / SSRS. программный запуск отчёта / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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