Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Отчет в FastReport


Автор: Hellen 19.1.2009, 23:06
У меня данные находятся в переменных.
Как мне их вывести  на лист отчета?

Одна колонка будет иметь наименование товара, 
а напротив наименования,  должны отображаться кол-во и стоимость.

Наименование-из базы, а кол-во и стоимость-из переменных.
Вот с переменными у меня трудности......

Автор: Данкинг 19.1.2009, 23:20
http://dump.ru/file/1450942 справка, изучай... smile 

Автор: Hellen 20.1.2009, 00:31
Из справки:-

Вывод значения переменной в отчете
Чтобы показать содержимое какой-либо скриптовой переменной в отчете, надо описать эту переменную и присвоить ей значение. Вот простой пример скрипта:

Код

var
MyVariable: String;
begin
MyVariable := 'Hello!';
end.


Вывести значение переменной можно, например, в объекте "Текст", поместив в него строку [MyVariable].
Имя переменной должно быть уникальным, т.е. не должно совпадать с именами объектов отчета, стандартных функций, констант. При любой ошибке в скрипте на экран будет выведено сообщение и отчет строиться не будет.

Добавлено через 4 минуты и 2 секунды
Я примерно это себе и представляла, но пока не получается у меня вот что:
Для того что бы вывести эту переменную,  я описываю её в строке кода  fastreportА,
потом пускаю на выполнение, но как мне связать скрипт в фаст репорте с переменной юнита.??
Он не видит переменную.

Автор: Данкинг 20.1.2009, 00:54
Ладно, вот краткий мануал накатал. smile 

1. На FR Заходим в меню "переменные":
http://ipicture.ru/Gallery/Viewfull/11909040.html
2. В окне редакторе переменных создаём новую категорию:
http://ipicture.ru/Gallery/Viewfull/11909070.html
3. В этой категории уже создаём наши переменные, называя их, как нужно:
http://ipicture.ru/Gallery/Viewfull/11909090.html
4. Для использования переменных в отчёте обрамляем их скобочками:
http://ipicture.ru/Gallery/Viewfull/11909188.html

Теперь как обращаться к переменным отчёта из программы. У компонента frxReport есть метод OnGetValue. Вот его и юзаем:
VarName - это название переменной в отчёте, value - то значение, которое мы хотим ей передать:

Код

procedure TForm1.frxReport1GetValue(const VarName: String;
  var Value: Variant);
begin
if varname='path' then value:='БУГАГАГА';
end;

Автор: Akella 20.1.2009, 01:18
Данкинг, посоветовал FR? Теперь придётся учить smile .

Автор: Данкинг 20.1.2009, 01:34
Цитата(Akella @ 20.1.2009,  01:18)
Данкинг, посоветовал FR? Теперь придётся учить smile .

Кому учить, мне? Согласен, что многого не знаю ещё по FR. smile 

Автор: Akella 20.1.2009, 09:15
И я не знаю, может оно и к лучшему smile . Сами побольше узнаем. А я ещё хотел бы хорошо изучить скриптер.

Автор: Данкинг 20.1.2009, 11:09
Цитата(Akella @  20.1.2009,  09:15 Найти цитируемый пост)
А я ещё хотел бы хорошо изучить скриптер. 

Там много на Дельфи похоже (ну, на паскаль т.е.). smile Можно интуитивно догадываться, а вообще событий немного - до печати, после печати... И ещё что-то такое подобное. smile 

Автор: Akella 20.1.2009, 11:14
Нет, там есть отдельный пакет для скриптов.

Автор: Данкинг 20.1.2009, 11:16
Цитата(Akella @  20.1.2009,  11:14 Найти цитируемый пост)
Нет, там есть отдельный пакет для скриптов. 

Я про закладку "скрипт" в отчётах. А пакеты - да, есть, только их я определённо не знаю. smile 

Автор: Kbl4AH 20.1.2009, 11:47
На форме имеется компонент frxReport1.
1-й способ (в конструкторе отчета добавляем мемку Memo1):
Код

procedure TForm1.FormShow(Sender: TObject);
var
  MyString: string;
begin
  MyString := 'Переменная';
  (frxReport1.FindObject('Memo1') as TfrxMemoView).Text := MyString;
  frxReport1.ShowReport(True);
end;

2-й способ (динамическое создание мемки):
Код

procedure TForm1.FormShow(Sender: TObject);
var
  MyString: string;
  MyMemo: TfrxMemoView;
begin
  MyString := 'Переменная';
  MyMemo := TfrxMemoView.Create(frxReport1.FindObject('Page1'));
  MyMemo.SetBounds(100,100,200,20);
  MyMemo.Text := MyString;
  frxReport1.ShowReport(True);
end;

Автор: Hellen 21.1.2009, 22:12
Данкинг   спасибо.....
У меня на выполнение запущена  ButtonClick.............из формы  "TFormFastReport" 
что то я сообразить не могу.......куда твою  процедуру сажать.
Можно дополнить код??  плиз.

Ф отчете я создала переменную  'price' в неё надо передать значение переменной  'cena'.



Код

procedure TFormFastReport.Button1Click(Sender: TObject);
    var
cena:integer;
begin
cena:=strtoint(edit1.Text);
frxReport1.ShowReport(true);
end;
end.

