Печатные формы (отчеты) - 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-и.