Свойство Visible элементов fastreport

Добрый день!

В коде отчета следующий текст:

procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
    if DBOpportunity>  then    
       MasterData3.Visible :=True else
       MasterData3.Visible := False;  
     
    if DBOpportunity>  then    
       DBCrossOpportunity.Visible :=True else
       DBCrossOpportunity.Visible := False;  
end;

 
procedure DBCrossOpportunityOnBeforePrint(Sender: TfrxComponent);
begin
                       
  if DBOpportunity>  then    
    DBCrossOpportunity.Visible :=True else
    DBCrossOpportunity.Visible := False;

  if DBOpportunity>  then    
    DBCrossOpportunity.Printable :=True else
    DBCrossOpportunity.Printable := False;        
end;



procedure MasterData3OnBeforePrint(Sender: TfrxComponent);
begin

   if DBTask>  then    
       MasterData3.Visible :=True else
       MasterData3.Visible := False;  
       
end;

 
procedure DBCrossTaskOnBeforePrint(Sender: TfrxComponent);
begin
  if DBTask>  then    
    DBCrossTask.Visible :=true else  
    DBCrossTask.Visible := false;
end;
 

begin

end.

(мастердата расположены соответственно - сначала 1, потом 3). Если нужно напечатать только вторую таблицу, то первая становится невидимой, но печатается - то есть под неё отводятся пустые листы. Как этого избежать?

Почему-то свойство DBCrossOpportunity.Printable := False; не помогает это исправить.

Нравится

10 комментариев

Здравствуйте Елена!
Можете выложить сервис отчета пожалуйста.

файл отчета

Елена, попробуйте в коде кроме установки Visible := false; менять DBCross2.Height и DBCross2.Width для изменения высоты и широты самого контрола.

теперь функции выглядят так

procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
    if <DBOpportunity>  then     
       MasterData3.Visible :=True else 
       MasterData3.Visible := False;  
 
    if <DBOpportunity>  then     
       DBCrossOpportunity.Visible :=True else 
       begin                
         DBCrossOpportunity.Visible := False;          
        DBCrossOpportunity.Height := 0;
         DBCrossOpportunity.Width := 0;            
    end;  
end;
 
 
procedure DBCrossOpportunityOnBeforePrint(Sender: TfrxComponent);
begin
 
  if <DBOpportunity>  then     
    DBCrossOpportunity.Visible :=True else
        begin                
         DBCrossOpportunity.Visible := False;          
        DBCrossOpportunity.Height := 0;
         DBCrossOpportunity.Width := 0;            
    end;
end;

но это всё равно не помогло. Причем другой бэнд выводится как надо, то есть не оставляет для себя пустые страницы. Все настройки, кроме размеров, вроде одинаковые.

Здравствуйте, Елена!

Пожалуйста, выложите все сервисы (вместе с датасетами) используемого отчета. Необходимо протестировать функционал.

вот все сервисы отчета.

Елена, предлагаю удаленно подключиться к Вашему рабочему месту и решить сложившеюся проблему.
Уточните, пожалуйста, удобное для Вас время и дату.

К сожалению, по правилам безопасности, это невозможно.
служба поддержки мне предложила вариант фильтровать датасеты по несуществующему ID, чтобы он был пустой и убрать признак "print id detail empty". Это так же не убирает пустые страницы.

Извините, в предыдущем архиве не совсем правильный сервис скрипта (в нём остались ссылки на ненужные и удаленные из архива датасеты)

Елена, к сожалению Ваш отчет загрузить не удалось, в сервисе sq_FactPlan1 отвалась главная таблица From, а также джойны.
Тестировал на другом отчете. Собственно, попробуйте следующий вариант:
установите свойство StretchMode = DontStretch для всех элементов контрола DBCrossOpportunity, и далее в коде пропишите каждому элементу свойвто Height := 0;

DBCrossOpportunityCorner0.Height := 0;
DBCrossOpportunityCorner1.Height := 0;
// и т.д.
Показать все комментарии