Архив номеров
Форум
Контакты

Быстрый и меткий: Fastreport как средство корпоративной отчетности

РЕАЛИЗОВАТЬ БАЗУ ДАННЫХ И ПРОГРАММУ ДЛЯ РАБОТЫ С НЕЙ - ЭТО ТОЛЬКО ПОЛДЕЛА. В БОЛЬШИНСТВЕ СЛУЧАЕВ НЕОБХОДИМО СРЕДСТВО, С ПОМОЩЬЮ КОТОРОГО ПОЛЬЗОВАТЕЛИ МОГЛИ БЫ ПРОСМАТРИВАТЬ ИЛИ ДАЖЕ САМОСТОЯТЕЛЬНО СОЗДАВАТЬ КАКИЕ-ЛИБО ОТЧЕТЫ И ВЫВОДИТЬ ИХ НА ПЕЧАТЬ. ДЛЯ НАШЕЙ СТРАНЫ, ПОЖАЛУЙ, ИДЕАЛЬНЫМ ВАРИАНТОМ ЯВЛЯЕТСЯ FASTREPORT.

Неоспоримое преимущество

Когда видишь такие разработки, как FastReport, начинаешь понимать, что наша страна реально поднимается вверх в области IT и может подняться еще выше, оставив позади не только Индию. А больше всего я рад потому, что родина этого пакета - мой любимый город Ростов-на-Дону.

Почему мы выбрали именно FastReport? Да, эта достаточно мощная, удобная и простая система, составляющая конкуренцию разработкам более именитых компаний. И все же, у FastReport есть одно очень серьезное преимущество на нашем рынке – русский язык в интерфейсе и доступность для конечного пользователя. Создать отчетность – это полбеды, но ведь с ней будете работать не вы, а простой офисный работник, который в английском языке может быть не силен. В таких случаях русский интерфейс является большим плюсом (кстати, не только для русскоязычного пользователя – моя не самая новая версия продукта содержит локализацию для 24-х языков).

Еще одним большим плюсом является хорошая документация, которая доступна в двух версиях – для разработчиков и для программистов. В ней есть практически все для хорошего старта, и простейшие отчеты вы сможете начать создавать уже через пять минут после знакомства с системой. Полный пакет документации занимает 6 мегабайт и поставляется в трех популярных форматах – chm, pdf и hlp. Остается только выбрать тот, который для вас удобнее, и можно приступать к изучению. Форматы chm и hlp пригодятся для получения быстрой помощи, а pdf удобен для распечатки.

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

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

Центр Вселенной

Создать отчет не так уж и сложно - достаточно поместить на форму компонент TfrxReport, дважды щелкнуть по нему, и вы попадаете в окно визуального редактора, в котором и строится отчет. Однако это не значит, что нужно плодить TfrxReport везде, где только можно. Это неэффективно по двум причинам:

  1. Чрезмерное расходование памяти из-за создания нескольких экземпляров компонентов отчетности. Если вы не перенесли весь код FastReport в динамические библиотеки (а это - лишние затраты времени), то память будет утекать достаточно быстро.
  2. Если формы отчетности разбросаны по разным модулям проекта, с ними сложнее работать, тем более в команде и при использовании системы совместной разработки кода, например, Visual SourceSafe.

Я бы рекомендовал создать отдельный модуль данных (DataModule) и поместить в него только один экземпляр компонента TfrxReport. Теперь, создавая отчеты, сохраняйте их в файл.

FastReport позволяет сохранять отчеты только в своем собственном формате (в файлах с расширением fr3), но и этого вполне достаточно.

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

Procedure PrintSomeReport(odsMain, odsDetail: TDataSet);
begin
frxMainData.DataSet:= odsMain;
frxDetailData.DataSet:= odsDetail;
frxRepInv.LoadFromFile('Имя файла отчета.fr3',true);
frxRepInv.ShowReport;
end;

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

Специально обученный

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

Смена принтера

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

В FastReport вывод происходит на принтер, определенный «по умолчанию» в Windows, если не указано обратного. Программная смена принтера выполнена не совсем элегантно, и чтобы разобраться с этим вопросом, мне пришлось заглядывать в исходные коды. Как выяснилось, имя принтера можно задавать двумя способами:

frxRepInv.PrintOptions.Printer:='имя принтера';
frxRepInv.Engine.Report.PrintOptions.Printer:='имя принтера';

