(Notes) Notes (2008 год)

Избавляемся от Microsoft Reporting Services

Microsoft сам признает глюкавость своих идей. Наибольшую известность получают провалы широко известных продуктов, типа Vista, которую народ в массовом порядке сносит со своих кампов. Но есть много менее известных продуктов, которые потерпели настоящий крах. Я лично присутсвовал на одной из ежегодных конференций Микрасофта, когда микрасофтовец обратился в зал с экспресс-вопросом "Кто из вас использует BizTalk-сервер?" Из примерно 500 человек - поднялась ОДНА рука. А ведь в зале были специально отобранные, заведомо положительно ангажированные к микрософтовским продукам люди! "Ну тогда мы этот доклад пропустим и перейдем к более актуальным докладам" - подвел итог экспресс-опросу микрасофтовец.

Еще более сырые и глюкавые примочки микрасофт стал пихать в пакет SQL-Сервера. Пример такого тупого и глюкавого продукта - Notification Server. Как и по BizTalk'у на полках любого магазина вы найдете множество толстющих книг по этим продуктам. Множество народу сдало экзамены по курсу 070-431 и смежным номерам по MS SQL Server 2005, где огромный раздел посвящен Notification Services (как часть пакета SQL2005). Однако, на практике я (и начальство) активно искало ХОТЯ БЫ ОДНОГО человека в России, кому удалось бы настроить Notification Service. В результате поиски замкнулись всего на одного микрософтовца, который утверждал, что у него это когда-то один раз получилось - но сейчас (у нас) это он повторить уже не может.

Наконец-то, в течении двух-трех лет, даже до тупоголового микрасофта дошло что этого продукта просто не существует в работоспособном виде. И, чтобы дальше не позорится, пакет SQL2008 вышел уже БЕЗ несуществующего в природе сервера SQL-нотификации.

К чему такое длинное введение? К тому, что в пакете микрасофтовском пакете SQL 2005-2008 куча самого настоящего гавнасофта, к которому я отношу и Reporting Services. Либо он будет доведен до какого-то работоспособного состояния - либо его постигнет участь Notification-сервера, Biztalk-сервера и прочего гавнасофта.


Поэтому на каждом предприятии, которое повелось на рекламу микрасофта, возникает один и тот же вопрос - как избавится от этого гавнасофта? Ниже вы видите те самые несколько волшебных строчек, которые навсегда позволят забыть что такое Reporting Services. Этот простейший скрипт служит основой для множества разнообразных Excel-отчетов. Для работы скрипта не забудьте поставить ссылку на библиотеку ADO.

   0001:  Sub Кнопка1_Щелкнуть()
   0002:      Dim conn As New ADODB.Connection
   0003:      conn.ConnectionString = "Data Source=10.10.10.200;Initial Catalog=MoscowDom;User ID=MoscowDown;Password=123456"
   0004:      conn.Provider = "SQLOLEDB"
   0005:      conn.CommandTimeout = 100000
   0006:      conn.Open
   0007:      Dim rst As New ADODB.Recordset
   0008:      rst.ActiveConnection = conn
   0009:      rst.Open "select I,Catalog,Rating,URL,Comment from dbo.Sites with (Nolock) where not (Page is null) and Page like '%__VIEWSTATE%' order by Catalog,Rating desc", conn
   0010:      ActiveWorkbook.ActiveSheet.Range("B2").CopyFromRecordset rst
   0011:      rst.Close
   0012:      conn.Close
   0013:  End Sub

Приведенный выше код является самым простым вариантом выгрузки данных из SQL в отчет. Если вам требуется специальное форматирование ячеек или дополнительное фильтрование данных по динамическим условиям, то строку 10 выше придется заменить на вот такие строки, которые сделают ровно то же самое.


   0010:A      Dim I As Integer
   0010:B      While Not rst.EOF
   0010:C          I = I + 1
   0010:D          Set X = ActiveWorkbook.ActiveSheet
   0010:E          X.Cells(I, 2) = rst(0)
   0010:F          X.Cells(I, 3) = rst(1)
   0010:G          X.Cells(I, 4) = rst(2)
   0010:H          X.Cells(I, 5) = rst(3)
   0010:I          X.Cells(I, 6) = rst(4)
   0010:J          rst.MoveNext
   0010:K      Wend

На скрине ниже вы видите результат работы скрипта





Надеюсь, прочитав эту страничку - вы сможете навсегда избавится от очередного провального микрософтовского проекта Report-сервера, заменив его на несколько строк Excel-автоматизации на Visual Basic for application. Думаю, это подойдет для 90% обычных пользователей.

Если же вы хотите использовать отчеты из SQL-сервера не для себя локально, а именно выкладывать свои базы данных в интернет для широкой публики с возможностями форматирования и фильтрации интернет-публикой, то я бы порекомендовал использовать вместо Reporting Services Crystal Reports. Как использовать продукты Crystal в Web-проектах на ASP.NET - я описал на своем сайте. Конечно, сам Crystal предлагает и автономные построители отчетов - безо всяких ASP.NET.

Разумеется, в вашем распоряжении всегда есть и стандартные технологии предоставления отчетов в Web (пейджингом, без форматирования для печати) - так как их предоставляют, например, Яндекс или Mail. Дауны из микрасофта в очередной раз поразили всех своей глупостью, включив в пакет ASP.NET 3.5 совершенно убогий пейджер. Который к тому же еще и возможно применить только с не менее убогим ListView. Как сделать нормальный пейджер на ASP.NET - прототип вы можете посмотреть у меня на сайте. Ну а как он выглядит в реале (после применения к нему стилей) - вы можете посмотреть например на моем сайте www.votpusk.ru.

Еще более разумная, на мой взгляд, альтернатива MS Reporting Services и Crystal Reports - это отдавать отчет интернет-потребителям сразу Excel-формате. Это самый гибкий и компактный вариант, не идущий ни в какое сравнение с убогим и глючным Microsoft Reporting Services. Разумеется речь идет о динамически формируемом по запросу Excel-файле, а не просто о прайс-листе, который обновляется раз в месяц. Как динамически сформировать такой Excel-отчет по запросу пользователя в сайтах на ASP.NET - я описал на своем сайте.

Еще о программировании на VBA и VBSCRIPT вы пожете почитать здесь Скрипты WSH, здесь - VBA - язык автоматизации Excel, здесь - Сценарии ADSI, здесь - OpenSource библиотека ADSI-функций Томаса Еска на VB.NET и здесь - Управление ресурсами компьютера с помощью Windows WMI.



Comments ( )
Link to this page: //www.vb-net.com/Excel/Report.htm
< THANKS ME>