SubReport

BotBot
отредактировано 21:45 Раздел: FastReport 3.0
На MasterData положил Subreport. Страница, где лежит MasterData имеет альбомное расположение, а вложенный отчёт вертикальное. При формировании отчёта в момент вывода вложенного отчёта ориентация страницы основного отчёта остаётся прежней, хотя нужна вертикальная. Пытался даже через код. Кроме того, не могу скрыть заголовок страницы.

Комментарии

  • отредактировано 21:45
    Что-то не понял. А если на одной странице будет несколько строк MasterData, то какая ориентация должна быть у страницы?
  • BotBot
    отредактировано 21:45
    В зависимости от параметра. Если это Г, то горизонтальная, если В, то вертикальная. При этом должна создаться новая страница.
  • отредактировано 21:45
    Во время формирования отчета изменить ориентацию нельзя, но можно менять ориентацию страниц сформированного отчета.
    Попробуйте сделать так:
    1) Передатиь в скрипт список в котором помечать ориентацию страници.
    2) из Delphi поменять ориентацию страниц сформированного отчета
    var
    i:integer;
    Page:TfrxReportPage;
    begin
    frxReport1.PrepareReport();
    for i := 0 to frxReport1.PreviewPages.Count -1 do
    begin
    Page := frxReport1.PreviewPages.Page[i];
    if СПИСОК_ОРИЕНТАЦИИ_СТРАНИЦ = 'Г'   then
    begin
    Page.Orientation := poPortrait;
    frxReport1.PreviewPages.ModifyPage(i,Page);
    end
    else
    begin
    Page.Orientation := poLandscape;
    frxReport1.PreviewPages.ModifyPage(i,Page);
    end;
    end;
    frxReport1.ShowPreparedReport();
    end;
    
    Положение объектов на странице остается прежним.

  • BotBot
    отредактировано March 2006
    Не получается. Может быть потому что отчёт двухпроходной?
    i: integer;
    Page: TfrxReportPage;
    Memo: TfrxMemoView;
    frxReport1.PrepareReport(true);
    for i:=0 to frxReport1.PreviewPages.Count-1 do
         begin
         Page:=frxReport1.PreviewPages.Page[i];
         Memo:=frxReport1.FindObject('Memo57') as TfrxMemoView;
         if Memo.Value='П618-298-1' then
            begin
            Page.Orientation:=poPortrait;
            frxReport1.PreviewPages.ModifyPage(i,Page);
            end
         else
            begin
            Page.Orientation:=poLandscape;
            frxReport1.PreviewPages.ModifyPage(i,Page);
            end;
         end;
            frxReport1.ShowPreparedReport;
    
  • отредактировано 21:45
    Создайте массив и заполните его в отчете, через FindObject не получится.
    Под 'СПИСОК_ОРИЕНТАЦИИ_СТРАНИЦ' я имел в виду массив или список передаваемый и заполняемый в скрипте.
  • BotBot
    отредактировано 21:45
    При наполнении списка выдаёт, что неверный тип данных или поле в MasterData отсутствует.
    написал:
    List.Add(IntToStr(<<frxDBDataset1."RESUNIT_OUT">,MasterData1>));
    Inc(i);
  • отредактировано 21:45
    А где создаете и заполняите?
  • BotBot
    отредактировано 21:45
    В скрипте отчёта
  • отредактировано 21:45
    Покажите код скрипта.
  • BotBot
    отредактировано 21:45
    написал:
    procedure GroupHeader1OnAfterPrint(Sender: TfrxComponent);
    begin
          List.Add(IntToStr(<<frxDBDataset1."RESUNIT_OUT">,MasterData1>));
          Inc(i);
    end;

    procedure frxReport1OnStartReport(Sender: TfrxComponent);
    begin
    List := TStringList.Create;
    end;

    procedure Page1OnBeforePrint(Sender: TfrxComponent);
    begin
    i:=0;
    end;

    procedure frxReport1OnStopReport(Sender: TfrxComponent);
    begin
          List.Free;
    end;

    Вот если бы можно было сразу несколько готовых отчётов загрузить в один через что-то типа LoadFromFile, то все мои проблемы решились бы сразу
  • отредактировано 21:45
    А так:
    procedure GroupHeader1OnAfterPrint(Sender: TfrxComponent);
    begin
          List.Add(VarToStr(<frxDBDataset1."RESUNIT_OUT">));
          Inc(i);
    end;
    
    Список лучше уничтожать после закрытия отчета, а не в OnStopReport.
  • BotBot
    отредактировано 21:45
    Получилось, спасибо. А как к нему теперь через Делфи обратиться?
  • отредактировано 21:45
    В Delphi:
    Var
    List:TstringList;
    begin
    frxReport1.PrepareReport();
    List := Pointer(Integer(frxReport1.Script.Variables['List']));
    List[i];
    
    Не забудте убрать List.Free в скрипте.

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

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