Но этого недостаточно. После установки имени необходимо вызвать еще и метод SelectPrinter (странно, что это не делается автоматически).
Если же имеется реальная потребность указать имя принтера, но не устанавливать его (трудно представить), то можно добавить метод SelectPrinter, который в качестве параметра будет получать имя принтера, сохранять его в PrintOptions и устанавливать.

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

  1. Если принтер не установлен на данном компьютере, то он не будет выбран;
  2. SelectPrinter – это процедура, которая не возвращает результата, а значит, мы не узнаем, был ли выбран запрашиваемый принтер в качестве текущего или нет.

Обойти этот недостаток можно, если перед установкой имени принтера вызывать метод Clear (frxRepInv.PrintOptions.Clear). Этот метод сбрасывает настройки печати в default. После установки принтера следует проверить имя выбранного для отчетов принтера, а индекс текущего можно узнать так: frxPrinters.PrinterIndex.

Печать содержания

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

Для создания содержания необходимо использовать якоря (Anchor), которые устанавливаются программно.

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

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

На рисунке показана примерная форма того, как может выглядеть отчет. В поле [frxGroup."NAME"] будут выводиться названия категорий товаров. У меня это поле названо Memo1. Выделяем его и на закладке Events создаем событие OnBeforePrint. В этом событии пишем следующую строку кода:

procedure Memo1OnBeforePrint(Sender: TfrxComponent);
begin
Engine.AddAnchor(<frxGroup."NAME">);
end;

Здесь вызывается метод AddAnchor движка FastReport, который добавляет якорь. В качестве параметра передается имя якоря. Будет проще, если имя будет совпадать с названием категории товаров. Если вы делаете не прайс-лист, то в качестве имени указывайте то название группы, которое должно попадать в содержание.

Теперь переходим на закладку с формой содержания. В моем случае, здесь три колонки – артикул, имя группы и страница. Имя группы будет браться автоматически для данного набора данных, а вот страницу определить достаточно просто. Выделяем Memo-компонент, в который должен попадать номер страницы (у меня это Memo26), и создаем для него обработчик события OnBeforePrint. Здесь пишем следующий код:

procedure Memo26OnBeforePrint(Sender: TfrxComponent);
begin
Memo26.Text:=IntToStr(Engine.GetAnchorPage(<frxGroup."NAME">));
end;

Для определения номера страницы у нас вызывается метод GetAnchorPage, которому нужно передать имя якоря. Имена якорей в данном случае совпадают с именами групп товара, поэтому в качестве параметра передаем frxGroup."NAME", где находится имя группы.

Но это еще не все. Когда движок FastRoport формирует отчет, он один раз пробегает по всем данным и устанавливает якоря. При этом во время формирования содержания якорей еще не будет, поэтому номеров страниц в отчете вы не увидите. Чтобы все отобразилось корректно, необходимо включить двойной проход. Во время второго прохода все якоря уже будут расставлены, и в содержании появятся номера страниц. Итак, выбираем меню Report\Options и устанавливаем галочку в Double Pass.

Оптимизация

Оптимизировать что-то в самом FastReport достаточно сложно. Скорость его работы зависит в основном от скорости получения данных. Если ваш набор данных возвращает необходимое достаточно быстро, то и отчет появится мгновенно. Ну а если SQL-запрос, который возвращает данные, не оптимизирован, то отчет может формироваться очень и очень долго.

Поэтому стоит начать с оптимизации SQL-запросов.

Иногда отчету необходимо передать один или два параметра, которые выходят за пределы основного выходного набора данных. Допустим, что вы создаете отчет по заработной плате, и в него должны входить сотрудники определенного подразделения. Основной набор данных – это список сотрудников, но будет удобно, если в шапке отчета будет отображаться название подразделения. Из-за одного названия создавать набор данных (DataSet) неэффективно. В FastReport есть очень удобный механизм – переменные. Используйте лучше его. Эта тема очень хорошо описана в справочной системе.

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

Итого

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


Михаил Фленов
Профессиональный программист. Автор бестселлеров «Библия Delphi», «Программирование в Delphi глазами хакера», «Программирование на C++ глазами хакера». Некоторые книги переведены на иностранные языки и популярны в США, Канаде, Польше и других странах. Основал компании Heapar Software (www.heapar.com) и CyD Software Labs (www.cydsoft.com).

Обсуждение статьи
Логин:
Пароль:
Регистрации на сервере не требуется. Если у вас есть форумный логин, вы можете использовать его.
Если нету, то вы можете зарегистрироваться на forum.itspecial.ru
Обсуждение этой статьи на forum.itspecial.ru
Для отправки сообщения введите код, указанный на картинке
Заголовок
Сообщение

Guest guest@gameland.ru Отправлено: 13.05.2010 4:46:29
RE: Быстрый и меткий: Fastreport как средство корпоративной отчетности
I like this site very much Nice design site replica watches The high quality fake parmigiani watch With the high technology,
Guest guest@gameland.ru Отправлено: 29.09.2010 11:24:00
RE: Быстрый и меткий: Fastreport как средство корпоративной отчетности
All cheap jerseys' name and number are sewn-on and embroidery instead of printing. If you feel free to place the orders more than 10pcs and the orders could be different cheap mlb jerseys or cheap hockey jerseys mixing together and we are showing you free shipping
In our shop, meet your satisfaction is a easy job, we sell a wide range of replica nfl jerseys. We promise the quality of our product
Welcome to nfl jerseys store. As the world-leading NFL Jerseys store,we supply more than 700 high-quality merchandise jerseys of NFL. Our website is revising, I hope everyone can enjoy this layout. At the same time, we will keep on working hard for everyone to provide a better shopping experience. Our products can withstand the strict quality test.We not only sale NFL JERSEYS CHEAP,but also as a professional NFL JERSEYS WHOLESALE,expect you to choose.
Guest guest@gameland.ru Отправлено: 29.09.2010 11:24:20
RE: Быстрый и меткий: Fastreport как средство корпоративной отчетности
feidumo
Designer handbag price is too expensive to make some of us fear to tread, however, you are keen to have a designer handbag, in our shop everything is possible, we are a professional replica designer handbag seller, the favorable price and high quality are our promise to all the customers

The Rosetta StoneCD-ROM series is the premier choice for students seeking to master a foreign language on their computer. Intended for all serious students, these courses are equivalent to a year of college


Naruto, Sailor Moon and Velvet are all well-known in Asia,a lot od young poeple are crazy on this cartoon and playing cosplay.,naruto costumes, sailor moon costume, velvet cloak became the most popular costume among the youth

The cosplay sphere in Hong Kong are separated as two sides, with one mainly including Chinese citizens (sometimes Japanese also included) and one mainly including non-Chinese citizens (such as Europeans and Americans). The ambiance between two sides is different at all, since the status of Chinese-citizen-mainly side has been turning

It is our destination to make the Replica Gucci handbag as one part of your body, whenever you take it out. Every piece of our cheap Gucci handbag artwork has been checked very carefully in each process. Therefore, we are proud to promise our customers the most fabulous Gucci handbags.
As the leading brand of handbag, discount Gucci handbag has conquered the world not for a short time. www.gucci-hangbags.com provides a variety of collections fo Gucci handbag wholesale . All these elegant & luxury handbags will promote not only your appearance, but also your personal temperature.
Gucci handbag on sale! Buy gucci handbags, gucci bags, gucci wallets from our online. On eluxury-brands.com, you can find the exact luxurious goods, that's right for you. Start your shopping now
Guest guest@gameland.ru Отправлено: 29.09.2010 11:25:10
RE: Быстрый и меткий: Fastreport как средство корпоративной отчетности
feidumo Call it a wheel hub or a wheel bearing, at WheelHubPros.com, we have the correct one for your car in stock. The wheel hub bearing is a very important car part yet it often gets overlooked. Considering the wheel hub bearing is the only part that connects the wheels to the car body, it should never be overlooked.

A bad hub bearing can cause phantom noises or ghost vibrations at sporadic points during the drive. Many people respond by checking the brakes, struts, and springs. If they do not find any issues with those parts, they move on, chalking up the distractions to the car's "old age." In reality, changing the wheel bearing kits often fixes the issue.

Referred toEd hardy tee, more than is loved among young people , it is also popular brands and hot in Hollywood, Brittany Spears, Paris Hilton, David Beckham, Ewan McGregor, Usher ...... list goes on, even in Asia has been guiding stars the trend , Rain loves retro punkand Ed Hardy is the love in private , BoA, Lee Min Yu, Jolin worn Ed Hardy attend some parties, Lee Hom Heroes of Earth album in a diamond mesh cap is the Tiger Ed Hardy's masters merchandise.

In our shop ed hardy hoodies and ed hardy tattoo are in plenty of stock , welcome to our shop anytime

We promise the quality of our football jersey 100% polyster,100% embroidery, high quality, paypal accepthot jersey, fashion jersey, authentic FOOTBALL JERSEY.
We also developed samples and make customer orders according to the designated sample.


Discount designer shoesare very popular in the last two years
discount designer shoes are very popular in the last two years appears the shoes. When these shoes first appeared on fashion magazines have been strongly criticized that the lack of training in public, however, to the independence and freedom of modern women, this argument is naturally failed . Today, lively style make these shoes become very popular, no matter wore it shopping, parties, or even out of the workplace are the the generous nature of looks.
At the same time, we specialized in discount designer clothes


Anviz Biometric manufactures a complete range of biometric products including fingerprint time attendance, fingerprint access control,fingerprint lock, USB fingerprint reader, OEM fingerprint module etc.


Sneakersdropship.com guarantee each nike sneaker we sell with a good quality. No question will be asked to accept your return or exchange in case that you are not satisfied with the item you have bought from us. The item should be returned in their original condition and presentation box/pouch - unworn with the original wrapping within 30 business days of rec
Guest guest@gameland.ru Отправлено: 29.09.2010 11:28:00
RE: Быстрый и меткий: Fastreport как средство корпоративной отчетности
We have 24 hours service online. You can connect MSN. We are always at your service.
Karry international trade Co., LTD. is a global trade company, our products have been sold at home and abroad, in Beijing, We have agents both in China and Canada, our products include sunglasses wholesale and wholesale jewelry.Companies always follow the principle of honesty, headed management regulations.
We hope to establish long-term and stable cooperation relationship with our customers, develop international market.
Guest guest@gameland.ru Отправлено: 11.10.2010 4:43:01
RE: Быстрый и меткий: Fastreport как средство корпоративной отчетности
With the development of science and technology, home theater has become the general population, dvd box set market more active, DVD and CD look similar, they are the diameter of 120 millimeter, usually used to broadcast TV film, the standard definition of high quality music with great capacity data storage usage.
Страницы: << 1 >>

Теги: программирование


Keywords: zPOSTz zCODEz z10018z
Для Авторов: edit Lock delete Lock

Автор: Михаил Фленов
Дата: 08.12.2008 11:48:07©


Другие материалы номера
Unix desktop: бизнес-ниша систем *nix
Почему OpenBSD, почему Windows?
Корпоративный *nix: краткий обзор дистрибутивов
Open Source на корпоративном рынке: сравнение совокупной стоимости
Из Windows в Linux: некоторые аспекты переноса
Миграция в открытый стандарт: проблемы переноса
Cтроим мосты: запуск WIN-программ в среде UNIX
Армагедон XXI века: вред монополизма
Сеть своей головой: основные принципы планирования сети и обеспечения ее безопасности
Cколько стоит упасть и отжаться: вероятность тотального краха
Сетевая бюрократия: разработка пакета регламентирующих документов
Совершенно секретно: безопасность баз данных предприятия
Разделяй и властвуй: совместная разработка кода
Программирование в ACE: параллелизм
Проблематика сетевого анализа и аудита: оптимальные варианты для успешного решения сетевых проблем и превентивной проверки ЛВС
Эра дешевой, современной, ультразащищенной IP-телефонии: краткие рекомендации создателям новых монополий
Опрос: переход с Windows на Unix?
Живой офис: прорыв или крушение
На службе государства: СОРМ
Технологии и решения на рынке систем хранения данных
Физические аспекты информационной безопасности
Обзор коммутатора HP ProCurve Switch 1800-8G

В этом разделе
Введение в SOA. Часть 1. Проектирование информационных систем
Delphi и Oracle: разрабатываем утилиту для администрирования ORACLE
Языки, которые мы потеряли
IT-практикум: Delphi и AutoCAD. Организация связи двух популярных программных комплексов
Проблемы совместного доступа к данным в Oracle
Рубиновый кофе
Королевство Zend: Инструменты для профессионального php-разработчика
Отлажено до автоматизма: автоматизация Windows штатными средствами
Каркасы ACE
Программирование в ACE: обмен данными
Программирование в ACE: параллелизм
Разделяй и властвуй: совместная разработка кода
Быстрый и меткий: Fastreport как средство корпоративной отчетности


Хакер | GameLand | Мобильные компьютеры | Купи Камеру | Total Football | All Hockey | Onboarg Magazine | Хулиган | Sync
Total DVD | DVDxpert | Maxi Tuning | (game)land company | GamePost | Свой Бизнес


Rambler's Top100