.

лого статьиПриветствую, всех.  (Кто забрел в это уголок сети Интернет). Сегодня я бы хотел вам рассказать как можно быстро и качественно сделать отчет, через Fast Report в Delphi XE.

Предисловие

Думаю, читая эти строки те, кто не знаком с Fast Report, подумают что типа «какой-то отчет..», «да мне это не пригодится» и «отчеты для бухгалтеров». Прошу вас дочитайте эту статью до конца и думаю, вы наконец поймете, что такое Fast Report и что понятие «отчет» - включает в себя очень многое. Я уже немного рассуждал на эту тему в своей первой статье о Fast Report.
Перейдем собственно к делу. Задача следующая: Вам необходимо, например, выводить список данных из таблицы или результат выборки из базы данных. Причем не просто вывести список на экран в таблице DBGrid, а так же сделать экспорт в файл. В виде красивого «отчетика», чтоб конечный пользователь пищал от удовольствия рассматривая отчет.
Вообще раньше задача, когда нужно, что-то выводить в файл была  моя самая не любимая.  Сейчас объясню почему. Раньше я реализовал все по средством «шаблонов». «Шаблон» - это файл Excel, (да-да именно Excel с ним проще работать ) который уже размечен и подготовлен для ввода данных. Например, в моей программе на работе есть шаблоны заявления, которое заполняется данными из базы данных.  Вот пример такого  файла.
С «шаблоном» я работал через OLE в Delphi – это реализуется очень просто. Позже напишу статью на тему OLE в Delphi. Так же если нужно просто вывести данные в таблицу Excel, есть еще один компонент, он работает быстрее OLE.

Но у данного подхода есть и минусы.

- «Шаблон» - это лишний файл в составе вашего проекта. Который нужно будет обновлять или добавлять в дистрибутив.
-Для «шаблона» важно чтобы на компьютере стоял «Microsoft Office». Причем Microsoft Office должен быть активирован, иначе при работе через OLE «будут проблемы».
-Вообще само неудобно работы. Например, чтобы вам вывести значение нужно указать адрес ячейки. Когда вам нужно заполнить заявление, то появляется куча однообразного года. Не раз сталкивался с ситуацией, когда нужно, что-то исправить и начинаешь перелопачивать кучу кода в поисках нужной ячейки.
-Неудобство для конечного пользователя. Например, выводите вы на распечатку заполненное заявление или договор. Для этого просто открывается «шаблон» и программно заполняется. Оператор замечает, что ошибся при вводе данных и хочет исправить их прямо в шаблоне. Но обратной связи нет. А то, что он забудет внести изменения в базу данных – это практически гарантированно. Вот еще момент.
- Он хочет распечатать документ, и тут ему нужно искать меню файла искать меню принтера. При использовании Fast Report в предпросмотре (пример на картинке в конце статьи) есть кнопка печати, которая, прям на самом видном месте.

Ну как уже интересно как избавиться от всех описанных минусов? В довершение я бы хотел сказать, что при использовании Fast Report мое время разработки всяких отчетов из программы сократилось в 3-4 раза. Время исправления отчета под новые требования так вообще раз в 5.

Наш первый отчет о сотрудниках….

Представим, что мы работаем в отделе кадров одного института «Ученье свет!!!». И вот начальник ставит задачу: сделать специальную маленькую программу для вывода отчета о сотрудниках нашего института.
Создадим новый проект.
Я уже предварительно настроил подключение к табличке с данными. Бэкап таблицы скачать здесь.
Для начала из вкладки «FastReports 4.0» бросим на форму два компонента: frxDBDataset1 и frxReport1.

проект отчета

frxDBDataset1 – компонет для подключения к отчету источника данных. В нашем случае это табличка с данными.

frxReport1- это собственно сам отчет. При двойном клике на него откроется визуальный дизайнер отчетов.

В frxDBDataset1.DataSource указываем наш DataSet. Маленькая хитрость. При формировании отчета я советую сразу в Query выполнить нужный вам запрос. То есть, активировать подключение и Query.Active:=True. Позже я объясню зачем.
Откроем визуальный дизайнер отчета (открывается после двойного клика по frxReport1).

дизайнер отчета Fast Report

Перед тем как перейти к формированию отчет разберем несколько понятий.
меню Fast Report1) Бэнд – это закрепленная область на листе. Внутри которой можно размещать дополнительные элементы отчета : лого, реквизиты, название, табличку данных и т.д.
Меню бэнда располагается в левом меню. У меня тут меню на русском, поэтому я думаю назначение каждого элемента пояснять нем смысла. Кроме «Подвал страницы», «Подвал отчета» - это самая нижняя часть страницы или отчета. «Подвал страницы» - можно и нужно использовать для вывода номер страницы, для этого есть «системные переменные» о них ниже. В «Подвал отчета» - можно выводить подписи. Например, у вас «Акт о передачи чего-то там». Заранее вы не знаете, сколько у вас будет страниц в акте поэтому есть смыл размещать подписи сторон в бэнд «Подвал отчета». То есть сколько бы страниц в отчете не было подписи всегда будут конце отчета.
Отдельно хотелось бы сказать про бэнд «Данные Х уровня». В этот бэнд выводятся данные из DataSource. Ниже я более подробно рассказу про это тему.
2) Memo - поля вывода текста. (Менюшка с иконкой буквы «А»).
3) Picture – картика в отчете. (Идет сразу после Memo). В этом элемент подгружается картинка которая будет использоваться в отчете.

