(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Динамическая персонализированная рассылка отчетности средствами Crystal Reports

Источник: habrahabr
mongohtotech

Этот пост для тех, кто столкнулся с задачей динамической персонализированной рассылки отчетов или каких либо аналитических материалов.

Допустим, в вашей компании есть сеть филиалов и вам необходимо наладить еженедельную рассылку отчетов с результатами работы руководителям филиалов. Отчет должен содержать результаты деятельности филиала за прошедшую неделю - таблицы, графики, аналитическую информацию. Соответственно для каждого филиала информация в отчете уникальная.

Расскажу, как это можно сделать быстро и просто.
Для решения задачи нам необходимы Crystal Reports 2008 и Visual Studio 2010 (можно использовать и более ранние версии продуктов).
Для автоматизации рассылки отчетов необходимо, что бы вся аналитическая информация для составления отчетов содержалась в базах данных. В итоге хорошо перед рассылкой отчетов получить данные по каждому филиалу в одном или нескольких запросов к базе.
Пример результата запроса:

Используя Crystal Reports мы можем сформировать отчет, содержащий данные о продажах, расходах и других показателях по отдельному филиалу. В качестве источника данных в отчете используем результаты данного запроса, а в Record Selection Formula используем фильтр по одному филиалу. Например, номер филиала равен 1: {data.branch} = 1

Поскольку Crystal Reports достаточно гибкий инструмент, используя такие его инструменты как формулы и cуботчеты можно сформировать любой формат документа: от простого одностраничного отчета до объемного аналитического исследования с таблицами и графиками.

Далее меняя Record Selection Formula мы можем выводить в отчете информацию по любому филиалу.
Все что нам нужно сделать дальше, это выполнить экспорт отчета в один из форматов (pdf, xls, rtf) и отправить его по электронной почте.

Рассмотрим каким образом это можно автоматизировать

В первую очередь нам потребуется таблица, содержащая номера филиалов и электронную почту получателя отчета. Нам необходимо реализовать цикл по строчкам этой таблицы. Далее для каждой строки мы берем номер филиала и подставляем его в Record Selection Formula нашего отчета. Далее экспортируем отчет в pdf файл и присоединяем этот файл к письму. Письмо отправляем на соответствующий адрес.

Crystal Reports предоставляет не только среду для разработки отчетности но и компоненты для разработки для платформы NET.
Ниже пример кода на Visual Basic:

Imports System.Net.Mail Imports System.IO Imports System.Net.NetworkCredential Imports CrystalDecisions Module Module1 Sub Main() 'Инициализируем необходимые переменные и источники данных Dim Rows1 As DataRow Dim Table1 As New myData.MailListDataSet.Query1DataTable Dim myDA As New myData.MailListDataSetTableAdapters.Query1TableAdapter Dim strDate = Format(CDate(Today()), "ddMMyyyy") Dim myBranch As Integer Dim myBranchMail As String Dim myAppPath As String Dim myLogFilePath As String Dim myLogStr As String myAppPath = My.Application.Info.DirectoryPath 'Создаем папку, которая будет содержать файлы отчетов Dim myDirInf As New DirectoryInfo(myAppPath + "\" + strDate) If Not myDirInf.Exists() Then myDirInf.Create() End If 'Создаем файл лога для отслеживания результатов формирования и отправки отчетов myLogFilePath = myAppPath + "\" + strDate + "\log.txt" Dim fs As StreamWriter = File.CreateText(myLogFilePath) 'Заполняем таблицу данных (номер филиала, почта получателя отчета) myDA.Fill(Table1) 'Инициализируем объект ReportDocument из нашего файла отчета Dim myReport As New CrystalDecisions.CrystalReports.Engine.ReportDocument myReport.FileName = myAppPath + "\report1.rpt" 'Цикл по филиалам For Each Rows1 In Table1.Rows 'Определяем номер филиала и почту myBranch = Rows1.Item(0) myBranchMail = Rows1.Item(1) 'Изменяем Record Selection Formula myReport.RecordSelectionFormula = "{data.branch} = " + CStr(myBranch) 'Обновляем отчет myReport.Refresh() Try 'Экспортируем отчет в pdf (для каждого филиала - файл с уникальными именем) myReport.ExportToDisk([Shared].ExportFormatType.PortableDocFormat, myAppPath + "\" + strDate + "\Report for Branch " + CStr(myBranch) + " " + strDate + ".pdf") 'Пишем в лог информацию об успешной операции myLogStr = CStr(Now()) + ": " + "generate file for Branch " + CStr(myBranch) + Chr(13) + Chr(10) Console.Write(myLogStr) fs.Write(myLogStr) Catch exp As Exception 'Пишем в лог информацию об ошибке Console.WriteLine("Erorr:" & exp.Message) myLogStr = CStr(Now()) + ": Erorr" & exp.Message & " when generate file for Branch " + CStr(myBranch) + Chr(13) + Chr(10) Console.Write(myLogStr) fs.Write(myLogStr) End Try 'Инициализируем Smtp Client для отправки письма с отчетом Dim mySmtp As New System.Net.Mail.SmtpClient("company.com") mySmtp.Credentials = New System.Net.NetworkCredential("user", "password") 'Указываем отправителя, тему и текст письма Dim myMsg As New System.Net.Mail.MailMessage("mail@example.com", myBranchMail, "Аналитическая рассылка компании X", _ "Уважаемый руководитель филиала " + CStr(myBranch) + ", во вложении находится файл аналитической рассылки.") 'Вкладываем в письмо ранее сформированный pdf файл Dim myAtt As New System.Net.Mail.Attachment(myAppPath + "\" + strDate + "\Report for Branch " + CStr(myBranch) + " " + strDate + ".pdf") myMsg.Attachments.Add(myAtt) Try 'Отправляем письмо mySmtp.Send(myMsg) 'Пишем в лог информацию об успешной операции myLogStr = CStr(Now()) + ": " + "sending file for Branch " + CStr(myBranch) + ", on " + myBranchMail + Chr(13) + Chr(10) Console.Write(myLogStr) fs.Write(myLogStr) Catch exp As Exception 'Пишем в лог информацию об ошибке Console.WriteLine("Erorr:" & exp.Message) myLogStr = CStr(Now()) + ": Erorr" & exp.Message & " when sending file for Branch " + CStr(myBranch) + Chr(13) + Chr(10) Console.Write(myLogStr) fs.Write(myLogStr) End Try Next Rows1 fs.Close() End Sub End Module

Используя код можно сделать консольное приложение и запускать его по расписанию, а можно использовать его в ETL пакете SSIS (MS SQL Server Integration Services).

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 09.01.2014 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft Office 365 для Дома 32-bit/x64. 5 ПК/Mac + 5 Планшетов + 5 Телефонов. Подписка на 1 год.
Microsoft 365 Business Standard (corporate)
Microsoft Windows Professional 10, Электронный ключ
Microsoft 365 Business Basic (corporate)
Microsoft 365 Apps for business (corporate)
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Вопросы и ответы по MS SQL Server
Мастерская программиста
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100