Эта статья о том, какие ограничения есть сейчас у библиотек формирования документов на примере FastReport .NET. Расскажем какие возможности дает SaaS МоиОтчеты Облако. И конечно наглядно посмотрим как пользователи бизнеса могут работать с отчетами и документами удобнее и эффективнее с помощью этих двух решений.
Безусловно FastReport .NET — мощный и гибкий генератор отчётов, который активно используется разработчиками десктопных приложений на платформе .NET. Он позволяет формировать, отображать, экспортировать и печатать документы любой сложности прямо из настольного приложения.
Но, как и у любого локального инструмента, у FastReport .NET есть ограничения:
Частично, вышеописанные проблемы решаются при помощи WEB-компонентов. Но данный подход требует значительных усилий на дополнительную разработку и содержание серверной инфраструктуры.
Интеграция МоиОтчеты Облако в ваше .NET-приложение позволяет сохранить привычный рабочий процесс, но при этом добавить:
✔️ удалённое хранилище документов;
✔️ API для рассылки, совместного доступа и хранения;
✔️ поддержку работы с отчётами вне офисной сети;
✔️ простой обмен с заказчиком, юристом, бухгалтером — без лишнего кода и файлов;
✔️ построение отчётов по расписанию и прочий функционал облачной системы.
Допустим, у нас есть небольшое риэлторское агентство. Сотрудники, находясь непосредственно на объектах, составляют на ноутбуке договоры купли-продажи недвижимости. Для этого используется WPF-приложение с библиотекой FastReport .NET. В нём реализована форма, в которую пользователь вводит следующие данные:
На основе введённых данных с помощью FastReport .NET генерируется договор и отображается в окне предпросмотра. Далее его можно скачать в формате PDF, Word или просто напечатать.
Всё удобно, пока пользователь работает на одном компьютере.
С этими проблемами как раз может помочь МоиОтчеты Облако!
МоиОтчеты Облако – это SaaS сервис, предназначенный для создания, хранения и отправки отчётов для вашего бизнеса, доступ к которым организован из любой точки мира без необходимости создания собственного приложения. С Облаком можно работать как через графический интерфейс в браузере (на компьютере или смартфоне), так и с помощью REST API.
Добавим в наше риэлторское приложение несколько новых облачных функций.
FastReport .NET по-умолчанию поддерживает сохранение и открытие документов из МоиОтчеты Облако. У нас есть подробная статья про этот сценарий, но если кратко и в текущем контексте, то при экспорте отчёта в меню есть пункт «Сохранить в Облако». При первом использовании пользователь проходит авторизацию: вводит логин и пароль от своей учётной записи (если у вас еще нет нашего Облака, то его можно получить на этой странице).
Далее выбирается папка в облачном хранилище — например: /Договоры/2025/Июль
Затем файл загружается на сервер и становится доступен онлайн — с возможностью просмотра и скачивания.
После сохранения договор можно найти в МоиОтчеты Облако в разделе «Отчёты», посмотреть в окне предпросмотра, экспортировать в нужный формат и отправить на почту или сохранить на FTP- сервер, если это необходимо.
Также, кроме сохранения из десктопного приложения в облако доступно и открытие отчёта из МоиОтчеты Облако. Для этого в нашем приложении нужно нажать кнопку «Открыть из Облака».
Да, FastReport .NET также поддерживает почтовые рассылки, но есть несколько нюансов. Во-первых нужно вводить настройки почтового сервера на каждый ноутбук, что может быть небезопасно. А при смене настроек сервера придётся также менять настройки у каждого сотрудника.
Помимо этого, нет единого хранилища e-mail адресов. Нужно поддерживать актуальность списка на каждом устройстве. Это может быть неудобно, когда требуется делать рассылки всем сотрудникам, или отправлять документы в сервис печати.
Используя C# SDK МоиОтчеты Облако, можно добавить в приложение возможность отправлять договоры на электронную почту. Рассмотрим такой сценарий:
Настроить почтовый сервер и шаблон письма можно как с помощью SDK в нашем приложении, так и предварительно в Облаке (Для этого на вкладке «Задачи» жмём кнопку «Добавить задачу» -> «Рассылка по электронной почте»). Чтобы более подробно погрузиться в SDK, добавим все настройки тут.
Но сначала нужно подключить C# SDK. Для этого нужно добавить NuGet пакет FastReport.Cloud.SDK
:
dotnet add package FastReport.Cloud.SDK
Затем определим нужные клиенты в классе MainWindow.xaml.cs
для взаимодействия с МоиОтчеты Облако:
private readonly IExportsClient exportsClient; private readonly TasksClient tasksClient;
И инициализируем переменные в конструкторе:
var httpClient = new HttpClient(); httpClient.BaseAddress = new Uri(HOST); httpClient.DefaultRequestHeaders.Authorization = new FastReportCloudApiKeyHeader(ApiKey); var subscriptionsClient = new SubscriptionsClient(httpClient); exportsClient = new ExportsClient(httpClient); tasksClient = new TasksClient(httpClient);
HOST указываем как "https://облако.моиотчеты.рф"
, ApiKey – это наш ключ, который можно получить в панели пользователя по адресу облако.моиотчеты.рф в разделе API ключи.
После подключения SDK можно приступать к работе с облаком. Добавим метод ShareEmail
, который будет вызываться при нажатии кнопки отправки в окне нашего приложения:
private void ShareEmail(object sender, RoutedEventArgs e) { UpdateParameters(); using (var s = new MemoryStream()) { report.SavePrepared(s); byte[] byteReport = s.ToArray(); tasksClient.RunTask(new RunExportReportTaskVM { SubscriptionId = SUBSCRIPTION_ID, InputFile = new RunInputFileVM { Type = FileKind.Report, Content = byteReport }, Format = ExportFormat.Pdf, Transports = new List<RunTransportTaskBaseVM> { new RunEmailTaskVM { From = EMAIL_FROM, To = new List<string>{ Email.Text }, Subject = SUBJECT + " " + SellerName.Text + " - " + BuyerName.Text, Server = MAIL_SERVER, Port = MAIL_PORT, Username = EMAIL_FROM, Password = EMAIL_PASSWORD, EnableSsl = true, SubscriptionId = SUBSCRIPTION_ID, InputFile = new RunInputFileVM() { Type = FileKind.Export } } }, ExportParameters = new Dictionary<string, string> { { "ColorSpace", "CMYK" }, { "JpegQuality", "100" }, { "PrintOptimized", "true" } } }); } }
считывает все значения текстовых полей приложения и устанавливает параметры отчёта. Далее отчёт преобразуется в массив байт и отправляется в облако для пересылки на почту. Для лучшего качества документа добавляются параметры экспорта
UpdateParametersColorSpace
и JpegQuality
.
Ещё один полезный сценарий — публичная или защищённая ссылка на договор:
Это особенно удобно, когда стороны договора находятся в разных городах или работают удалённо.
Рассмотрим создание ссылки на PDF-файл, защищённый ключом доступа. Для этого добавим на главный экран кнопку «Поделиться PDF по ссылке».
И обработчик этой кнопки:
private void SharePdf(object sender, RoutedEventArgs e) { UpdateParameters(); using (var s = new MemoryStream()) { report.SavePrepared(s); byte[] byteReport = s.ToArray(); TaskMessageIdVM exportResult = tasksClient.RunTask(new RunExportReportTaskVM { SubscriptionId = SUBSCRIPTION_ID, InputFile = new RunInputFileVM { Type = FileKind.Report, Content = byteReport }, Format = ExportFormat.Pdf, ExportParameters = new Dictionary<string, string> { { "ColorSpace", "CMYK" }, { "JpegQuality", "100" }, { "PrintOptimized", "true" } }, OutputFile = new OutputFileVM { FileName = SUBJECT } }); var pdfExport = exportsClient.GetByTaskMessageId(exportResult.MessageId); FileSharingKeysVM sharingKeys = exportsClient.CreateSharingKey(pdfExport.Id, new CreateFileShareVM { Permission = new FilePermissionCRUDVM { Get = FileGet.Download } }); FileShareVM sharingKey = sharingKeys.Keys.First(); string downloadUrl = HOST + DOWNLOAD_ROUTE + pdfExport.Id + "?accessKey=" + sharingKey.Key + "&preview=true"; Clipboard.SetText(downloadUrl); MessageBox.Show("Ссылка скопирована в буфер обмена. Теперь ей можно поделиться. \n" + downloadUrl, "Ссылка на договор", MessageBoxButton.OK); } }
Также, как и в предыдущем случае, сначала устанавливаются параметры отчёта, затем происходит экспорт в PDF и сохранение в МоиОтчеты Облако. Затем получаем сохранённый файл в методе GetByTaskMessageId
и создаём для него ключ. При создании ключа метод CreateSharingKey
принимает права, которые у него будут. Для скачивания и просмотра достаточно права FileGet.Download
.
После создания ключа остаётся только сформировать ссылку и показать её пользователю. Также для удобства сделаем так, чтобы ссылка сразу копировалась в буфер обмена для дальнейшей пересылки.
Открываем ссылку в браузере и видим наш договор.
Теперь его с лёгкостью можно распечатать или передать коллеге или клиенту.
Если вы уже используете FastReport .NET в своих десктопных приложениях — значит, вы заботитесь о качестве документов и удобстве пользователей. Подключив МоиОтчеты Облако, вы превращаете локальный генератор отчётов в инструмент для совместной работы, хранения и доставки документов, без необходимости разворачивать серверную инфраструктуру, проводить масштабные изменения своих приложений и организовывать безопасность.
Ускорьте свои процессы. Упростите жизнь своим пользователям. Более подробно про Облако можно почитать на странице продукта.
Приложение из этой статьи доступно по этой ссылке.
В случае, когда необходимо развернуть сервер отчётности в контуре компании, подойдут наши self-hosted решения:
- МоиОтчеты Публикатор – легковесный сервер отчётности для малого и среднего бизнеса, не требующий поддержки серьёзных вычислительных мощностей;
- МоиОтчеты Корпоративный Сервер – комплексное решение для крупного бизнеса с возможностью запуска в кластере Kubernetes и гибкой настройки.
Остались вопросы — свяжитесь с нами по телефону или почте sales@fastreport.ru, и мы подскажем с чего начать!