проблемы со скрытием страницы

отредактировано 07:49 Раздел: FastReport 4.0
Добрый день.
Прилагаю пример отчета.
Вопрос в следующем: Как скрыть какую-либо страницу или все для Page2 ?
Запрос не должен правится. Нужно просто по условию скрыть страницу, например 2 при ...FieldByName('').Value =2.

Комментарии

  • gpigpi
    отредактировано 07:49
    Попробуйте перенести Ваш код в procedure Page1OnBeforePrint(Sender: TfrxComponent);
  • отредактировано 07:49
    gpi написал: »
    Попробуйте перенести Ваш код в procedure Page1OnBeforePrint(Sender: TfrxComponent);
    В этой процедуре я могу только скрыть или показать Page2, а не отдельные страницы.
    Или я не прав ?
  • отредактировано 07:49
    Под листом я понимаю - те страницы, что мы видим в дизайнере.
    Под страницами - те страницы, которые строятся отчетом для каждого листа.
  • gpigpi
    отредактировано 07:49
    Может быть, Вам лучше просто скрывать MasterData1?
    procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
    begin
      MasterData1.Visible := DoaQuery1.FieldByName('rownums').Value <> 2
    end;
    
  • отредактировано 07:49
    gpi написал: »
    Может быть, Вам лучше просто скрывать MasterData1?
    procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
    begin
      MasterData1.Visible := DoaQuery1.FieldByName('rownums').Value <> 2
    end;
    
    Просто скрыть не помогает.
    В этом случае мы получаем пустую 2 страницу с PageFooter(его конечно можно спрятать).
    Но пустая страница тоже плохо.
    Я не зря выложил пример - можно все свои предположения проверять сразу.
    Мне кажется, что это проблема которую надо решать разработчикам.
  • отредактировано 07:49
    sam_peter написал: »
    Просто скрыть не помогает.
    В этом случае мы получаем пустую 2 страницу с PageFooter(его конечно можно спрятать).
    Но пустая страница тоже плохо.
    Я не зря выложил пример - можно все свои предположения проверять сразу.
    Мне кажется, что это проблема которую надо решать разработчикам.
    Апну тему ибо проблема схожая.
    В отчете есть PAGE2 с бэндами MasterData, DetailData. В свойствах PAGE2 указываю PrintIfEmpty=False, но страница все равно выводится на печать пустой.
    Возможно я не правильно понял функцию PrintIfEmpty, тогда каким образом спрятать пустую страницу?
  • отредактировано November 2010
    andyP написал: »
    Апну тему ибо проблема схожая.
    И я поддержу вопрос: как можно скрыть уже сгенерированную страницу?
    У меня ситуация такая. Есть 2-проходный отчет (чтобы сформировать оглавление), на одной из страниц в дизайнере используется мастер-дата бэнд с групповым хедером и футером, каждая группа начинает новую страницу (номер которой идет в оглавление). Мастер-дата фильтруется при построении отчета, поэтому в итоге на странице может оказаться только хедер группы и страничный футер (а самих данных нет) - в этом случае хотелось бы скрыть такую страницу в предварительном просмотре и при печати (и не включать ее в оглавление, кончено). Сейчас имею вот такой код (сделал по аналогии с другими страницами того же отчета, но на них принцип был другой: там скрывается вся дизайнерская страница, а не некоторые из сгенерированных, и там все работает номально):
    // ----- Items                                                                                               
    procedure ItemsOnBeforePrint(Sender: TfrxComponent);
    begin
      ItemGroupNumber := 0;
    end;
    
    procedure GroupHeaderItemsOnBeforePrint(Sender: TfrxComponent);
    begin
      Inc(ItemGroupNumber);
      ItemNumber := 0;
      TmpPageNo := <Page#> - dpconst + dp; // page number where the group starts
    end;
    
    procedure MasterDataItemsOnBeforePrint(Sender: TfrxComponent);
    begin
      MasterDataItems.Visible :=
        // we skip the first item in the list if it's a room [item] and then its containing items
        (VarToStr(<ItemDataSet."RoomID">) <> 'Room') and
        (VarToStr(<ItemDataSet."Title">) <> 'Room') and
        (
          (Trim(VarToStr(<ItemDataSet."Specification">)) <> '') or
          (Trim(VarToStr(<ItemDataSet."Comments">)) <> '') or
          (Trim(VarToStr(<ItemDataSet."CheckInComments">)) <> '') or
          (Trim(VarToStr(<ItemDataSet."CheckOutComments">)) <> '') or
          (Trim(VarToStr(<ItemDataSet."Responsibility">)) <> '')
        );
      if MasterDataItems.Visible then begin
        Inc(ItemNumber);
      end;
    end;
    
    procedure GroupFooterItemsOnBeforePrint(Sender: TfrxComponent);
    begin
      if (not Engine.FinalPass) then begin
        if (ItemNumber > 0) then begin
          ToCTextLeft := ToCTextLeft + VarToStr(<ItemDataSet."Title">) + #13#10;
          ToCTextRight := ToCTextRight + IntToStr(TmpPageNo) + #13#10;
        end
        else begin
          Items.Visible := False; // не работает, как надо!!!
          Dec(ItemGroupNumber);
          Dec(dp);
        end;
      end;          
    end;
    
    Если у кого-то есть идеи, заранее спасибо.

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

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