Как сделать отчет в делфи

Добавил пользователь Дмитрий К.
Обновлено: 19.09.2024

procedure TForm1. Button1Click ( Sender: TObject ) ;

Теперь запустите программу и нажмите кнопку Просмотр. Должно появится окно просмотра. Если вы желаете напечатать отчет напрямую на принтер по умолчанию, то просто смените слово Preview на слово Print, то есть

procedure TForm1. Button1Click ( Sender: TObject ) ;

В данный момент следует сделать несколько замечаний. В данной тестовой программе компонент TQuickRep расположен на главной форме и, как вы видите это выглядит не совсем хорошо. В реальной программе вы никогда не будете показывать форму содержащую TQuickRep. Вместо этого вы разметите его на другой форме.
Для того, что бы сделать данный пример похожим на настоящее приложение, сделаем еще несколько шагов: 1Создаем другую форму, назовем ее как Form2 2Сделаем ее главной формой Project | Options | Main form to Form2 3Бросим кнопку на Form2 4Напишем код в обработчике события кнопки

procedure TForm2. Button1Click ( Sender: TObject ) ;

Form1. QuickRep1 . Preview ;

procedure TForm1. QRCompositeReport1AddReports (

QRCompositeReport1. Reports . Add ( RepNewCust. Report ) ;

QRCompositeReport1. Reports . Add ( RepOrderSummary. Report ) ;

QRCompositeReport1. Reports . Add ( RepStockReorder. Report ) ;

( Если вы не брезгуете использованием оператора with в вашем коде, то вы можете написать так

with QRCompositeReport1. Reports do

procedure TrepCusList. RepDetailBeforePrint

var PrintBand: Boolean ) ;

PrintBand := CustTableTotalSales > 3000000 ;

Примечание: Когда PrintBand устанавливается в False для detail секции, значения для данной записи не включаются в расчет агрегатных TQRExr функций, например функция SUM. Данное поведение отличается между версиями QuickReport 2 и QuickReport 3.
Если вы выключите секцию Page Footer, следствием будет появление пустого пространства внизу каждой страницы – секция Detail не использует данное пространство, QuickReport не проверяет размер страницы каждый раз. Так что если вы смените свойство Enabled секции Page Footer, то вызовите метод ResetPageFooterSize для обновления информации.

// use QRPrntr to get TQRPreviewInterface

TQRCustomPreviewInterface = class ( TQRPreviewInterface )

function Show ( AQRPrinter : TQRPrinter )

function ShowModal ( AQRPrinter : TQRPrinter )

Заметим, что это интерфейсный класс interface – это обрабатывает только несколько функций. Эти две функции предназначены для отображения в модальной и не модальной форме.
Предположим, что форма просмотра называется TCustPreview. Затем реализуем методы TQRCustomPreviewInterface, которые выглядят так:

RAVE ( R eport A uthoring V isual E nvironment)- это визуальная часть RAVE. В данной статье попробуем за минимальное количество шагов быстро создать с помощью редактора RAVE первый визуальный отчет и затем рассмотрим, что делает проект отчетов RAVE. Особенностью создаваемого проекта является наличие параметра в тексте отчета, значение которого задается программным образом. Запускаем Delphi, создаем новое приложение и приступаем.

Для начала бросьте TRvProject на форму проекта. Это будет связуещее звено вашего проекта и разрабатываемого отчета. Так же можно добавить TRvSystem и соединить его с RvProject1 через Engine property.

Для начала работы щелкните 2 раза на RvProject 1 на вашей форме и после загрузки

перед вами появится Visual Designer :


Интерфейс программы несложный и чем-то напоминает сам Delphi. Первая вещь, которую мы увидим, будет страница с закладками, с двумя окнами по обе стороны страницы и панели вверху экрана.

Проект Rave может содержать несколько страниц отчета. Если раскроете дерево проектов справа, то увидите, что сейчас активен отчет Report1. Щелкнув по нему мышью, можно будет увидеть его свойства в окне слева ( Inspector ). Давайте изменим имя отчета ( name ) и назовем его SimpleReport.

Следующим шагом выбираем закладку стандарт и скидываем компоненту Text на страницу. Теперь можно изменить ее свойства и сам текст надписи.


Попробуйте поменять свойства font и text и нажмите F9. В появившемся меню выберите preview и вы увидите страницу своего отчета.

Связываем проекты

Параметры

В нашем проекте можно использовать параметры, значения которых будут задаваться в программе. Выберите страницу Report1 справа в дереве проекта и нажмите … в поле parameters слева. В качестве параметра, например, можно будет передавать заголовок. В появившейся пустой список добавьте Name .

Для печати значения параметра необходимо использовать DataText компонент в закладке Report сверху. В поле DataField можно выбирать различные переменные и параметры проекта. Выберите Project Parameters и найдите параметр Name. Далее нажмите insert parameter и ok . Теперь значение компонента DataText на нашей странице = Param.Name

Перед печатью отчета необходимо задать значение параметра. Это делаем в программе с помощью RvProject . SetParam . Перед этим сохраните проект отчета в папке с основным проектом программы. Получится файл Project1.rav . Переходим к Delphi и пишем процедуру для кнопки:

procedure TForm 1. BitBtn 1 Click ( Sender : TObject );

begin

RvProject 1. Open ;

RvProject 1. SelectReport (' SimpleReport ', False);

RvProject1.SetParam('Name','Вова');

RvProject1.Execute;

RvProject1.Close;

end;

В ProjectFile у RvProject1 выбираем файл Project1.rav и запускаем программу.

Это достаточно простой пример, который можно усложнить. Например можно совместить текст DataText и тест параметра. Для этого вернитесь в Rave Designer и в DataField можно написать следующее:


Здесь же можете задать для вывода такие переменные как дату, время, число страниц и т.д. ( Report Variables –переменные отчета и Post Initialize Variables - переменные, которые образуются после создания отчета) .

Структура RAVE:

Компоненты доступа к данным – Как было сказано ранее, Rave использует данные из вашего приложения. Стандартные компоненты для доступа к данным, TRvCustomConnection, TrvDataSetConnection и TRvTableConnection представляют собой мост между данными вашего приложения и визуальными компонентами Rave. Компонент TrvCustomConnection может быть использован для доступа к данным не баз данных, таких как массивы или двоичные записи. Компонент TRvDataSetConnection может быть использован для доступа к наследникам TdataSet, включая компоненты третьих сторон. TrvTableConnection специально с компонентом TTable или его наследниками. Более детальное рассмотрение использования компонент доступа рассматривается в следующей главе.

Компонент TRvProject – данный компонент предоставляет доступ к отчетам и их компонентам. Компонент TRvProject имеет много свойств и методов, которые позволяют вам создавать, модифицировать и проектировать ваши проекты отчетов, будет рассмотрен в более поздних главах. Обычно вам требуется только один компонент TrvProject на приложение, но нет ограничения, что бы иметь их больше. Более подробно об использовании компоненты TRvProject будет сделана в следующих главах.

Reports – библиотека (Report Library) страниц отчета проекта. Отчет Rave создает страницы отчета и визуальные компоненты на данных страницах. Вы можете создать столько определений страниц, сколько пожелаете, и объединять их большим количеством различных методов.

Global Pages – глобальные страницы записываются в каталог глобальных страниц проекта. Компоненты на глобальных страницах, в отличие от страниц отчета, видны во всех отчетах. Глобальные страницы служат для хранения шаблонов, которые отражаются в других страницах отчета.

Data Views – представления данных (Data views) записываются в словарь представлений (Data View Dictionary) проекта. Представления предоставляют интерфейс к компонентам доступа. При создании нового представления, вы должны иметь активный компонент доступа, или в работающем приложении, или на загруженной Delphi или C++Builder форме. Просмотры затем запрашивают компоненты доступа к данным для получения мета информации о данные, такой как - имена полей, типы данных и т.д. Компоненты полей содержатся внутри каждого представления, позволяя установку свойств для каждой колонки данных.

Для вывод информации не печать использовались отчеты созданные в Delphi. Отчет - это печатный документ, содержащий данные, аналогичные получаемые в результате выполнения запроса к БД. В Delphi для создания отчетов служит генератор отчетов QuickReport,содержащий обширный набор компонентов.

Компоненты, предназначенные для создания отчетов, находятся на странице QReport палитры компонентов. Большинство компонентов отчета являются визуальными. Многие из них мало отличаются от аналогичных компонентов страниц Standard, Additional и Data Controls. Например, компоненту QRImage соответствуют компоненты Image и DBImage.

Главным компонентом отчета является компонент-отчет QuickRep, представляющий собой основу, на которой размещаются другие компоненты. Компонент QuickRep обычно размещается на отдельной форме, предназначенной для создания отчета. По умолчанию он имеет имя QuickRep1. если на форме размещается другой отчет, он получает имя QuickRep2 и т.д.

Компонент QuickRep при перемещение его на форму имеет вид страницы формата А4, первоначально отображаемой в натуральную величину. На этапе разработки приложения можно изменить масштаб страницы и размещенных на ней компонентов с помощью свойства Zoom типа Integer (значение этого свойства устанавливается в процентах, по умолчанию 100%).

Отчет можно поместить на любую форму приложения, например на главную. В этом случае отчет (страница) создает своего рода фон, на котором расположены управляющие элементы формы.

Компонент QuickRep связывается с набором данных Table или Query, для которого создается отчет, с помощью свойства DataSet. При этом наборе данных Query может содержать записи, выбранные из разных таблиц. При печати отчета в процессе выполнения приложения набор даны должен быть открыт. Во время построения отчета можно использовать специально создаваемые наборы данных и размещать его на форме, при этом источник данных DataSource не требуется. На практике компонент QuickRep обычно связывается с набором данных, записи которого отображаются на форме в визуальных компонентах. В этом случае в отчет попадают записи, удовлетворяющие, например, критерию фильтрации и сортировки, задаваемому пользователем.

Отчет состоит из отдельных полос - составных частей отчета (Рисунок 5), которые определяют содержание и вид созданного документа. Полоса представляет собой элемент отчета. Каждый элемент размещаются на своем месте и предназначен для отображения соответствующих компонентов отчета и вывода данных.

Конструирование отчета в основном аналогично конструированию формы. Управлять наличием полос в отчете можно с помощью свойства Bands множественного типа TQuickRepBadns. При разработки приложения включение/отключение полосы выполняется установкой логического значения соответствующего подсвойства свойства Bands, например, для полосы заголовка отчета этим подсвойством является HasTitle. С помощью этого свойства можно включать полосы: верхний колонтитул, заголовок отчета, заголовки столбцов, область данных, итог отчета, нижний колонтитул. Так же эти полосы можно вставлять в отчет с помощью компонента полосы QRBand.

Полоса отчета (компонент QRBand) является основной составной частью отчета, на которой размещаются другие его компоненты. Типы полосы определяются свойством BandType типа TQRBandType, которое может принимать следующие значения:

- rbTitle - заголовок отчета;

- rbpageHeader - верхний колонтитул;

- rbDetail - данные записей набора данных;

- rbPageFooter - нижний колонтитул;

- rbSummary - итог отчета;

- rbGroudHeader - заголовок группы, который находится для каждой группы;

- rbGroudFooter - примечание группы, которое выводится для каждой группы;

- rbColumnHeader - заголовки столбцов, печатаемые один раз на каждой странице над данными.

При установки типа полосы она автоматически размещается на своем месте в отчете выравнивается по ширине страницы отчета с учетом левого и правого полей. Разработчик не имеет возможности переместить полосу на другое место с помощью мыши. Изменить ширину полосы можно косвенно, изменяя размеры страниц и полей.

Заголовок отчета выводиться один раз на первой странице сразу под верхним колонтитулом, если он есть. В полосе заголовка обычно размещаются надписи QRLabel, содержащие требуемый текст, как правило, название всего отчета. При необходимости в заголовке можно разместить, например, сведения о названии, адресе и телефоне организации, а также логотип.

Колонтитулы печатаются в начале и конце каждой страницы, в них обычно выводятся сведения о дате, время печать, а также номер страницы. Для этого в полосах колонтитулов чаще всего размещаются компоненты QRSysData , которым устанавливаются требуемое значение свойства Data. В полосе колонтитула можно размещать и другие компоненты, например, QRLabel для вывода на каждой странице названия организации.

После создания полосы определенного типа в ней размещаются соответствующие компонент. При этом необходимо только компоненты страницы QReport. Размещение на полосе других компонентов, не взывает ошибки транзакции, но в сформированный отчет такие компоненты не попадают. Можно разместить компонент отчета и вне полосы, на компоненте-отчете QuickRep. В этом случае он будет выводиться на каждой странице отчета. Обычно используются следующие компоненты отчета:

- QRTable - надпись, содержащая текст;

- QRDBText - значение поля записи, обычно размещается в полосе данных;

- QRExpr - значение, формируемое на основе выражения, в котором могут использоваться значение полей записей;

- QRSysData - системная информация, обычно используемая для итоговых полос и полос колонтитулов;

- QRImage - графический обзор(например, логотип организации);

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

Возможность автоматического изменения размеров содержащего текст компонента по размеру текста управляет свойство AutoSize. По умолчанию размер текстового компонента автоматически подстраивается под содержащийся в нем текст, так как свойство AutoSize имеет значение True. Если компоненты отчета, в первую очередь элементы полосы данных, имеют рамку, то размеры этих компонентов должны быть постоянными.

Полосы заголовков столбцов и данных является основными полосами, в которых размещаются компоненты, обеспечивающие табличный вывод содержимого набора данных. Заголовки столбцов выводятся на каждом листе отчета.

Для заголовка столбцов данных в полосу заголовков обычно помещаются компоненты QRLabel, котором находится тексте, соответствующий полям данных.

Для вывода значений полей записей в полосу данных обычно помещаются компоненты QRDBText и QRExpr. Имя набора даны, указывается в свойстве DataSet, чьё значение устанавливается автоматически при помещении компонента в полосу данных, а имя поля задается в свойстве DataFileld.

На этапе разработки в отчете присутствует только одна полоса данных, но при форматировании отчета отдельная полоса данных будет выведена для каждой записи отчета. Если набор данных является пустым и не содержит записей, то область данных не выводится.

Компонент QRExpr позволяет вставлять в отчет значение выражения, рассчитываемого обычно с участием различных полей записей. Выражение заносится в свойство Expression типа String. Использование компонента QRExpr аналогично использованию вычисляемых полей набора данных. Однако при просмотре отчета на этапе разработки значения компонентов QRExpr выводятся, в то время как значение выделяемы полей не определяются.

Итоговая полоса отчета выводится один раз в конце отчета сразу после полосы данных. В этой полосе обычно стоят либо итоговые сведения отчета, например, среднее и максимальное значения по данным какого-либо поля. В итоговой полосе обычно размещается компонент QRLabel для вывода записей и QRExpr для вывода значения выражения.

Можно выделить следующие виды отчетов.

Простой отчет представляет собой отчет на основе данных из одного набора данных и содержит сведения, которые выводятся в табличном виде без дополнительных условии, например, группирование данных. Размещение и вид печатаемых в отчете данных аналогичны размещению и виду данных, отображаемы в сетке DBGrid. Отличием является то, что данные отчета размещаются не на форме, а на бумажном документе, и их нельзя редактировать.

Простой отчет может содержать следующие полосы, перечисляемые в порядке размещения на странице: верхний колонтитул; заголовок отчета; заголовки столбцов; данные; итог отчета; нижний колонтитул.

Выводимые в отчете данные можно группировать по определённому признаку. Для группирования записей отчета по определенному полю в наборе данных должен быть установлен текущий индекс, построенный по этому полю. Если индексу не задан или установлен по другому полю, то ошибок компиляции не возникает, то группирование записей выполняется неправильно. Можно группировать данные, находящиеся в одном наборе данных, или данные из связанных наборов данных.

В отчете с группирование данных вместо полосы Detail нужно использовать комбинацию полос:

1) QRGroup - название Group Header;

2) QRBand - полоса даны, название Detail;

3) QRBand - полоса нижнего колонтитула группы, название Group Footer.

Эти полосы должны располагаться в указанном порядке. Если группа не имеет нижнего колонтитула, то значение этого свойства можно не задавать. Остальные полосы отчета с группирование данных создаётся и используется так же, как в обычном простом отчете.

- Области данных - в качестве набора данных устанавливается главный набор. В ней обычно размещаются компоненты QRDBText, текст, который является заголовками столбцов даны детальной области;

- Области детализации - устанавливается подчиненный набор данных. В ней обычно располагаются компоненты QRDBText и QRExpr, с помощью которых выводятся значения полей записей подчиненного набора данных;

- Нижний колонтитул страницы.

Составной отчет объединяет в себе несколько отчетов и представлен компонентом QRCompositeReport, который можно разместить на любой форме. На начальном этапе составной отчет не содержит ни одного отчета. Для добавления к составному отчету нового отчета используется событие OnAddReport, при этом добавляемые отчеты должны быть предварительно подготовлены. Свойство Reports составного отчета содержит список отчетов. Новые отчеты добавляются к этому списку методом Add.[5]

И так в предыдущей части мы создали и настроили свое приложение, выполнили всю необходимую для подготовку включая и настройку компонентов и сегодня можем уже приступить к самому интересному, начнем конструировать свой отчет.

1) Кликаем на компоненте frxReport1, в инспекторе объектов находим его свойство DataSet, разворачиваем его и вводим следующие настройки:

2) Дважды кликаем на компоненте frxReport1, и перед нами откроется конструктор отчетов. С интерфейсом думаю разберетесь, работа на нем чем то похожа на работу в Rad Studio. Присутствует своя рабочая область, панель инструментов, диспетчер объектов. Компоненты (левая част окна) на рабочий лист помещаются так-же как и в Rad Studio - кликом. А переменные (правая часть окна) из окна DataTree -> Variables - перетаскиванием непосредственно на рабочее пространство).


Настроим немного наш лист отчета. Для этого щелкаем дважды на белом (рабочем) листе, появится окно настройки страницы,


где в пункте Paper, разделе Size выберем привычный для большинства людей формат А-4, на котором продолжим конструировать наш отчет. Здесь можно внести и другие настройки, поля, ориентацию листа и пр. Но в данном примере трогать их не будем, чтобы не раздувать объем статьи.

3) Для вывода данных в отчет из нашего приложения, нам понадобятся соответствующие переменные, я назову их:

Заходим в пункт меню Report отчета (левая верхняя часть окна), далее выбираем Variables. Перед нами всплывает окно создания и настройки переменных. Создаем в нем новую категорию называем её MyVariables, для этого заходим на вкладку Variables, выделяем пиктограмму папки с одноименным названием, после чего создаем новую папку, называем ее MyVariables и создаем в ней все необходимые переменные. Сложного ничего нет, проблем возникнуть не должно, вот как это получилось например у меня:


кликаем на зелененькую галочку и переходим к правой части экрана дизайнера отчетов, разделу Data Tree, там на вкладочке Variables, помимо системных, должна отобразиться созданная нами только что директория MyVariables с нашими переменными, откуда теперь их нужно перетащить на наш рабочий лист. На рабочем листе выставляем их по порядку в столбик и с помощью инструмента - Text object (панель инструментов - левая часть конструктора) cоздаем текстовые объекты Мемо c 1 по 5, называем их Отчет№, Фамилия, Имя и т.д. и размещаем их напротив соответствующих переменных. У меня получилось примерно так:


Да чуть-было не забыл, для вывода фотки из Image1 нашей формы нужно с той же панели установить и разместить на рабочем пространстве нашего отчета компонент Picture1 (инструмент Picture Object) и его свойства: HightQuality, Stretched и Center в диспетчере объектов установить в true.

Еще важно, клацните дважды по каждой переменной, зайдите на вкладочку - Format и убедитесь, что все переменные относятся к категории Text (no formatting).

Вроде все, сохраняем наш отчет еще раз закрываем и переходим к нашей форме. Будем привязывать её к отчету.

Отчет в Delphi – это виртуальный образ бумажного отчета, который в дальнейшем без изменений воспроизводится на принтере. Отчеты в основном ориентированы на вывод результатов анализа таблиц баз данных.

В состав Delphi 7 в качестве основного средства входит генератор отчетов Rave Report 5.0. В Delphi на странице компонентов Rave имеется набор компонентов этого генератора. С их помощью можно разработать отчет любой сложности.

Рассмотрим технологию создания простого отчета по данным одной таблицы базы данных. Будем считать ,что в папке с проектом находится база данных. Для соединения с ней применим технологию ADO. Создадим форму вида, как показано на рис. 1.

Дополнительно разметим на форме компонент RvDataSetConnection, расположенный на странице Rave. Компонент предназначен лпя связ будущего отчета с базой данных. Для свойства DataSet выберем значение ADOTable1.


Рис.1 Окно формы для разработки отчета

Далее спроектируем внешний вид отчета. Для этого вызовем визуальный проектировщик отчетов через команду главного меню Delphi:

Сервис / Rave Designer

Окно проектировщика отчетов показано на рис.2. В левой верхней части окна расположена панель кнопок, Ниже располагается инспектор объектов. В верхней правой части расположена Панель инструментов. В центральной части окна видна страница проекта будущего отчета.


Рис. 2 Окно проектировщика отчетов

Далее выполним команду главного меню проектировщика отчетов

File / New Data Object

В появившемся окне типов связи выберем строку Data Connection (Рис.3) выберем продолжение Direct Data View (Рис.4). Затем в следующем окне выберем DataView1 и RvDataSetConnection и завершим диалог.

