Проблемы с динамич массивом

отредактировано 03:44 Раздел: FastScript
Может кто поможет?
Нужно вывести сумму в заголовке группы Пример из руководства не работает вообще. Хочу вместо StringList использовать простой массив

Пытаюсь сделать это Начал с малого - просто выводить в заголовках числа: 0 для первой группы, 1 для второй и т.д.
Есть такой код
var
i1,i2:Integer=0;
SumArr:array  of integer;

procedure GroupHeader2OnBeforePrint(Sender: TfrxComponent);
begin
if Engine.FinalPass then Memo17.Text := 'Sum: ' + FloatToStr(i2);
end;

procedure GroupFooter2OnBeforePrint(Sender: TfrxComponent);
begin

if Engine.FinalPass=false then
   begin
   SumArr[i1]:=i1;
   i1:=i1+1;
   end;
if Engine.FinalPass=true then i2:=i2+1;
end;


begin

end.


В строке SumArr[i1]:=i1 выдает ошибку- Variant Array Index Out of Bounds
Куда там что не помещается не пойму вообще Или этот fast script такой дырявый или у меня к концу дня крыша едет Отчет сделал двухпроходным
Fast-report 3.09

Комментарии

  • FokewolfFokewolf Киев
    отредактировано 03:44
    А размерность массива указать ? ;) )))
  • отредактировано 03:44
    Fokewolf написал:
    А размерность массива указать ? ;) )))
    массив должен быть динамический в том-то и вся суть
    Объявление массива по-моему правильное
  • FokewolfFokewolf Киев
    отредактировано 03:44
    Насколько я знаю, в PascalScript размерность нужно указывать сразу при объявлении массива. По другому не получится
  • Andrew_ShAndrew_Sh г.Минск
    отредактировано 03:44
    Rico написал:
    Может кто поможет?
    Нужно вывести сумму в заголовке группы Пример из руководства не работает вообще.
    Посмотрите пример из демки Dialogs and script -> Totals in group header. Там точно все работает.
  • Andrew_ShAndrew_Sh г.Минск
    отредактировано 03:44
    Rico написал:
    Пример из руководства не работает вообще. Хочу вместо StringList использовать простой массив
    Пример из руководства как раз-таки и работает. Проверил на отчете 45.frf Dialogs and script -> Totals in group header., предварительно модифицировав выражение <SUM> на нужное и вместо Memo8 используется Memo4. Единственное, что в примере из доки не хватает одной проверки, а именно перед добавлением строки в List надо сделать провекру
    if not Engine.FinalPass then
    т.е. код будет выглядеть так
    if not Engine.FinalPass then
      List.Add(FloatToStr(<SUM(<Group."ItemsTotal">,MasterData1)>));
    
    т.к. в противном случае во втором проходе суммы опять будут добавляться в список. К ошибке это не приводит, но это и неправильно.

    Замените скрипт в 45.frf на следующий код и привяжите обработчики к соответствующим событиям бэндов.
    var
      List: TStringList;
      i: Integer;
    
    procedure frReport1OnStartReport(Sender: TfrxComponent);
    begin
      List := TStringList.Create;
    end;
    
    procedure frReport1OnStopReport(Sender: TfrxComponent);
    
    begin
      List.Free;
    end;
    
    procedure Page1OnBeforePrint(Sender: TfrxComponent);
    begin
      i := 0;
    end;
    
    procedure GroupHeader1OnBeforePrint(Sender: TfrxComponent);
    begin
      if Engine.FinalPass then
        Memo4.Text := 'Sum: ' + List.Strings[i];
    end;
    
    procedure GroupFooter1OnBeforePrint(Sender: TfrxComponent);
    begin
      if not Engine.FinalPass then
        List.Add(FloatToStr(<Sum(<Sales."Qty">*<Sales."List Price">)>));
    
      Inc(i);
    end;
    
    begin
    
    end.
    

    все отлично работает и никакие мудрствования с динамическими массивами здесь абсолютно не нужны.
  • отредактировано 03:44
    Rico написал:
    Rico написал:
    А размерность массива указать ? ;) )))
    массив должен быть динамический в том-то и вся суть
    Объявление массива по-моему правильное
    Динамический массив надо инициализировать с помощью процедуры SetLength!
  • отредактировано 03:44
    Когда задавал этот вопрос у меня стоял FR 3.09
    Скрипт писал по всякому, извращался как угодно
    В конце концов в дизайнере заработало, а из-под основной программы выбрасывало ошибки. Иногда не работала ф-ия Sum из скрипта
    Поставил 3.14 - все сразу заработало. 3.09-глюк Всем спасибо
    Топик закрыт

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.