Как сделать отчет по практике в rad studio rave report
Я разработал формат сертификата зарплаты в Rave Report и через представление данных (из базы данных oracle), я получаю данные и привязываю. I Have one problem in it For some employees some Allowanc.
В настоящее время я использую rave, но у меня есть несколько подробных отчетов, которые были сделаны с использованием QuickReports. Мне нужно добавить эти QuickReports в мой проект Rave. Есть ли пр.
Недавно я воссоздал отчет (который ранее был сделан с помощью quickreports) в моем проекте rave. У quickreport была группа, и у этой группы было свойство AlignToBottom равным true, что делает ленту.
Когда я пытаюсь сохранить проект rave в pdf\html файле, используйте неправильную кодировку. Когда вы выбираете формат и нажимаете SAVE, он обычно сохраняется в коде iso-8859-1. Но мне нужен cp1251 .
Мне удалось создать отчет так, как я хочу, но я не могу получить Rave Report для печати/преобразования Grand total в Words. Например, если общая сумма 1,200.00 , она должна печатать только One Thou.
Прошу прощения, если вы найдете другие подобные вопросы, но я просто расстроен. Я просмотрел по всему Интернету и StackOverflow для ответа и просто не нашел ни одного решения, которое действительно.
Я создал проекты отчетов в Rave (Delphi 7). Однако они находятся в портретном режиме. Когда пользователь выбирает альбомную печать из Print Setup, в любом случае это портфолио на портрете. Как я мо.
У меня есть отчет о рейве с 5 страницами внутри него, нам нужно экспортировать, чтобы выделить две страницы из этих 5 страниц отчета, каждая страница - это сам отчет. мы используем gnostice v2.5 .
Мы создаем документ с использованием ravereports, Delphi. Я должен напечатать абзац, в котором некоторые конкретные слова должны быть выделены жирным шрифтом. Если я использую компонент datamemo, я.
Я использую Delphi 2010 и Rave Reports (встроен, v.7.7.0). Я использую эту пару в течение 5 месяцев без каких-либо проблем. В моей компании я использую два языка, сначала я использую наш основной я.
Я новичок, недавно я использую отчет rave 10.0BE на Delphi XE2, у меня проблема при представлении отчета. У меня слишком длинное текстовое поле, когда печать потеряла какой-то символ, потому что дл.
Я делаю отчет с компонентом Rave Reports в Delphi. Я пришел к некоторым проблемам, которые я не могу понять сам. Если у меня очень длинное число или текст без пробелов внутри, как я могу поместить .
Мне очень нравится RAVE Reports в создании нескольких отчетов, особенно с формулами и системами учета. но в последнее время у меня возникают проблемы с интеграцией JPEG-изображений и графиков с н.
Я использую Delphi 7. У меня есть механизм отчетности, реализованный с использованием Rave. Также используется экспорт в HTML, PDF и TXT. Проблема заключается в том, что: когда пользователь сохраня.
Я переношу проект Delphi из старой среды Delphi 2.0 в новую RAD Studio XE2. Мне нужно отказаться от компонентов QuickReport. К какому компоненту бесплатного отчета я могу перейти на? Я вижу, что XE.
У меня есть отчет с этим дизайном: Cabec: Band1 - Заголовок кузова - Основные данныеBand1 Coluns: DataBand1 - данные заголовка группы и строки заголовка Нижний колонтитул: группа 2 - нижний колонти.
Я установил Delphi 7, но Rave не регистрирует автоматическую регистрацию на компоненте поддона, поэтому я нажимаю компонент → устанавливать пакеты..-> Нажмите ADD → выберите RVreport50.bpl, но п.
Я делаю отчет в Delphi 2010 с Rave Report. Мой код: procedure TMain.ViewReportePrint(Sender: TObject); var report: TBaseReport; begin report := Sender as TBaseReport; With report do begin SetFont('.
Я новичок в Rave, и у меня есть нелепое количество трудностей, заставляющее разрывы страниц между разделами моего отчета. Это подробный отчет с различными типами подробных разделов (мастер = пациен.
Я хочу создать отчет, используя Rave for Delphi 2007, где один столбец подсчитывается для каждой группы записей, а затем отображается общая сумма. Есть ли примеры того, как это сделать?
При рендеринге отчетов я могу установить размер бумаги в RvNDRWriterBeforePrint с помощью (Sender as TBaseReport).SetPaperSize. Вместо жесткого кодирования размера бумаги я предпочел бы извлечь ско.
Я пытаюсь напечатать штрих-код EAN128 в отчетах Rave. В соответствии с помощью я должен иметь возможность использовать компонент code128 и добавить FNC1 к нему. Я просто не могу заставить это работ.
Я создал отчеты с использованием RaveReports (Обновлено). Я узнал, что поле memo не отображается правильно или некорректно, что приводит к тому, что текст будет spill- удален из области. и я замеча.
В настоящее время мы работаем с Delphi 2006, но теперь мы very готовы перейти на Delphi 2010. Проблема заключается в наших отчетах Rave, хотя. Мы просто получаем множество строковых ошибок при за.
У меня есть отчет о рейве с 50 страницами Мне нужно создать отчет в формате PDF с тем, что страницы с 1 по 50 и создайте лист расширенного распространения, который имеет страницы 1 - страница 3 Я и.
Я создаю свой первый отчет с отчетами Rave для delphi. У меня хорошо сохранились записи, и я дошел до финала. У меня есть набор записей, которые я показываю с инструкцией if в событии перед печатью.
Я должен поддерживать старый проект с докладом Rave. Необходимо распечатать нижний колонтитул страницы с более чем одной строкой. Возможно ли это с помощью метода printfooter или мне нужно идти дру.
Я тестировал некоторый код D2006, используя отчеты Rave на виртуальной машине, и обнаружил, что приложение зависает, когда я создаю отчет PDF, если нет установленного принтера. Здесь происходит зав.
Как я могу просмотреть отчет о рейве в форме Delphi? У меня есть элемент управления страницей с 2 страницами: на первом пользователь вводит некоторые данные (имя, адрес. ), и на второй странице .
Диапазон печати (от страницы: x до страницы: y) не работает, принтер всегда печатает все страницы! Любые решения или решения будут оценены. Спасибо заранее.
Я новичок в Rave Report и должен внести некоторые изменения в существующий отчет. Мне нужно создать отчет с дополнительной страницей, в которой для каждого отчета есть условия и условия как последн.
Я хочу установить цвет datatext отчета Rave с Delphi if Edit1.text='0' then datatext1.color= green;//for example Как я могу это сделать?
Есть ли возможность экспортировать RaveReports в PDF/A? Мы используем RaveReport с TurboDelphi и текущим RaveReport 7.0.5. Это должно быть с небольшими изменениями в самом отчете, потому что сейчас.
У меня есть отчет, в котором используется главный и дочерний запрос - мастер выбирает три поля в группе: billstatus, oscategory (сервер или рабочая станция) и имя группы Детский запрос выбирает куч.
У меня есть приложение, которое использует Rave Reports на Delphi 7. Я хочу, чтобы отчеты отображались по умолчанию в ландшафте. Как я это сделаю? Любые предложения будут очень оценены.
Когда пользователи просматривают отчет, я хотел бы избежать предоставления им возможности открыть другой отчет или сохранить текущий отчет. "Открыть" и "Сохранить" - это элементы в меню по умолчани.
Мы печатаем записи базы данных в rave с помощью rvproject1 и rvdatasetconnection1, и это работает. Как это сделать в восторге: Если Adotabel1.fieldbyname('something'). Asstring = 'something' then П.
Рубрики
А так же делитесь знаниями, знакомьтесь с новыми утилитами и приложениями, учитесь у всегда готовых помочь ответить на самые сложные вопросы во всех сферах IT и программирования. Станьте гуру и экспертом разработки ПО, получите признание коллег, заработайте репутацию, создайте стартап или приложение которое будет работать на вас!
Событие OnGetCols вызывается, когда Rave запрашивает мета данные. Внутри этого события вызывается метод Connection.WriteField для каждого поля ваших данных.
WriteField определяется следующим образом:
procedure WriteField(Name: string; DataType: TRpDataType; Width: integer; FullName: string; Description: string);
Name это короткое имя поля и должно состоять тоько из алфавитно-цифровых символов. DataType это тип данных поля и должен быть одним из следующих типов: dtString, dtInteger, dtBoolean, dtFloat, dtCurrency, dtBCD, dtDate, dtTime, dtDateTime, dtBlop, dtMemo, dtGraphiv. Width это относительная ширина поля в символах. FullName это полное имя поля и может включать в себя пробелы и другие не алфовитно-цифровые символы. Если FullName оставить пустым, то будет использовано краткое имя поля. Description это полное описание поля и обычно редактируется с помощью компонента, и может состоять из нескольких строк.
Разработка, просмотр и печать отчетов
Мы уже обсуждали в предыдущих главах визуальную среду создания отчетов Rave Reports и набор компонентов Delphi на странице Rave Палитры компонентов, предназначенный для интегрирования отчета в приложение Delphi. В этой главе мы обратимся к практике разработки и использования отчетов Rave Reports в приложениях Delphi.
Рассматриваемые в данной главе примеры не отличаются изощренностью оформления и сложностью, но позволяют поэтапно проследить всю методику создания отчетов и использования их в приложениях и обладают основными атрибутами стандартных отчетов. В них имеются заголовки, нумерация страниц, выводится текстовая и графическая информация.
Но сам по себе отчет — это всего лишь шаблон, который необходимо включить в приложение. Для этого применяются компоненты Rave Reports, которые помимо этой важной функции реализуют еще несколько очень полезных операций. Это, например, возможность сохранения и загрузки отчета в файлах и преобразование типов данных отчета из базового формата RAV в наиболее популярные форматы.
Вопросы создания отчетов для баз данных здесь не затрагиваются и обсуждаются в следующей главе.
В этой главе рассматриваются следующие вопросы:
- разработка проекта отчета в визуальной среде Rave Reports;
- использование компонентов TRvProject и TrvSystem;
- просмотр и печать отчета;
- использование в отчете внешних файлов;
- преобразование форматов данных при помощи компонентов Rave Reports.
Этапы создания отчета и включение его в приложение
Процесс создания отчета с использованием генератора отчетов Rave Reports состоит из трех этапов. Первый выполняется в визуальной среде Rave Reports, второй и третий — в среде разработки Delphi.
1. На первом этапе в визуальной среде Rave Reports создается проект отчета и в нем необходимые страницы, объекты доступа к данным (см. гл. 24). На страницах располагаются элементы оформления, при необходимости к ним подключаются просмотры данных (если отчет отображает информацию из таблиц базы данных) и объекты аутентификации пользователей отчетов. Создаются обработчики событий. И в завершение этапа готовый проект отчета сохраняется в файле с расширением rav.
2. На втором этапе в проект приложения в Delphi переносятся компоненты TRvProject и TRvSystem (см. г/?. 23) со страницы Rave Палитры компонентов. При этом в состав приложения автоматически включается ядро генератора отчета. Первый компонент связывается с файлом проекта отчета и представляет в приложении отчет со всеми его свойствами, страницами, элементами оформления и т. д. Второй компонент связывается с первым, взаимодействует с ядром генератора отчетов и обеспечивает печать отчета из приложения.
3. На третьем этапе создается программный код, обеспечивающий выполнение функций приложения, связанных с отчетом. Наряду со стандартными операциями предварительного просмотра и печати отчета это могут быть загрузка из файла и сохранение в файле, преобразование формата данных отчета, изменение содержания отчета в зависимости от выполненных пользователем действий и т. д. На этом этапе используются свойства, методы и методы-обработчики событий компонентов TRvProject и TRvSystem и других компонентов со страницы Rave Палитры компонентов.
Далее в этой главе мы подробно рассмотрим перечисленные этапы и различные аспекты программирования, связанные с ними.
Простой отчет в визуальной среде Rave Reports
При описании первого этапа наша задача — описать возможности проекта RAV, исследовать его структуру и составные части, которые можно использовать в приложении Delphi. Собственно элементы оформления просты в использовании и мы акцентируем внимание лишь на нескольких элементах, требующих небольших пояснений.
Для начала создадим в визуальной среде Rave Reports новый проект (команда File | New главного меню). Обратите внимание, что по умолчанию вместе с проектом создается первый отчет Reportl с одной страницей Pagel. Его мы и используем, переименовав в rptxp. Проекту присвоим имя simpleDemo.
Нумерация страниц отчета
В первую очередь создадим заголовок страницы и включим механизм нумерации страниц. Для этого перенесем на страницу элемент Section со страницы Standard Палитры инструментов и поместим его в верхней части страницы отчета. Эта секция будет объединять элементы оформления заголовка.
Поместим в секции элемент DataText — нам необходимо его свойство DataFieid. Редактор свойства Data Text Editor (рис. 25.1) позволяет настраивать свойство так, чтобы элемент мог отображать разнообразные данные. Сейчас нас интересуют номера страниц отчета.
Из списка Report Variables, который содержит глобальные переменные отчета, необходимо выбрать переменную RelativePage. Затем нужно щелкнуть на кнопке Insert Report Var и переменная Report.RelativePage появится в поле Data Text в нижней части диалога. Эта переменная при печати отчета будет содержать порядковый номер текущей страницы.
Рис. 25.1. Редактор свойства DataField элемента DataText
Аналогичным образом добавим переменную TotalPages, которая возвращает общее число страниц отчета. Затем вручную отредактируем текст в поле Data Text:
Шаблон номера страницы готов. Но для того, чтобы механизм нумерации заработал, необходимо перенести на страницу невизуальный элемент pageNuminit. Он будет работать автоматически. Единственное, что нужно сделать, — это настроить свойство initvalue, в котором задается номер начальной страницы.
Обратите внимание, что элемент PageNuminit должен быть только один и располагаться на первой странице, которая должна содержать свой номер. Иначе, на каждой странице, на которой есть такие элементы, нумерация начнется сначала.
Использование элемента FontMaster
Невизуальный элемент FontMaster позволяет использовать одинаковые шрифты в элементах оформления, например, в пределах одной секции. Для этого необходимо перенести в секцию элемент FontMaster и задать в его свойстве Font нужные характеристики шрифта. После этого во всех элементах, которые будут использовать этот шрифт, в списке свойства FontMirror надо выбрать этот элемент FontMaster.
В результате, один раз настроив шрифт, можно применить его для любого числа элементов оформления.
Добавление страниц к отчету
После создания первой страницы к отчету необходимо добавить еще две страницы и оформить их по образцу первой. Здесь все операции рутинны и не требуют дополнительных пояснений. В результате дерево проекта для отчета rptxp выглядит так, как показано на рис. 25.2.
Кроме обычных страниц, принадлежащих отчету, в Rave Reports можно создавать глобальные страницы, которые можно связать с любым отчетом проекта (например, титульные страницы). Для создания новой глобальной страницы используется команда File | New Global Page главного меню. Затем процесс разработки не отличается от обычных страниц.
Теперь для того, чтобы при просмотре или печати отчета отображались все страницы, а не только первая, необходимо дополнительно настроить свойство PageList отчета. В редакторе свойства необходимо перенести в список Page List все нужные страницы. Для этого страница выбирается из выпадающего списка Report Pages. Затем нужно щелкнуть на кнопке Add Page. Аналогичная операция выполняется и для глобальных страниц проекта, доступных в списке Global Pages.
Результат для отчета rptxp представлен на рис. 25.3.
Рис. 25.2. Дерево проекта SimpleDemo для отчета rptXP
Рис. 25.3. Редактор свойства PageList отчета rptXP
Используя кнопки слева в группе Page List, можно изменять порядок следования страниц при печати отчета или удалять страницы из списка.
Теперь отчет rptxp готов. Дополнительно к нему, с использованием тех же элементов и действий, в рассматриваемом нами примере создан еще один отчет rptRV. При этом по умолчанию текущим считается отчет, который при последнем сохранении проекта был текущим.
Проект отчета сохранен в файле SimpleDemo.RAV.
Отчет в приложении
Теперь, когда проект SimpleDemo.RAV с двумя отчетами готов, перейдем к разработке приложения в Delphi.
Любое приложение, использующее генератор отчетов Rave Reports, должно иметь как минимум пару компонентов — TRvProject и TRvSystem . Первый из них есть проект отчета в приложении. С его помощью разработчик получает доступ к отчетам проекта и их свойствам. Второй компонент обеспечивает использование ядра генератора отчетов Rave Reports при печати или предварительном просмотре отчета (см. рис. 23.1). Подробнее о свойствах и методах этих компонентов см. гл. 23.
При использовании этих компонентов в состав исполняемого кода приложения автоматически включается ядро генератора отчетов Rave Reports. Соответственно при распространении приложения не требуются дополнительные файлы — даже файл проекта отчета можно включить в приложение (см. ниже).
Компонент TRvProject необходимо связать с файлом проекта Simple-Demo. RAV. Для этого используется его свойство
Файл RAV можно распространять вместе с приложением или включить его в состав исполняемого файла. Для этого используется свойство
компонента (см. рис. 23.2).
Перед использованием отчетов из компонента TRvProject его необходимо открыть. В нашем примере при открытии формы приложения компонент открывается и в список считываются полные имена отчетов проекта и отображается описание текущего отчета:
procedure TfmMain.FormShow(Sender: TObject);
begin
rpProject.Open;
rpProject.GetReportList(IbxRptLiat.Items, True);
rpProject.ReportDescToMemo(meDesc) ;
end;
Но только один из отчетов доступен для использования одновременно. Для смены текущего отчета можно воспользоваться методом
function SelectReport(ReportName: string;
FullName: boolean): boolean;
Для идентификации текущего отчета компонент TRvProject имеет два свойства, которые возвращают его имя и полное имя. Это соответственно свойства ReportName и ReportFullName. При необходимости использовать имя отчета для одного из методов (например метод SelectReport) можно использовать оба имени. Во всех методах, где в качестве параметра применяется имя отчета, имеется дополнительный параметр FullName типа Boolean. При его значении True используется полное имя отчета.
Обратите внимание, что перед использованием любых свойств и методов, относящихся к отчету в компоненте TRvProject, отчет необходимо открыть.
Для этого используется метод open:
Так же, если в процессе работы приложения в компонент TRvproject нужно загрузить новый проект отчета, процедуру открытия нужно повторить:
RvProjectl.Close;
RvProjectl.SetProjectFile
(dlgOpenProject.FileName);
RvProjectl.Open;
Компонент отчета необходимо связать с компонентом TRvSystem . Для этого в свойстве Engine компонента TRvproject необходимо задать ссылку на компонент TRvSystem .
Просмотр и печать отчета
Если в предыдущем пункте, обсуждая отчет в приложении Delphi, мы говорили о компоненте TRvproject, то за выполнение любых операций с ним отвечает компонент TRvSystem.
При стандартной настройке этого компонента при печати или предварительном просмотре отчета всегда отображается диалог настройки печати (см. рис. 23.4). Если отображение этого диалога необходимо, печать текущего отчета компонента TRvproject, с которым связан данный компонент TrvSystem. осуществляется методом
любого из этих компонентов.
Если диалог настройки печати не нужен, компонент TRvSystem позволяет выполнить операцию напрямую. Для этого необходимо выполнить несколько действий.
Сначала нужно настроить свойство
type
TReportDest = (rdPreview, rdPrinter, rdFile);
property DefaultDest: TReportDest;
которое определяет, куда будет направлен отчет — в окно просмотра, на принтер или в файл.
Затем необходимо изменить свойство
type
SystemSetup = (ssAllowSetup, ssAllowCopies, ssAllowCollate,
ssAllowDuplex, ssAllowDestPreview, ssAllowDestPrinter, ssAllowDestFiie,
ssAllowPrinterSetup);
TSystemSetups = Set of TSystemSetup;
property SystemSetups: TSystemSetups;
убрав из него опцию ssAllowSetup, которая включена по умолчанию:
RvSysteml.SystemSetups := RvSysteml.SystemSetups — [ssAllowSetup];
и, наконец ,свойству
необходимо присвоить значение False, т. к. по умолчанию оно имеет значение True, которое и заставляет компонент показывать диалог настройки печати перед выполнением операции.
Обратите внимание на очень важную деталь — чтобы все сделанные настройки действительно сработали, печать отчета необходимо выполнять только методом Execute Компонента TRvProjeet.
Сохранение отчета во внешнем файле
При помощи методов компонента TRvSystem можно сохранить отчет для последующей печати в формате PRN или сохранить проект Rave Reports в формате RAV.
Для реализации первого варианта необходимо в качестве источника печати указать файл:
.
if dlgSavePRN.Execute then begin
rsSystem.DoNativeOutput := False;
rsSystem.DefaultDest := rdFile;
rsSystem.SystemSetups := rsSystem.SystemSetups — [ssAllowSetup];
rsSystem.OutputFileName := dlgSavePRN.FileName;
rpProj ect.Execute;
end;
.
Как видите, здесь мы воспользовались методикой прямой печати, описанной в предыдущем разделе, указав в качестве приемника файл с расширением ргп, выбранный в стандартном диалоге выбора файла.
Если же нужно сохранить проект отчета в файле с расширением rav, можно использовать метод SaveToFile компонента TRvproject:
if dlgSaveProject.Execute
then RvProjectl.SaveToFile(dlgSaveProject.FileName);
Также просто выполнить и обратную операцию — загрузить в компонент TRvProject проект отчета из файла, но при этом не забудьте закрыть текущий отчет:
RvProjectl.Close;
RvProjectl.LoadFromFile(dlgOpenProject.FileName);
RvProjectl.Open;
Аналогичную функцию выполняет метод
procedure SetProjectFile(Value: String);
Компонент TRvNDRWriter предназначен для сохранения отчетов в файлах. При этом используется двоичный формат NDR.
Приемник данных определяется свойством
type
TStreamMode = (smMemory, smTempFile, smFile, smUser);
property StreamMode: TStreamMode;
smMemory — для вывода данных используется поток в памяти (объект типа TMemoryStream);
smTempFile — данные сохраняются во временном файле, в папке, определенной в операционной системе для хранения временных файлов;
smFile — данные сохраняются в файле;
smUser — данные передаются в поток, заданный разработчиком.
Имя файла, в котором будет сохранен отчет, определяется свойством
А для определения потока используется свойство
Таким образом, если вы хотите использовать для сохранения отчета файл, перед использованием компонент настраивается, например, так:
RvNDRWriterl.StreamMode := smFile;
RvNDRWriterl.FileName := ReportFilePath;
Если вы планируете использовать поток, сделайте следующим образом:
var ReportStreara: TMemoryStreain;
ReportStream := TMemoryStream.Create/try
RvNDRWriterl.StreamMode := smUser;
RvNDRWriterl.Stream := ReportStream;
finally
ReportStream.Free;
end;
Но сначала этот отчет необходимо создать. Для этого используется обширный набор методов, позволяющих отображать текст и графику, создавать таблицы и заполнять их данными. Перед началом работы следует вызвать метод
а по окончании создания отчета использовать метод
Например, следующий фрагмент кода создает в отчете текст с заданным положением:
А вот так можно нарисовать прямоугольник и разместить в нем изображение:
with RvNDRWriterl do
begin
Start;
Units := unMM;
SetBrush(clBlue, bsSolid, nil);
Rectangle (5.0, 35.0, 65.0, 95.0);
Bitmap := TBitmap.Create;
Bitmap.LoadFromFile('factory.BMP');
PrintBitmapRect(10.0, 40.0, 60.0, 90.0, Bitmap);
Bitmap.Free;
Finish;
end;
В данном фрагменте кода метод
procedure PrintBitmapRect(XI,Y1,X2,Y2: double;
Bitmap: TBitmap);
отображает растровое изображение Bitmap в прямоугольнике, обеспечивая его масштабирование в соответствии с размерами прямоугольника.
Компонент TRvNDRWriter имеет свойство canvas (см. гл. 10), но использовать его нельзя — любые операции с канвой не возымеют действия и ваши труды не будут сохранены.
При использовании пары методов start и Finish не нужно предпринимать никаких дополнительных усилий для сохранения отчета — это будет сделано Методом Finish.
Множество других свойств и методов компонента (мы не будем останавливаться на них специально, т. к. их использование достаточно прозрачно) обеспечивают оформление отчета, управление страницами, настройку принтера и т. д.
Преобразование форматов данных
С компонентом TRvNDRWriter (вернее с файлами в формате NDR, которые он создает) взаимодействует ряд компонентов Rave Reports, которые обеспечивают преобразование данных из этого специфического формата в более распространенные форматы.
- Компонент TRvRenderpoF обеспечивает преобразование отчета в формат PDF для дальнейшего использования в Adobe Acrobat Reader.
- Компонент TRvRenderHTML обеспечивает преобразование отчета в формат HTML.
- Компонент TRvRenderRTF обеспечивает преобразование отчета в формат RTF.
- Компонент TRvRenderText обеспечивает преобразование отчета в текстовый формат.
Все они используются по одной схеме.
Сначала необходимо загрузить отчет из файла NDR в поток.
После этого вызывается метод
procedure PrintRender(NDRStream: TStream; OutputFileName: TFileName);
который и выполняет преобразование:
var ReportStream: TMemoryStream;
ReportStream := TMemoryStream.Create;
try
ReportStream.LoadFromFile(NDRFilePath);
RvRenderHTMLl.NDRStream := ReportStream;
RvRenderHTMLl.PrintRender(ReportStream, 'sdf);
finally
ReportStream.Free;
end;
Приложение Delphi, которое реализует печать отчетов, должно иметь в своем составе компоненты TRvProject и TRvSystem. Первый обеспечивает представление проекта отчета из файла RAV в приложении. Второй взаимодействует с ядром генератора отчетов и управляет печатью и предварительным просмотром отчетов.
Набор компонентов Rave Reports позволяет преобразовать формат данных отчета в наиболее распространенные форматы данных: HTML, RTF, PDF, TXT.
Дмитрий Гусев
дата публикации 11-10-2004 16:09
В этой статье я расскажу, как использовать механизм Direct Data View из Rave Reports для создания отчетов, когда у вас нет базы данных и/или вы используете собственное представление данных. В частности я хочу рассказать, как можно включить изображение TChart'а в отчет без дополнительного сохранения его в файл или в базу данных.
Такие вопросы встречаются очень часто и, конечно, однозначного ответа на этот вопрос быть не может - существует масса способов как это сделать. На мой взгляд, использование Direct Data View предоставляет довольно гибкие возможности для решения этой проблемы.
В дополнение, я хочу рассказать об использовании XML Data Binding - довольно удобном механизме представление структурированных XML документов в виде набора интерфейсов в Delphi.
Применение Direct Data View
Рассмотрим использование технологии Direct Data View на примере простой задачи. Допустим, нам нужно сделать программу, которая умела бы создавать отчет на основании данных температуры от времени. Пусть у нас есть некий файл с данными об изменении температуры, и мы хотим создать такой отчет:
- На первой странице будет график изменения температуры во времени;
- На второй и последующих страницах - точные значения температуры, представленные в виде списка значений.
Пусть данные изменения температуры во времени хранятся не в БД, а в XML документе. В нашем случае можно предложить такую структуру XML документа (файл Data.Xml):
Нам понадобится Delphi 7 Enterprise или Architect - для поддержки работы с XML Data Binding с установленным пакетом Rave Reports, который включен в поставку Delphi начиная с седьмой версии.
- Описание источника данных средствами Delphi;
- Когда мы опишем источник данных необходимо запустить приложение, чтобы редактор Rave Reports смог найти созданный нами источник и получить из него необходимую информацию об его структуре.
- Компонент TRvProject связать со вновь созданным файлом отчета.
После того, как Rave Reports получил необходимую информацию, можно закрыть приложение, в котором описан источник данных, и продолжать разработку бланка отчета независимо от самого приложения.
Теперь, когда мы получили некоторое представление о предстоящей работе, следует уделить внимание формату данных, в котором хранится информация о котировках валют. Этот формат может быть любым, но раз уж было решено использовать в качестве такового - XML, давайте посмотрим, какие средства предлагает Delphi для работы с XML, в частности - XML Data Binding.
XML Data Binding - это механизм "привязки" элементов документа XML к интерфейсам Delphi, преследующий цель облегчить работу программиста с данными в формате XML и повысить качество программирования, а также позволяющего выявить некоторые типичные ошибки приведения типов еще на этапе компиляции.
Создайте новый проект приложения: File —> New… —> Application
Создание привязки к данным:
-
File а New… —> Other… —> XML Data Binding
Примечание:
Значения всех элементов XML документа имеют тип Variant. Устанавливая на шаге 3 типы привязываемых данных, мы, тем самым, говорим генератору интерфейсов к какому тику нужно приводить тип Variants. Например, для элемента Timestamp нужно выполнить преобразование VarToDateTime. Мастер использует эту функцию преобразования типа, однако он не подключает модуль, в котором эта функция располагается. Возможно это недочет, который будет исправлен в следующих версиях. В любом случае мы должны руками прописать в секцию uses модуль Variants.
Посмотрев сгенерированный код можно заметить помимо интерфейсов привязки к XML данным три глобальные функции:
Именно ими, а точнее функцией LoadTemperature мы будем пользоваться для загрузки данных о температуре. Остальные функции применяются, когда мы хотим создать новый XML документ определенной структуры - NewTemperature или получить нужную ветвь из дерева XML документа - GetTemperature.
Следует также обратить внимание, что для повторяющихся элементов документа, в нашем случае это элементы Value, генерируются методы унаследованные от TXMLNodeCollection - такие как Count, Add, Insert и т.п., которые позволяют работать с определенными нами данными как с типизированным списком.
После того, как мы получили привязку к нашим данным о температуре, приступим к описанию источника данных Rave Reports, для этого:
- С закладки Rave поместим на форму компоненты:
- TRvProject —> RvProject - для связывания с нужным файлом бланка отчета;
- TRvCustomConnection —> RvTemperatureChartConnection - будет предоставлять изображение трендов TChart;
- TRvCustomConnection —> RvTemperatureDataConnection - будет предоставлять данные для детального отчета о значениях температуры во времени.
- C закладки Additional поместим на форму:
TChart —> TemperatureChart - для отображения изменения температуры во времени; - С закладки Standard положим на форму меню TMainMenu и создадим элементы меню, как показано на рисунке:
В классе TfrmMain - классе главного окна приложения добавим следующие поля:
Для определения конфигурации источников данных TRvCustomConnection необходимо написать обработчики событий OnOpen, OnGetCols, OnGetRow:
- OnOpen - возникает, когда генератор отчета пытается открыть набор данных, с целью получить информацию о количестве записей в наборе данных.
- OnGetCols - возникает, когда генератор отчета пытается получить информацию о структуре набора данных: количестве полей, их типе и т.д.
- OnGetRow - возникает, когда генератор отчета пытается получить очередную строку набора данных.
Примечание:
Для записи изображения TChart в набор данных соединения используется процедура WriteChartData из модуля RPTChart; не забудьте добавить его в секцию uses модуля Main.pas.
Теперь мы определили конфигурацию источников данных и все готово для того чтобы приступить к созданию бланка отчета:
- Создадим новый проект отчета: File —> New
- Добавим источник данных Direct Data View: File —> New Data Object —> Direct Data View
- Выберем оба соединения, которые мы определили в приложении.
Примечание:
Если у вас не отображаются эти два соединения, проверьте, запущено ли приложение, которое мы создали раньше.
В дерево источников данных должны добавиться два источника, с определенной нами конфигурацией полей:
Теперь, когда конфигурация источников получена приложение можно закрыть, однако необходимо установить обратную связь приложения с отчетом. Сохраните отчет в файл ReportProject.rav в той же папке что и приложение (или в любой другой) и установите свойство ProjectFile компонента RvProject так, чтобы оно указывало на файл проекта, например, ReportProject.rav.
- Выберите источник DataView2 и нажмите Next >
- Отметьте все поля источника данных и нажмите Next >
- Дальнейшие шаги мастера позволяют настроить внешний вид таблицы. Когда вы закончите у вас должен получиться шаблон страницы из двух колонок, в одной из которых будет отображаться время, а в другой соответствующее значение температуры. Можете настроить внешний вид как хотите, а можете оставить, так как есть.
На страницу отчета положите компонент MetaFile, он находится на закладке Standard и установите значения его свойств DataField и DataView как показано на рисунке:
Бланк отчета готов. Можно оставить его как есть или видоизменить на свое усмотрение.
В свойствах проекта выберите поле PageList и отметьте все страницы, которые должны быть включены в отчет. Там же можно указать порядок расположения страниц в отчете: в нашем случае страница Page1 будет первой, MainPage - второй.
Сохраните файл проекта отчета, с ним мы закончили. Осталось написать всего несколько строчек кода, чтобы загружать данные в приложение и отправлять и на печать. Для этого напишем следующие обработчики для пунктов меню:
Конечно, предварительно необходимо добавить компонент TOpenDialog а OpenDialog1 с закладки Dialogs. Теперь все готово, можно запускать.
Rave Reports - довольно мощный, но в тоже время простой в работе, пакет для создания отчетов. Direct Data View - лишь маленькая часть от того, что умеет Rave Reports. Среди всех особенностей Rave Reports хочется отметить одну - возможность изменения внешнего вида и, в общем случае, структуры отчета без перекомпиляции или внесения каких-либо изменений в работающую программу.
Смотрите также материалы по темам:
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.
Читайте также: