Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FastReport (FreeReport), Вычисления во время формирования отчета 
:(
    Опции темы
iddqd
Дата 19.12.2005, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: нет
Всего: 2



Необходимо произвести следующие действия:
Есть два поля (float) необходимо в каждой записи умножить их друг на друга, а внизу страницы вывести сумму этих произведений.
Я понимаю так, что делать это надо через скрипт, но можно, пожалуйста, чуть подробней?
smile


--------------------
PM MAIL   Вверх
iddqd
Дата 19.12.2005, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: нет
Всего: 2



http://forum.vingrad.ru/index.php?showtopic=66204
Прочитано, понято. Сейчас будет испробованно.

Прошу прощения за невнимательность.


--------------------
PM MAIL   Вверх
iddqd
Дата 19.12.2005, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: нет
Всего: 2



Гм. Всё же не работает smile

Код
function GetNaim: string;
begin
Result:='string';
end;

procedure TForm2.frReport1UserFunction(const Name: String; p1, p2,
  p3: Variant; var Val: String);
begin
if AnsiCompareText('GetNaim', Name) = 0 then
    val := GetNaim();
end;


Кладу в отчёт DetailFooter на него поле с текстом и пишу там GetNaim. И в скрипт тоже писал. Как сделать правильно, подскажите пожалуйста?

Это сообщение отредактировал(а) iddqd - 19.12.2005, 21:52


--------------------
PM MAIL   Вверх
iddqd
Дата 19.12.2005, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: нет
Всего: 2



Ошибка происходит в модуле FR_Class в этой процедуре:
Код

procedure TfrReport.OnGetParsFunction(const name: String; p1, p2, p3: Variant;
   var val: String);
var
  i: Integer;
begin
  val := '0';
  for i := 0 to frFunctionsCount - 1 do
    if frFunctions[i].FunctionLibrary.OnFunction(name, p1, p2, p3, val) then
      exit;
  if AggrBand.Visible then  // <-- здесь!
    if Assigned(FOnFunction) then FOnFunction(name, p1, p2, p3, val);
end;



--------------------
PM MAIL   Вверх
iddqd
Дата 20.12.2005, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: нет
Всего: 2



Тема закрыта. Вопрос решён самостоятельно. Если кому интересно, то делается это так.

Кладём в отчёте новое поле. И в нём пишем текст любой переменной, скажем [Peremena] (Внимание, квадратные скобки обязательны! Собсна почти в этом и была моя ошибка.)

Затем:

Код
procedure TForm2.frReport1GetValue(const ParName: String;
  var ParValue: Variant);
begin
if CompareText(ParName, 'Peremena') = 0 then
ParValue := "ляляля";
end;


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

А когда происходит обработка события UserFunction - непонятно.


--------------------
PM MAIL   Вверх
Alex
Дата 20.12.2005, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



iddqd, никаких пользовательских функций не нужно, скажите только какая версия FR?


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
iddqd
Дата 20.12.2005, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: нет
Всего: 2



Alex, последняя версия FreeReport


--------------------
PM MAIL   Вверх
Alex
Дата 20.12.2005, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



В PageHeader в скрипте объявляешь некую переменную и ее обнуляешь:
Цитата
aaa:= 0

В MasteData ведешь свои вычисления:
Цитата
aaa:= aaa + (["Поле1"]*["Поле2"])

На PageFooter кидаешь поле в которое будишь выводить и там
Цитата
[aaa]



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
iddqd
Дата 20.12.2005, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: нет
Всего: 2



Alex, спасибочки, буду знать.


--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

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


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.