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

» FastReport

Автор: Vital283
Дата сообщения: 01.11.2010 12:49
Не пойму как добавить новый отчет в FastReportServer.
В какую папку положить понятно,
а как сделать, чтобы он был доступен в Web?
Где что нужно прописать?
Автор: skvor22
Дата сообщения: 07.11.2010 22:25
Добрых суток всем!

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


function TForm2.frxReport1UserFunction(const MethodName: string;
var Params: Variant): Variant;
var a:Currency;
s,d :boolean;
begin
if MethodName = 'summaprop' then
Result :=UserUnit.MoneyToString(Params[0],Params[1],Params[2]);
end;

////////////////////////////////////////////////////////////////////////////////////////////////

procedure TForm7.SpeedButton1Click(Sender: TObject);
begin
Form2.frxReport1.AddFunction('UserUnit.MoneyToString(S:Currency;kpk:boolean;usd:boolean)');
Form2.frxReport1.DesignReport;
Form2.frxReport1.PrepareReport;
Form2.frxReport1.ShowReport;
end;

Delphi не ругается, но своей функции в "Дереве данных" FastReport не нахожу.
В чем ошибка? Как правильно подключить свою функцию для расчета ?
Автор: DroN_S
Дата сообщения: 08.11.2010 06:36

Цитата:
Как правильно подключить свою функцию для расчета ?

уже писал про это
читать http://www.reportingfor.info/ru/news.php?extend.76.4
Автор: skvor22
Дата сообщения: 08.11.2010 16:22
Нашел свою ошибку.
Правильно так:

function TForm2.frxReport1UserFunction(const MethodName: string;
var Params: Variant): Variant;
var
n:string;
begin
if MethodName = 'SUMMAPROP' then
begin
n:= UserUnit.MoneyToString(Params[0],Params[1],Params[2],Params[3]);
Result :=UserUnit.MoneyToString(Params[0],Params[1],Params[2],
Params[3]); // Функция печати прописью
end
end;

procedure TForm7.SpeedButton1Click(Sender: TObject);
begin
Form2.frxReport1.AddFunction('function SUMMAPROP (S:Currency;kpk:boolean;usd:boolean;prop:boolean):string',
'Дополнительные функции', 'Пропись(<Число>)/Возвращает Число прописью');
Form2.frxReport1.DesignReport;
Form2.frxReport1.PrepareReport;
Form2.frxReport1.ShowReport;
end;

В самом отчете в нужном поле ставлю так:[SUMMAPROP(123.5,False,False,False)] где 123.5 - пробные цифры для преобразования, False -управляющие параметры моей функции
DroN_S, читал эту ссылку. Это хорошо если работаешь только на одном ПК, и потом необходимо пере компилировать исходники скриптовой библиотеки FastScript. А если переходишь на новую версию FastScript, то нужно не забыть опять делать изменение скриптовой библиотеки.
В интернете почему-то в основном примеры не для FastReport 4. В примерах везде пишут:
if AnsiCompareText('Пропись', Name) = 0 then val := Propis(Trunc(frParser.Calc(p1)));
frAddFunctionDesc(nil, 'Пропись', 'Дополнительные функции', 'Пропись(<Число>)/Возвращает Число прописью');
а в FastReport 4 нужно
if MethodName = 'Пропись' then Result := MyFunc(Params[0]);
rxReport1.AddFunction('function MyFunc(s: String): String', 'Дополнительные функции', 'Пропись(<Число>)/Возвращает Число прописью'));
Потом гадаешь и думаешь почему ничего не получается из примеров. :-\
Автор: projection120
Дата сообщения: 09.11.2010 07:36
Добрый день. Подскажите пожалуйста как я могу при создании отчета в run-time указать длину поля мемо в сантиметрах. В design-time она указывается именно в сантиметрах а когда обращаюсь Memo.Width то уже в пикселях.
Автор: nunyutka
Дата сообщения: 10.11.2010 09:32
Проблема следующая: Отчет за период. Мне надо просмотреть все заказы которые выберутся за период и посмотреть какой в их номере 10-ый знак и в зависимости от этого стоимость этого заказа прибавить в соответствующую переменную.

