Печатные формы (отчеты) - QualitySolution/QSProjects GitHub Wiki
Печать различных документов и отчетов можно делать через использования формата отчетов RDL. Для этого используем движок из проекта https://github.com/majorsilence/My-FyiReporting . А точнее собственный форк с легка измененной сборкой https://github.com/QualitySolution/My-FyiReporting ветка QSBuild. Majorsilence Reporting работает с версией спецификации RDL 2005 года. Немного документацию можно найти здесь https://docs.microsoft.com/en-us/openspecs/sql_server_protocols/ms-rdl/9a5c45d3-4164-48d8-bf57-ee8e5dc405ef
Редактор отчетов можно скачать со странички основного проекта. У нас в библиотеках используется GtkViewer. Через прослойку в виде библиотеки QS.Report которая позволяет открывать отчеты в через механизм NavigationManager.
Использование
Отчет без диалога параметров
var reportInfo = new ReportInfo {
Title = String.Format("Документ №{0}", Entity.Id),
Identifier = "MyDoc",
Parameters = new Dictionary<string, object> {
{ "id", Entity.Id }
}
};
NavigationManager.OpenViewModel<RdlViewerViewModel, ReportInfo>(this, reportInfo);
ReportInfo
Класс ReportInfo
создает описания отчета для движка QS.Report.
Identifier
- техническое имя, при текущей реализации оно должно точно соответствовать расположению файла RDL в папке с программой. По умолчанию все rdl файлы должны находится в папке Reports расположенной в папке приложения. В этой папке могут быть подпапки, если файл находится в подпапке то идентификатор должен быть следующего вида: "SubFolder.ReportName".
Title
- указывается пользовательское название отчета, оно отображается в заголовке вкладки и используется как название файла по умолчанию если пользователь захочет сохранить отчет в каком либо формате.
Parameters
- параметры отчета. Не обязательное поле. Можно использовать для передачи в отчет надстроечных данных, например id документа или даты начала или окончания выборки. Параметры передаются в виде словаря имя - параметр.
ParameterDatesWithTime
- Указываем как передавать тип DataTime в отчет, если параметр false, время из типа DateTime не будет передано в отчет, а значит и в запрос выборки, это иногда удобно.
UseUserVariables
- Позволяет передать в строку соединения с базой для движка отчетов аргумент Allow User Variables=True
, он включает пользовательские переменные в запросах, для некоторых отчетов это надо, например для тех которые в запросе пытаются вычислить номер строки.
Source
- Возможность передать RDL в виде string, прямо из программы, без обращения к файлам на диске.
Отчет с диалогом параметров
У отчета может иметься отдельная панель с настройками отчета для пользователя. Этот гибкий механизм позволяет как угодно настроить отчет, вплоть до вызова разных RDL в зависимости от выбора пользователя. Вызывается такой вариант диалога еще проще:
NavigationManager.OpenViewModel<RdlViewerViewModel, Type>(null, typeof(ReportParameterViewModel));
Где ReportParameterViewModel
- это тип класса который реализует ViewModel панели.
Класс панели
ViewModel панели должна наследоваться от ReportParametersViewModelBase. Для минимальной настройки отчета необходимо задать у ViewModel поля Title
и Identifier
, соответствующий ReportInfo
базовый класс может создать сам. При необходимости можно переопределить Parameters для передачи параметров в отчет.
Чтобы вызвать формирование отчета из view необходимо вызвать метод LoadReport() у ViewModel-и.