Сформируем наш первый отчет.
В после того как вы откроете визуальный дизайнер отчета, пред вами будет чистый лист. Начнем с того что добавим бэнд «Заголовок отчета».

бэнд заголовок отчета fast report

В этой области мы поместим надпись с наименование отчета и логотип нашего института. Начнем с логотипа института.
Помещаем в бэнд объект Picture.

Добавление лого Fast Report

В диалоговом окне «Картинка» выбираем картинку логотипа и нажимаем зеленую галочку. Рядом с логотипом поместим надпись с названием нашего института, реквизиты института.

заголовок отчета Fast Report

После того как мы подготовили заголовок перейдем к формированию таблицы данных. Предварительно в меню «Отчет(Report) -> Данные…(Data…)» выберем (в открывшемся окне) источник данных - наш frxDBDataset1.

добавление источника данных Fast Report

Fast Report позволяет подключать сразу несколько источников данных к одному отчету. Добавляем в отчет бэнд данных. Вам будет автоматически предложено выбрать источник данных для этого бэнда данных.

источник данных для бэнда

Для начала мы сделаем шапку нашей таблички. Для того чтобы шапка была только на первой странице, размещаем ее в бэнде заголовка отчета. Надписи делаем из Memo, причем ширина объекта приравниваете к ширине колонки таблицы. Выделяем объект Memo и нажимаем меню границы Fast Report.

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

Теперь во вкладках выберите первую вкладку «Поля БД». Помните я выше писал, что запрос SQL, который хотите использовать лучше сразу вставить в Query. Вот сейчас он нам пригодился. Если вы сделали все как я написал, то во вкладке вы увидите список полей. Далее просто перетаскиваем нужное поле в бэнд данных и подгоняем его под ширину как у колонки в заголовке отчета.
Во второй вкладке «Переменные», берем системную переменную «Line#» - эта переменная нам необходима для нумерации строк в бэнде данных. «Line#» - будет выполнять роль колонки порядкового номера в таблице. Важный момент… Высота бэнда данных должна равнять высоте находящихся, в нем объектов. То есть нижняя граница должна прилегать к нижней границы объектов. Если этого не сделать, то каждая запись будет выводиться отдельно.
Вот что у вас должно получиться.

Готовый отчетик в дизайнере Fast Report

Теперь чтоб вывести отчет закрываем визуальный дизайнер отчетов Fast Report. Добавляем на форму кнопку «Показать отчет». Ниже привожу код события клика по кнопке.

procedure TForm1.ButtonReportClick(Sender: TObject);
begin
frxReport1.ShowReport;
end;

Вот так будет выглядеть отчет.

Готовы отчет Fast Report

Вроде неплохо выглядит))) Вот и все. Подобный отчет вы можете сделать за 15 минут. На этом я заканчиваю свой рассказ.
Скачать бэкап таблички данных.
Скачать отчет файл *.fr3. Можете открыть файл в визуальном дизайнере отчета Fast Report.
В следующих статьях я покажу как можно программно работать с объектами, выводить на печать массивы данных и еще много всяких приколюшек.
Жду с нетерпением ваших комментариев… С уважением, ваш Shinobi.

8 комментариев

  1. Павлен

    Хорошее начало. К сожалению почти всегда заканчивается введением, поэтому надеюсь что вы будете продолжать подобные статьи.
    Для новичка можно попробовать Демки от FastReporta.
    Было бы интересно, если бы вы рассказали как вы храните отчёты. Рискну предположить что в базе.
    Вот этой информации мало, но она наиболее интересная в работе с FastReport.

    Ответить
    • admin_shinobi

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

      Ответить
      • Павлен

        Конечно читал статьи, просто я сам работаю с FastReport с 2011 года. Да срок маленький, но на себе ощутил всю мощь этого продукта. Как всегда у организации нету денег на покупку нормальной версии, поэтому приходилось долго искать нормальный дистр:) Начальник, настаивал сначала на использовании Crystal Report, хотя у него нету интеграции с Delphi и только после того как показал недельный результат дал добро на использование.
        Но уже пару раз напарывался на грабли, когда жёстко забивал какие-то константы или логику в отчёт а потом это нужно было срочно менять. Т.е. сегодня считаем по одному алгоритму а завтра по другому.
        Потом пришёл к тому что отчёты нужно хранить в базе, но тут возникает момент что нужен какой-то дизайнер, и каким-то образом нужно настраивать ДатаСеты, что-бы можно было организовать предварительный просмотр отчёта. К сожалению пока мои подходы меня не особо устраивают, и буду рад любой информации по этой теме.

        Ответить
        • admin_shinobi

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

          Ответить
  2. Павлен

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

    Ответить
    • admin_shinobi

      Да это большой разницы не имеет, везде могучий и великий SQl))

      Ответить
  3. Сергей

    Еще на видеопримерах посмотреть очень хотелось)

    Ответить
  4. Евгений

    «Маленькая хитрость. При формировании отчета я советую сразу в Query выполнить нужный вам запрос» — А если так не сделать? У меня есть программа, где задается период. И выводятся записи за этот период. Поэтому сразу запрос я активным не делаю. Соответственно, в окне справа не появляются поля с данными. И как тут быть?

    Ответить

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *