Как отключить Databend
{Артем}
москва
Ситуация такая имеется отчет с такой вложеностью, см. рисунок. при формировании отчета проиходит заполнение бендов, в зависимости от данных DataBand41 имеет записи или не имеет как мне его включать и отключать? Заранее всем благодарен
Комментарии
Рисунка нет.
В событии перед печатью бенда, в зависимости от ситуации, присваивать ему xBand.Visible := true или xBand.Visible := false
procedure TRTIMainForm.frxetajGetValue(const VarName: string;
var Value: Variant);
var Etaj : TEtaj;
detalband: TfrxdetailData;
begin
Etaj:=(RTI_Obj.ItemEtaj.Objects[frxetaj.RecNo] as TEtaj);
if VarName='Nomer' then Value:=Etaj.Nomer;
if VarName='Otmetka' then Value:=Etaj.Otmetka;
detalband:=frxReport1.FindObject('DetailData1') as TfrxdetailData;
if detalband<>nil then detalband.RowCount:=Etaj.Items.Count;
end;
procedure TRTIMainForm.frxKomnataGetValue(const VarName: string; var Value: Variant);
var Etaj : TEtaj;
Pom : TPomeshenie;
Ogragdenie : TOgragdenie;
detalband: TfrxSubdetailData;
begin
Etaj:=(RTI_Obj.ItemEtaj.Objects[frxetaj.RecNo] as TEtaj);
Pom:=Etaj.Items[frxKomnata.RecNo];
if VarName='Npom' then Value:=Pom.Nomer;
if VarName='Temp' then Value:=Pom.Temper;
if VarName='Plpol' then Value:=FormatFloat('0.00',Pom.Plosh);
if VarName='Tip' then Value:=Pom.TipName;
if VarName='Namepom' then Value:=Pom.Name;
if VarName='Obem' then Value:=Pom.KObNeKomVozd;
if VarName='Pint' then Value:=Pom.Davl;
detalband:=frxReport1.FindObject('SubdetailData1') as TfrxSubdetailData;
if detalband<>nil then detalband.RowCount:=Pom.Items.Count;
end;
procedure TRTIMainForm.frxOgragGetValue(const VarName: string; var Value: Variant);
var Etaj : TEtaj;
Pom : TPomeshenie;
Ogragdenie : TOgragdenie;
databand: TfrxDataBand4;
/// CounOgr:integer;
begin
Etaj:=(RTI_Obj.ItemEtaj.Objects[frxetaj.RecNo] as TEtaj);
Pom:=Etaj.Items[frxKomnata.RecNo];
Ogragdenie:=Pom.Items[frxOgrag.RecNo];
if VarName='Orient' then Value:=Ogragdenie.Orintir;
if VarName='Dla' then Value:=FormatFloat('0.00', Ogragdenie.RazmerA);
if VarName='Visb' then Value:=FormatFloat('0.00',Ogragdenie.RazmerB);
if VarName='Kof' then Value:=Ogragdenie.PopKoef;
if VarName='NameOgr' then Value:=Ogragdenie.OgragKonstr.Name;
if Ogragdenie.Items.Count>0 then
begin
databand:=frxReport1.FindObject('DataBand41') as TfrxDataBand4;
if databand<>nil then databand.RowCount:=Ogragdenie.Items.Count;
//databand.Visible:=true;
end;
end;
procedure TRTIMainForm.frxOgrOgrGetValue(const VarName: string;
var Value: Variant);
var Etaj : TEtaj;
Pom : TPomeshenie;
Ogragdenie : TOgragdenie;
OgragdenieOgr : TOgragdenie;
databand: TfrxDataBand4;
begin
Etaj:=(RTI_Obj.ItemEtaj.Objects[frxetaj.RecNo] as TEtaj);
Pom:=Etaj.Items[frxKomnata.RecNo];
Ogragdenie:=Pom.Items[frxOgrag.RecNo];
if Ogragdenie.Items.Count=0 then //exit;
begin
databand:=frxReport1.FindObject('DataBand41') as TfrxDataBand4;
//if databand<>nil then databand.RowCount:=Ogragdenie.Items.Count;
databand.Visible:=false;
//exit;
end else
//databand:=frxReport1.FindObject('DataBand41') as TfrxDataBand4;
//if frxOgrOgr.RecordCount=0 then frxOgrOgr.Enabled:=false else frxOgrOgr.Enabled:=true;
begin
databand:=frxReport1.FindObject('DataBand41') as TfrxDataBand4;
databand.Visible:=true;
OgragdenieOgr:=Ogragdenie.Items[frxOgrOgr.RecNo];
if VarName='Orient' then Value:=OgragdenieOgr.Orintir;
if VarName='Dla' then Value:=FormatFloat('0.00', OgragdenieOgr.RazmerA);
if VarName='Visb' then Value:=FormatFloat('0.00',OgragdenieOgr.RazmerB);
if VarName='Kof' then Value:=OgragdenieOgr.PopKoef;
if VarName='NameOgr' then Value:=OgragdenieOgr.OgragKonstr.Name;
end;
end;
Проверку нужно делать в событии перед печатью бенда. OnBeforePrint
если как у меня на рисунке - есть связь бэнда с с компонентом frxuserdataset - как мне ее в определенный момент разрушить, т.е. примерно так
databend.dataset:=nil;
а потом в нужное время создать.
Попытка отображать строки в которых проверяется один столбец на отрицательное значение(по примеру из мануала):
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
if StrToFloat(Trim(FloatToStr(Memo44.Value)))<0 then //тут мне посоветовали протримить, но никак не поменялся результат
MasterData1.Visible := True else
MasterData1.Visible := False;
end;
Не работает абсолютно
Хочу отображать строки в которых отрицательные значения... вроде простая задача, ан нет - не работает! полностью прячет все значения.
Вместо Memo44.Value используйте конкретное поле\выражение, например: <Table2."Field1">.
Проводил тест таким способом:
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
if StrToFloat(Trim(FloatToStr(Memo44.Value)))<0.00 then
ShowMessage(Trim(FloatToStr(Memo44.Value)));
end;
отображает(!) отрицательные значения
поле Memo44 содержит [<frxDBDataset1."Field1">-<frxDBDataset1."Field2">]
Не пойму в чём проблема
Вариант :
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
if (<frxDBDataset1."Field1">-<frxDBDataset1."Field2">)<0.00 then
MasterData1.Visible := True else
MasterData1.Visible := False;
end;
результат тот же - нет ни одной строки.
Что-то Вы делаете не так.
В аттаче простой пример отчета, открывается из Main Demo.