Далее с помощью Rave-мастера подготовим вид отчета, например, в виде табличной формы. Для этого в главном меню проектировщика выполним команду:

Tools / Report Wizarts / Simple Table

(Сервис/Мастер отчетов/Простая таблица)

Затем в следующем окне из списка выберем название объекта DataView1 (‘этот объект определяется структурой связи с базой данных).

Затем в следующем окне (Рис 5) отметим поля таблицы, которые мы хотим увидеть в отчете. Выберем все поля и завершим генерацию отчета. После генерации увидим структуру сформированного отчета в центре виртуальной страницы (Рис.6).

Дл запуска отчета из режима проектирования следует на панели проектировщика щелкнуть по кнопке Execute report. В появившемся окне выберем PreView (Предварительный просмотр) (Рис.7).

Созданный проект отчета можно сохранить, например, в папке с данными проектом. Файл отчетом имеет обозначение имя.rav.


Рис.3 Окно связи с данными


Рис.4. Окно выбора связи с данными


Рис. 5 Окно выбора полей таблицы, участвующих в отчете


Рис. 6 Вид отчета после начальной генерации


Рис.7 Окно выбора режима вывода отчета


Рис.8 Отчет в режиме предварительного просмотра

Далее добавим в форму компонент RvProject1 (страница Rave).Для свойства ProjectFile выберем файл, в котором мы ранее сохранили созданный отчет Клиенты.

С целью запуска отчета в будущем приложении создадим в форме кнопку и в процедуре, запускаемой нажатием этой кнопки, запишем оператор RvProject1.Execute. Далее запустим приложение и проверим запуск отчета

Таким образом, мы рассмотрели технологию создания в Delphi простейшего отчета по данным таблицы БД и организацию его запуска из приложения.

Отчеты можно создавать на основе различных данных. Для отчетов на основе таблиц мы применяли компонент RvDataSetConnection. При создании отчетов на основе данных запросов используют компонент RvQueryConnection. Можно также создавать отчеты на основе данных обычных файлов или массивов. Для этого используют компонент RvCustomConnection.

Читайте также: