Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» FastReport

Автор: Man_Without_Face
Дата сообщения: 25.07.2012 11:33
Добрый день!
Вывожу итоговую сумму по группе в заголовок группы:
[more]
procedure GroupHeader1OnBeforePrint(Sender: TfrxComponent);
begin
if Engine.FinalPass then
begin
Memo23.Text := Get(FloatToStr(<BDEQuery1."rc_sd_objectnumber">) + 'cn');
Memo26.Text := Format('%2.n', [Get(FloatToStr(<BDEQuery1."rc_sd_objectnumber">) + 'money')]);
end;
end;

procedure GroupFooter1OnBeforePrint(Sender: TfrxComponent);
begin
Set(inttostr(<BDEQuery1."rc_sd_objectnumber">) + 'cn', FloatToStr(SUM(<BDEQuery1."cn">, MasterData1)));
Set(inttostr(<BDEQuery1."rc_sd_objectnumber">) + 'money', FloatToStr(SUM(<BDEQuery1."money">, MasterData1)));
end;
[/more]
Целочисленное поле выводится нормально. С запятой выдает ошибку:
GroupHeader1: Ошибка в выражении '2259,87':';' expected
Что не так делаю?
Автор: mdid
Дата сообщения: 25.07.2012 11:49
Man_Without_Face
скорее всего что у вас неверный формат вывода...гляньте что стоит у компонента который выводит сумму

Автор: Man_Without_Face
Дата сообщения: 25.07.2012 11:55

Цитата:
скорее всего что у вас неверный формат вывода...гляньте что стоит у компонента который выводит сумму

%2.n
Пробовал вообще форматирование убрать, та же ошибка.
Не отрабатывает именно Get:
Format('%2.n', [Get(FloatToStr(<BDEQuery1."rc_sd_objectnumber">) + 'money')]);
или
Get(FloatToStr(<BDEQuery1."rc_sd_objectnumber">) + 'money');
Автор: mdid
Дата сообщения: 25.07.2012 11:59
у меня так..может поможет...


Код: Set(<frxDBDataset1."GroupRN">, SUM(<frxDBDataset1."AppSum">,MasterData1,1));
Автор: Man_Without_Face
Дата сообщения: 25.07.2012 12:09
mdid
Так то и у меня отрабатывает, но мне нужно выводить три поля, т.е. должно быть три разных переменных
rc_sd_objectnumber + 'cn'
rc_sd_objectnumber + 'litr'
rc_sd_objectnumber + 'money'

P.S. Разобрался:
Set(inttostr(<BDEQuery1."rc_sd_objectnumber">) + 'money', SUM(<BDEQuery1."money">, MasterData1));

FloatToStr здесь не нужен.

Автор: Man_Without_Face
Дата сообщения: 25.07.2012 16:47
Не срабатывает для вышеописанной задачи форматирование для целочисленных значений:
Memo23.Text := Format('%2.n', [Get(IntToStr(<BDEQuery1."rc_sd_objectnumber">) + 'cn')]);
для чисел с запятой все работает:
Memo24.Text := Format('%2.2n', [Get(FloatToStr(<BDEQuery1."rc_sd_objectnumber">) + 'litr')]);

Были обнаружены следующие ошибки:
Forman '%2.n' invalid or incompatible with argument
Автор: neznayka3
Дата сообщения: 26.07.2012 12:19
с некоторого времени стала вываливатсья ошибка
Цитата:
Язык '' не найден
перекомпилил - ошибка не исчезла. появляется при загрузке отчета и при закрытии окна sql запроса.
Автор: Man_Without_Face
Дата сообщения: 27.07.2012 15:58
Возник такой вопрос:
Есть например пять отчетов, мне нужно их вывести в одной вьюхе, возможно ли такое? Subreports не подойдет.
Автор: mdid
Дата сообщения: 27.07.2012 16:05
Man_Without_Face
хз что вам надо...но наверно надо создать 6-ой отчет который будет содержать данные 5...если вам надо что бы отчеты были отдельные...делайте отдельные вьюхи...сложно что то посоветовать
neznayka3
удалите и установите заново...убедившись что выбранный язык присутствует
Автор: Man_Without_Face
Дата сообщения: 27.07.2012 16:24
mdid
Будет Dll с отчетами. Каждая функция будет вызывать один отчет.
Но должна быть еще и возможность (функция) загрузить все отчеты сразу для печати с предварительным просмотром, а не печатать/просматривать по одному. Причем отчеты будут выбираться, т.е. не выбранные отчеты не должны отрабатывать.

П.С. Вроде нашел в руководстве программиста:
[more]
В некоторых случаях требуется организовать печать нескольких отчетов одним заданием, или формирование и отображение нескольких отчетов в одном окне просмотра. Для этого в FastReport есть средства, позволяющие построить новый отчет в дополнение к уже существующему. Метод TfrxReport.PrepareReport имеет один необязательный параметр ClearLastReport: Boolean, по умолчанию он равен True. Этот параметр определяет, надо ли очищать страницы ранее построенного отчета. Следующий пример показывает, как построить пакет из двух отчетов:


Pascal:

frxReport1.LoadFromFile('1.fr3');

frxReport1.PrepareReport;

frxReport1.LoadFromFile('2.fr3');

frxReport1.PrepareReport(False);

frxReport1.ShowPreparedReport;

C++:

frxReport1->LoadFromFile("1.fr3");

frxReport1->PrepareReport(true);

frxReport1->LoadFromFile("2.fr3");

frxReport1->PrepareReport(false);

frxReport1->ShowPreparedReport();


Мы загружаем первый отчет и строим его, не показывая на экране. Затем загружаем второй отчет в этот же объект TfrxReport и строим его с параметром ClearLastReport = False. При этом отчет добавляется к ранее построенному. После этого мы показываем готовый отчет в окне предварительного просмотра.

[/more]
Автор: mdid
Дата сообщения: 27.07.2012 16:29
ну так 6-ой отчет вам в помощь...так же можно этого избежать если перед выводом на печать заполнить один DataSet данными из 5..но быстрых методов я не знаю..это только циклом наверно
Автор: dzh2000
Дата сообщения: 05.09.2012 15:29
Как создать отчет Master-Detail
Автор: mmlm10
Дата сообщения: 05.09.2012 15:35
Как и представлено на правой картинке в Detail добавить поле из Master и выставить у него HideDuplicates = True
Автор: dzh2000
Дата сообщения: 05.09.2012 15:39

Цитата:
Как и представлено на правой картинке в Detail добавить поле из Master и выставить у него HideDuplicates = True

Не все так просто. В ячейках master может выводиться многострочный текст по всей высоте ячейки.
Автор: mmlm10
Дата сообщения: 05.09.2012 15:45
Хм, а поиграть с StretchMode? Т.е. Установить для ячейки Master StretchMode = smMaxHeight?
Автор: dzh2000
Дата сообщения: 05.09.2012 15:48

Цитата:
Хм, а поиграть с StretchMode? Т.е. Установить для ячейки Master StretchMode = smMaxHeight?

Она растянется только по высоте бэнда Detail Data, то есть не растянется вовсе, и продублируется на все detail-записи.
Пока единственный вариант - оформить Detail Data как Subreport и расположить на Master Data. Высоту ячейки master рассчитывать в зависимости от числа ячеек detail.
Автор: Man_Without_Face
Дата сообщения: 13.09.2012 14:29
Есть композитный отчет, в него загружаю n-е количество отчетов из файлов. На всех стоит галочка Print to previous page, т.е. если остается место на листе - то печатается следующий отчет. Отчеты бывают как книжные, так и альбомные. Если альбомный попадает на книжный, то он печатается с новой страницы. А если книжный попадает на альбомный, то он печатается на нем, но печать идет до упора страницы, получается каша. Кто с этим сталкивался и как это побороть?
Автор: radistOK777
Дата сообщения: 13.09.2012 14:41
Добрые люди, подскажите пожалуйста как изменить цвет текста по услови.:

На форме есть MasterData1 и MasterData2, и в том и в другом есть поле DataTO которое выбирается из таблицы.
Как можно сделать так что бы в MasterData2 проверялось условие: если поле DateTO (дата) меньше текущей даты, то изменить цвет поля на красный.
Отчёт выводится с формы Delphi.

Заранее благодарен за подсказку.
Автор: mmlm10
Дата сообщения: 13.09.2012 14:58
radistOK777

Надо смотреть в сторону условного выделения текста, т.е TfrxMemoView, которое надо раскрашивать.
Вызывается нажатием кнопку "Условное выделение" на панели инструментов дизайнера


Автор: mdid
Дата сообщения: 13.09.2012 15:05
radistOK777
так же вам поможет событие OnBeforePrint этой мемки..там проверяете условие...и красите как хотите
Автор: radistOK777
Дата сообщения: 13.09.2012 16:16
mdid
Я пытался найти это условие, но или не там искал или не то нажимал: OnBeforePrint имеется ввиду в компоненте frxReport ? если да, то как правильно обратиться к проверяемому полю, по имени у меня не получилось
Автор: mmlm10
Дата сообщения: 13.09.2012 17:49
radistOK777

Цитата:
OnBeforePrint имеется ввиду в компоненте frxReport ?

Нет, того текста, который надо раскрашивать
Автор: krapotkin
Дата сообщения: 13.09.2012 22:19
radistOK777
речь идет не о событиях компонента Report на форме Delphi
в конструкторе отчетов тоже есть аналогичная штука
выбираем мемку, создаем для нее событие. Текст будет на страничке Код.
Вот там на псевдо-паскале можно написать все что нужно. Примеры написания есть в документации.
Автор: radistOK777
Дата сообщения: 14.09.2012 12:05
Самое интересное в том что выделив это поле вкладка Events почему-то открывается
Автор: miwa
Дата сообщения: 17.09.2012 10:59
radistOK777
А с чего бы ей не открываться?

Добавлено:
radistOK777

Цитата:
Как можно сделать так что бы в MasterData2 проверялось условие: если поле DateTO (дата) меньше текущей даты, то изменить цвет поля на красный.  

Упс, слона-то я и не заметил.

В этом случае, как уже сказал mmlm10 надо использовать условное выделение; написания обработчика события для такой задачи не требуется. А в документации к фастрепорту даже есть хороший пример как это делается. С картинками.
Автор: radistOK777
Дата сообщения: 19.09.2012 15:11
Не было времени заняться этим вопросом и вот снова к нему вернулся, подскажите плз неумелому как это событие создать, передо мной открытая форма с настроенным отчётом, надо на DateTO правой кнопкой нажать для создания события или куда залезть?
Автор: jonikDk
Дата сообщения: 19.09.2012 15:55
radistOK777
что такое DateTO ?
Автор: mdid
Дата сообщения: 19.09.2012 16:05
radistOK777
для обработки событий есть вкладка события...посему тыкните лкм на контроле а потом перейдите на вкладку "события"
Автор: radistOK777
Дата сообщения: 20.09.2012 11:49
1) DateTO - это поле в моей базе которое я хотел использовать и изменять цвет в зависимости от условия.
2) Разобрался я почему у меня не работали некоторые поля и я не мог написать событие, я использовал Delphi XE2 и в нем есть встроенный Fast Report который обрезан хуже чем Basic и Trial версии.

Всем спасибо кто откликнулся.
Автор: jonikDk
Дата сообщения: 20.09.2012 14:04

Цитата:
1) DateTO - это поле в моей базе которое я хотел использовать и изменять цвет в зависимости от условия.

на поле из таблицы БД событие не настроишь, а вот в компоненте TfrxMemo есть события и свойства

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859

Предыдущая тема: CBuilder и копирование файла


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.