powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / SSRS. программный запуск отчёта
9 сообщений из 9, страница 1 из 1
SSRS. программный запуск отчёта
    #39835837
NewIvanovec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SSRS.
мне нужно сделать 15 выгрузок отчёта в excel.
другими словами - нужно запустить 15 раз отчёт с разными параметрами.
можно ли как-то запустить отчёт не через интерфейс, а как-то программно.
...
Рейтинг: 0 / 0
SSRS. программный запуск отчёта
    #39835877
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
SSRS. программный запуск отчёта
    #39836100
NewIvanovec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court,

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

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

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

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

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

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


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