Автор: Данкинг 21.1.2009, 22:41
Цитата(Hellen @  21.1.2009,  22:12 Найти цитируемый пост)
куда твою  процедуру сажать.

У frxReport1 ищи OnGetValue и вместо моих переменных подставляй свои. smile 

Автор: Hellen 21.1.2009, 23:13
Код

procedure TFormFastReport.Button1Click(Sender: TObject);

       var
cena:integer;
begin
cena:=strtoint(edit1.Text);
frxReport1.ShowReport(true);

end;

procedure TFormFastReport.frxDBDataset1Open(Sender: TObject);
begin
end;

procedure TFormFastReport.frxReport1GetValue(const VarName: string;
  var Value: Variant);
begin
 if price='path' then value:=cena;
end;
end.


Я не понимаю как этот мой бред может работать?
Как переменные могут передоваться?

Добавлено через 32 секунды
передаваться

Добавлено через 1 минуту и 58 секунд
я запуталась smile

Добавлено через 10 минут и 3 секунды
Код

procedure TFormFastReport.Button1Click(Sender: TObject);
    var
cena:integer;
begin
cena:=strtoint(edit1.Text);
frxReport1.ShowReport(true);
end;
procedure TFormFastReport.frxReport1GetValue(const VarName: string;
  var Value: Variant);
begin
 if VarName ='price' then value:='cena';
end;
end.

вот здесь уже что то проясняется только вместо  текста  'cena' мне нужно передать значение переменной......

Добавлено через 10 минут и 36 секунд
значение переменной cena

Добавлено через 14 минут и 15 секунд
Объявила переменную в  public
уф...
Всё получилось.
Спасибо всем.

Автор: Hellen 22.1.2009, 00:13
Kbl4AH,  твой метод тоже получился, спасибо, мне пригодится всё............

Автор: Данкинг 22.1.2009, 00:17
Цитата(Hellen @  21.1.2009,  23:13 Найти цитируемый пост)
Объявила переменную в  public

А не проще сразу так:

Код

procedure TFormFastReport.frxReport1GetValue(const VarName: string;
  var Value: Variant);
begin
 if VarName ='price' then value:=edit1.Text;
end;

 smile  smile  smile 

Автор: Hellen 22.1.2009, 23:39
Цитата

А не проще сразу так:


Мы рассматривали переменную, где это возможно канешна буду так делать))

Автор: Deniz 23.1.2009, 07:03
Вставлю свои пять копеек:
Код
frxReport1.Variables['VarName']:=QuotedStr(edit1.Text);

Автор: Данкинг 23.1.2009, 10:55
Цитата(Deniz @  23.1.2009,  07:03 Найти цитируемый пост)
Вставлю свои пять копеек:

А это куда вешать?

Автор: Kbl4AH 23.1.2009, 11:33
Цитата(Данкинг @  23.1.2009,  10:55 Найти цитируемый пост)
А это куда вешать?

ну, наверное, в начале нужно переменную создать...
я тоже не совсем понял...

Автор: Deniz 23.1.2009, 12:15
Цитата(Данкинг @  23.1.2009,  13:55 Найти цитируемый пост)
А это куда вешать?
код вызываем перед frxReport1.ShowReport(true);
Цитата(Kbl4AH @  23.1.2009,  14:33 Найти цитируемый пост)
ну, наверное, в начале нужно переменную создать...
я тоже не совсем понял... 
RTFM.
Данный код добавляет переменную, если ее нет, и устанавливает значение.
Я обычно пользуюсь данным методом, когда в шапке отчета нужно вывести какие-то параметры, которые ввел пользователь для построения отчета. Например, период "с ... по ..."

Автор: Kbl4AH 23.1.2009, 12:25
Deniz, ну хорошо, переменной значение присвоили... а как тогда вывести это значение в отчете?

Автор: Данкинг 23.1.2009, 13:08
Цитата(Kbl4AH @  23.1.2009,  12:25 Найти цитируемый пост)
а как тогда вывести это значение в отчете? 

Вероятно, как обычно: в коде FR : <VarName> .

Автор: Kbl4AH 23.1.2009, 13:17
Цитата(Данкинг @  23.1.2009,  13:08 Найти цитируемый пост)
Вероятно, как обычно: в коде FR : <VarName> .

не понимаю, можно подробнее?
последовательность действий и пример кода...

разобрался

Автор: Данкинг 23.1.2009, 14:55
Цитата(Kbl4AH @  23.1.2009,  13:17 Найти цитируемый пост)
разобрался

Т.е. получилось? Я-то так не пробовал, я всегда переменные задавал в FR, ничего не создавая динамически.

Автор: Kbl4AH 23.1.2009, 15:30
Цитата(Данкинг @  23.1.2009,  14:55 Найти цитируемый пост)
Т.е. получилось?

угу

Автор: Deniz 26.1.2009, 06:51
Цитата(Данкинг @  23.1.2009,  17:55 Найти цитируемый пост)
Т.е. получилось? Я-то так не пробовал, я всегда переменные задавал в FR, ничего не создавая динамически. 
я тоже переменные создаю в FR и там присваиваю им значение, что бы посмотреть, как это все выглядит.
А в коде присваиваю правильное значение переменной. Вот и все.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)