понедельник, 19 марта 2012 г.

Урок 35. Оборотная ведомость. Печать отчета

Если Вы, изучив предыдущие уроки, получили в свое распоряжение файл Excel, Вам не составит труда вывести его на печать. Но, не всегда такой вариант получения отчета приемлем.

Для конструирования отчетов существует ряд средств. Я не берусь здесь обсуждать их достоинства и недостатки. Так исторически сложилось, что я пользуюсь платной версией Fast Report.

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

Почему именно FastReport? Посмотрите здесь. Не только из гордости за отечественного производителя, еще и за практически безграничные возможности.

Установка компонентов FastReport не должна вызвать никаких трудностей. После установки, на Tool Palette появится ряд вкладок.

Разместите на форме два компонента, с вкладки FastReport:

TfrxDBDataset - источник данных для отчета, TfrxReport - конструктор отчета.

Теперь необходимо немного подготовиться и временно включить:

1. Форма MainFrm: ADOConnection  - Connected = True (если не задана строка подключения, задать ее).
2. Форма OborotFrm, компонент CDS - свойство Connection = MainFrm.ADOConnection1 (т.е. связать этот компонент с ADOConnection  на главной форме) и указать свойство TableName = Oborot. Собственно, это все проделывается программно, но нам нужно временно для создания отчета.

Не забудьте по окончании создания отчета очистить значения этих свойств.

Настройте компонент TfrxDBDataset, указав его свойство DataSet:

А затем два раза щелкните по компоненту TfrxReport, чтобы перейти в конструктор отчета.
Первое, что необходимо сделать - выбрать меню Report - Data и назначить источник данных для отчета, как показано на рисунке:


Затем - развернуть страницу на Landscape (альбомную) в меню File - Page Settings, т.к. отчет наш "широкий".

Добавить "бэнды" - так называются области для размещения в них различных данных и группировке этих данных, как минимум - два - ReportTitle (заголовок отчета) и MasterData (мастер - для вывода данных отчета), связав последний с источником данных.


Сохраните свой макет под именем Oborot.fr3.

Теперь настало время дать отчету заголовок, нажав на пиктограмму "ab":



Форматируйте надпись подобно тому, как Вы это делали в MS WORD, здесь инструменты очень похожи:


Перетащите одно поле для начала на MasterData (можно добавить еще заголовок страницы (PageHeader), где разместить заголовки колонок отчета):


Опция Create caption удобна, но не в нашей языковой зоне: подписи = имена полей на латинице, так что подписи придется сделать ручками.

Сохраните и закройте конструктор. Теперь нужно в Popup меню формы добавить новый пункт, по которому будет вызываться отчет:


procedure TOborotFrm.N2Click(Sender: TObject);
begin
  // Вывод предварительного просмотра отчета
  frxReport1.ShowReport(True);
end;

Если все сделано правильно, на этом этапе Вы получите список счетов с заголовком "Оборотная ведомость".

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


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

Далее я покажу один из способов передачи данных посредством переменных в отчет.

Добавьте перед строкой  frxReport1.ShowReport(True) ровно такую же строку, какой задавался период при импорте отчета в Excel:

frxReport1.Script.Variables['Period']:='Период: '+FormatDateTime('dd/mm/yy',Date_N.Value)+' - '+FormatDateTime('dd/mm/yy',Date_K.Value);  
здесь Period - имя переменной, которую нужно разместить в конструкторе отчета в текстовом поле (memo) в квадратных скобках:


Результат, прямо скажем еще далек от совершенства:


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

Если не сможете разобраться - пишите (координаты Вы найдете через страницу "Обо мне"), и тогда будем разбираться вместе.

А.В.






Комментариев нет:

Отправить комментарий