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


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

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

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

Автор: iddqd 19.12.2005, 21:51
Гм. Всё же не работает 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, 22:59
Ошибка происходит в модуле 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;

Автор: iddqd 20.12.2005, 20:24
Тема закрыта. Вопрос решён самостоятельно. Если кому интересно, то делается это так.

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

Затем:

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


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

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

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

Автор: iddqd 20.12.2005, 22:15
Alex, последняя версия FreeReport

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

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

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

Автор: iddqd 20.12.2005, 23:42
Alex, спасибочки, буду знать.

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