Я делаю так, но это просматривает только 1 заказ

procedure ReportSummary1OnBeforePrint(Sender: TfrxComponent);

begin
k:=0;
f:='';
f:=Trim(<qryInfo."ORDNO">);
if f[10]='2' then k:=k+(<qryInfo.ORD_PRICE>/1.18);
if f[10]='3' then g:=g+(<qryInfo.ORD_PRICE>/1.18);

end;
Автор: f3ka
Дата сообщения: 10.11.2010 10:20
nunyutka
необходимо это проверять не ReportSummary1OnBeforePrint а в MasterDataOnBeforePrint
Автор: nunyutka
Дата сообщения: 10.11.2010 10:33
[q][/q]
Не проходит... У меня вообще закралось подозрение что я где то что то не доделываю.. потому что что пишу просто присвоение какого то значения в ReportSummary1OnBeforePrint и в MasterDataOnBeforePrint, а в отчет не выводится
Автор: f3ka
Дата сообщения: 10.11.2010 10:36
nunyutka
в смысле не выводиться значение? а оно (значение переменной) вообще где то в отчете в Memo есть?
Автор: nunyutka
Дата сообщения: 10.11.2010 10:43
конечно...у меня две такие функции уже оббилась не знаю что делать.. начнем с более простой...


f,s: string;

procedure MasterData1OnBeforePrint(Sender: TfrxComponent);

begin
s := <qryInfo."ORDNO">;

Delete(s,14,8);

end;
потом в отчете в мемке написано [s]
нет ни ошибки и в поле ничего не выводится
Автор: f3ka
Дата сообщения: 10.11.2010 10:58
nunyutka
на самом деле не все так просто на сколько я помню...
я бы советовал прочитать Руководство пользователя-Скрипт-Обращение к переменным из списка переменных отчета, а также Руководство пользователя-Построение отчетов-Переменные...
думаю проблема решится...
если нет оффлайн хелпа вот онлайн
Автор: nunyutka
Дата сообщения: 10.11.2010 11:00
благодарю... попробую найти что нибудь хорошего


Добавлено:
Поспешила.... неужели этот хелп реально может чем то помочь? все в общих чертах... по этим данным у меня все схоже
Автор: f3ka
Дата сообщения: 10.11.2010 11:32
nunyutka
переменная создана в списке переменных? в скрипте переменная в "<>" скобках? читаем руководство, сравниваем что у тебя, пробуем исправить, если не получается пишем сюда...
Автор: nunyutka
Дата сообщения: 10.11.2010 11:49
все переделала, хоть ошибок и не нашла.... щас выводит в мемки, но вот цикл не правильно работает.. он берет только первый заказ а мне надо что бы он просуммировал все заказы за выбранный период.... подскажете?

Добавлено:
и еще.. можно как то наложить ограничения на мемку что бы в ней выводилось только 12 символов
Автор: f3ka
Дата сообщения: 10.11.2010 12:30
nunyutka

Код:
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
...
f:=Trim(<qryInfo."ORDNO">);
if f[10]='2' then Set('k', Get('k')+(<qryInfo.ORD_PRICE>/1.18));
if f[10]='3' then Set('g', Get('g')+(<qryInfo.ORD_PRICE>/1.18));
...
Автор: nunyutka
Дата сообщения: 10.11.2010 12:50
Так и не работает
Автор: Andryshok
Дата сообщения: 12.11.2010 15:03
nunyutka так так так..... я делал так - дописывал свои функции в библу fastScript, перекомпилял пакеты фаст ркпорт, инсталлил в IDE а потом просто пользовал свою функцию в дизайн там так сказать, в вышем случае это может быть функция возвращающая ваше знчение если оно удовлетворяет условию, т.е если 10 число равно 10 то возвращаем цену иначе 0 - смысл вобщем такой sum (моя ф-я[поле БД])
unit в котором эти функции хранятся называется вроде iseruttil точно не вспомню
почитайте ТУТ
и ТУТ

Добавлено:
Если что - пишите в ПМ, - пример вышлю, а точнее юнит с функциями, просто щас нету под рукой

а мона еще проще - сравнить ваше 10 число функц IIF и если удовлетв усл. то занести куда либо или суммировать, можно даже прямо в мемку как вы называете, а потом делать с ними все что угоднго, в конце концов ведь можно установить мемку как невидимую и непечатаемую и просто пользовать ее значения
Автор: SIgor33
Дата сообщения: 12.11.2010 15:25
nunyutka
файл как сказал Andryshok можно использовать, только называется он fs_isysrtti.pas


Автор: nunyutka
Дата сообщения: 13.11.2010 09:34

Цитата:
а мона еще проще - сравнить ваше 10 число функц IIF и если удовлетв усл. то занести куда либо или суммировать, можно даже прямо в мемку как вы называете, а потом делать с ними все что угоднго, в конце концов ведь можно установить мемку как невидимую и непечатаемую и просто пользовать ее значения
это не проходит....
Автор: Andryshok
Дата сообщения: 13.11.2010 18:52

Цитата:
заказ а мне надо что бы он просуммировал все заказы за выбранный период.... подскажете?
Ладненько......., не проходит коль, возьмем ваш старый принцип и возьмем функцию sum (датасет) а вы видимо складываете значение одной мемки, вообщем, если в хотите и у мню будет желание и время - короче пишите в ПМ, я дам вам мыло вышлите вашу задачу со скринами и тд и я - объясню на пальцах как ее решить, хотелось бы еще узнать ваш опыт работы с фаст репорт
Автор: nunyutka
Дата сообщения: 16.11.2010 07:01
Andryshok

Цитата:
Andryshok
благодарю! щас эта задача отошла чуть в сторону, т.к. появилось кое что более срочное...Но скоро я к ней вернусь и ваша помощь будет бесценна для меня. Опыт работы в FastReport никакой..Все делаю в основном по хелпу, интуиции... и небольшому опыту в программировании...


Добавлено:
1
Автор: Andryshok
Дата сообщения: 16.11.2010 16:28
nunyutka Хорошо, пишите, помогу...
Цитата:
Опыт работы в FastReport никакой..Все делаю в основном по хелпу, интуиции... и небольшому опыту
Я так и знал

Автор: nunyutka
Дата сообщения: 22.11.2010 10:39
Выбора нет.. сказали надо а мы ответили есть!
Автор: VedunO
Дата сообщения: 23.11.2010 22:34
возможно ли как-то регулировать размер шрифта в поле (поле фиксированного размера) в зависимости от длины строки, передаваемой в это поле?
Автор: Czechoslovak
Дата сообщения: 24.11.2010 15:39
VedunO
Я на пример делаю так:

Код:
procedure Memo77OnAfterData(Sender: TfrxComponent);
begin
TfrxMemoView(Sender).Font.Name := 'Arial';
TfrxMemoView(Sender).Font.Size := 8;
if TfrxMemoView(Sender).CalcWidth > TfrxMemoView(Sender).Width then
TfrxMemoView(Sender).Font.Size := 7;
end;
Автор: MagistrAnatol
Дата сообщения: 24.11.2010 16:50
Народ, как в самом отчете произвести простенький парсинг - есть в тексте , объект рич едит, слово <text1> его надо заменить на text2

Добавлено:
или как передать переменную в самом отчете- какое событие надо создать чтобы передать переменную Set('param1','текст');
Автор: VedunO
Дата сообщения: 24.11.2010 20:00
Czechoslovak
спасибо! все оказывается так просто)))
Автор: Czechoslovak
Дата сообщения: 25.11.2010 11:37
MagistrAnatol
У TfrxReport есть событие OnGetValue, через него можно передать переменные
Автор: MagistrAnatol
Дата сообщения: 25.11.2010 13:34
Czechoslovak
мне надо не из кода программы а в самом отчете
Автор: Tantos
Дата сообщения: 25.11.2010 16:42
MagistrAnatol
Смотрите тогда в самом Дизайнере отчетов событие OnBeforePrint для бэнда/компоненты.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859

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


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