Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2011, 05:06   #1
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию FastReport создание отчета программно

Здравствуйте.
Как можно создавать отчет в FastReport программно минуя дизайнер.
Например для решения след задачи.
Есть таблица с полями 1..10 и скажем пользователь может сделать выборку любого сочетания полей. Если решать такой вопрос через дизайнер то придется создавать кучу отчетов с учетом всех возможных вариаций(((
Отсюда вопрос как сделать отчет программно если известны выбираемые поля пусть это будет поле с именем 1 и 2.
Lokos вне форума Ответить с цитированием
Старый 28.03.2011, 05:41   #2
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

в инструкции к FastReport 3.0 Нашел следующее

Код:
var
Page: TfrxReportPage;
Band: TfrxBand;
DataBand: TfrxMasterData;
Memo: TfrxMemoView;
K:TPrinterOrientation;
begin
   K:=TPrinterOrientation.poLandscape;
   DataSet.Close;
   DataSet.SQLs.SelectSQL.Text:='select * from SOTRUDNIKI';
   DataSet.Open;
   frxreport.Clear;
   frxreport.DataSets.add(rpDataset);//вот только метода add нету
   Page:=TfrxReportPage(frxreport);
   Page.CreateUniqueName;
   Page.SetDefaults;
   Page.Orientation:= K;
   Band := TfrxReportTitle.Create(Page);
   Band.CreateUniqueName;
   Band.Top := 0;
   Band.Height := 20;
   Memo := TfrxMemoView.Create(Band);
   Memo.CreateUniqueName;
   Memo.Text := 'Hello FastReport!';
   Memo.Height := 20;
   Memo.DataSet := rpDataset;
   Memo.DataField := 'id';
   Memo.SetBounds(0, 0, 100, 20);
   frxreport.ShowReport;
end;
Вылетает ошибка при попытке добавить источник данных(((
Lokos вне форума Ответить с цитированием
Старый 28.03.2011, 05:52   #3
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

Цитата:
Сообщение от Lokos Посмотреть сообщение
в инструкции к FastReport 3.0 Нашел следующее

Код:
var
Page: TfrxReportPage;
Band: TfrxBand;
DataBand: TfrxMasterData;
Memo: TfrxMemoView;
K:TPrinterOrientation;
begin
   K:=TPrinterOrientation.poLandscape;
   DataSet.Close;
   DataSet.SQLs.SelectSQL.Text:='select * from SOTRUDNIKI';
   DataSet.Open;
   frxreport.Clear;
   frxreport.DataSets.add(rpDataset);//вот только метода add нету
   Page:=TfrxReportPage(frxreport);
   Page.CreateUniqueName;
   Page.SetDefaults;
   Page.Orientation:= K;
   Band := TfrxReportTitle.Create(Page);
   Band.CreateUniqueName;
   Band.Top := 0;
   Band.Height := 20;
   Memo := TfrxMemoView.Create(Band);
   Memo.CreateUniqueName;
   Memo.Text := 'Hello FastReport!';
   Memo.Height := 20;
   Memo.DataSet := rpDataset;
   Memo.DataField := 'id';
   Memo.SetBounds(0, 0, 100, 20);
   frxreport.ShowReport;
end;
Вылетает ошибка при попытке добавить источник данных(((
Проблему с DataSet решил необходимо было добавить его в инспекторе объектов.
Появилась проблема с установкой ориентации листа
Код:
 K:=TPrinterOrientation.poLandscape;
 Page.Orientation:= K;
В документации указанно след образом
Код:
Page.Orientation := poLandscape;
данный способ не работает(
Так же вызывает ошибку доступа к не существующему адресу след строчка
Код:
 Page.SetDefaults;
заменил
Код:
 Page:=TfrxReportPage(frxreport);
на
Код:
 Page:=TfrxReportPage.Create(frxreport);
Все заработало, все таки отличие в версия ощутимо(((
Осталась одна проблема выводится только первая запись((( как сделать вывод всех записей которые были выбраны?

Последний раз редактировалось Lokos; 28.03.2011 в 06:05.
Lokos вне форума Ответить с цитированием
Старый 28.03.2011, 05:57   #4
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Я бы посоветовал вам обратить свой взор на работу с word, excel. Там все программно
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 28.03.2011, 07:12   #5
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

Цитата:
Сообщение от Sparkman Посмотреть сообщение
Я бы посоветовал вам обратить свой взор на работу с word, excel. Там все программно
Собственно отчет начал отображаться полностью просто необходимо было добавить Band MasterData и все стало отлично.

Но появились еще вопросы как сделать обрамление полей?
Lokos вне форума Ответить с цитированием
Старый 28.03.2011, 09:03   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Но появились еще вопросы как сделать обрамление полей?
.FrameTyp
Код:
  if Assigned(frReport1.FindObject('Memo21')) then
   frReport1.FindObject('Memo21').FrameTyp := 15;
а ещё можете посмотреть на
.FrameColor
.FrameWidth
.FrameStyle

по названиям понятно, для чего это...

А вообще, я бы создал отчёт в designtime, ручками нарисовал шапку, номера страниц, нужные источники данных и т.д.
поместил Band

А уже сам набор полей (frMemo) создавал в runtime.

p.s. у меня версия фастрепорт 2.55, но я думаю, что в 3.x свойства такие же..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.04.2011, 05:11   #7
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

что то так не канает попробовал след образом
Код:
 FioAgD := TfrxMemoView.Create(DataBand);
   FioAgD.CreateUniqueName;
   FioAgD.Height := 20;
   FioAgD.DataSet := DM1.rpDataset;
   FioAgD.DataField := 'ФИО АГЕНТА';
   FioAgD.SetBounds(0, 0, 190, 20);
   FioAgD.Frame.Typ//но значение подставить не знаю как
если подставить 15 то получается ошибка
[DCC Error] ViewData.pas(151): E2010 Incompatible types: 'TfrxFrameTypes' and 'Integer'

если создать переменную тип TfrxFrameTypes то работать с ней не получается
Lokos вне форума Ответить с цитированием
Старый 06.04.2011, 03:19   #8
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

Вообщем сделать это можно так
Код:
   FioAgD := TfrxMemoView.Create(DataBand);
   FioAgD.CreateUniqueName;
   FioAgD.Height := 20;
   FioAgD.DataSet := DM1.rpDataset;
   FioAgD.DataField := 'ФИО АГЕНТА';
   FioAgD.Font.Style:=[fsBold];//Выделяем жирным шрифтом
   FioAgD.SetBounds(0, 0, 190, 20);
   FioAgD.Frame.Typ:=[ftLeft,ftRight,ftTop,ftBottom];//Рисует рамку
Lokos вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание отчета Alexnoir Microsoft Office Access 11 16.02.2011 01:07
Создание отчета Deni55 Microsoft Office Excel 13 15.06.2009 14:53
Создание отчета! Deni55 Microsoft Office Excel 10 16.04.2009 14:04
Создание отчета!!! Viento Microsoft Office Excel 12 26.01.2009 09:26
Передача данных из сохраненного отчета FastReport в Delphi HIC БД в Delphi 12 12.11.2008 17:28