Как отключить Databend

{Артем}{Артем} москва
отредактировано October 2009 Раздел: FastReport 4.0
Ситуация такая имеется отчет с такой вложеностью, см. рисунок. при формировании отчета проиходит заполнение бендов, в зависимости от данных DataBand41 имеет записи или не имеет как мне его включать и отключать? Заранее всем благодарен

Комментарии

  • Lizard~Lizard~ Тольятти
    отредактировано 22:54
    написал: »
    Ситуация такая имеется отчет с такой вложеностью, см. рисунок. при формировании отчета проиходит заполнение бендов, в зависимости от данных DataBand41 имеет записи или не имеет как мне его включать и отключать? Заранее всем благодарен

    Рисунка нет.
    В событии перед печатью бенда, в зависимости от ситуации, присваивать ему xBand.Visible := true или xBand.Visible := false
  • {Артем}{Артем} москва
    отредактировано October 2009
    так не получается, в связи с тем что в data4 у меня то есть записи, то нет, (в зависимости от поданых данных), в приведеном ниже коде - работает только есть записи в data4, а если нет записей то не работает.

    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;
  • Lizard~Lizard~ Тольятти
    отредактировано 22:54
    написал: »
    так не получается, в связи с тем что в data4 у меня то есть записи, то нет, (в зависимости от поданых данных), в приведеном ниже коде - работает только есть записи в data4, а если нет записей то не работает.

    Проверку нужно делать в событии перед печатью бенда. OnBeforePrint
  • {Артем}{Артем} москва
    отредактировано 22:54
    Хорошо тогда спрошу так:
    если как у меня на рисунке - есть связь бэнда с с компонентом frxuserdataset - как мне ее в определенный момент разрушить, т.е. примерно так
    databend.dataset:=nil;
    а потом в нужное время создать.


  • {Артем}{Артем} москва
    отредактировано 22:54
    Все спасибо нашел, все сделал
  • HALHAL
    отредактировано 22:54
    Возможно у меня похожая проблема, если ошибся темой, то сорри.
    Попытка отображать строки в которых проверяется один столбец на отрицательное значение(по примеру из мануала):

    procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
    begin
    if StrToFloat(Trim(FloatToStr(Memo44.Value)))<0 then //тут мне посоветовали протримить, но никак не поменялся результат
    MasterData1.Visible := True else
    MasterData1.Visible := False;
    end;


    Не работает абсолютно :)
    Хочу отображать строки в которых отрицательные значения... вроде простая задача, ан нет - не работает! полностью прячет все значения.
  • отредактировано 22:54
    HAL написал: »
    Возможно у меня похожая проблема, если ошибся темой, то сорри.
    Попытка отображать строки в которых проверяется один столбец на отрицательное значение(по примеру из мануала):

    procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
    begin
    if StrToFloat(Trim(FloatToStr(Memo44.Value)))<0 then //тут мне посоветовали протримить, но никак не поменялся результат
    MasterData1.Visible := True else
    MasterData1.Visible := False;
    end;


    Не работает абсолютно :)
    Хочу отображать строки в которых отрицательные значения... вроде простая задача, ан нет - не работает! полностью прячет все значения.
    Вы перепутали событие, в OnBeforePrint переменная Value еще не проинициализирована

    Вместо Memo44.Value используйте конкретное поле\выражение, например: <Table2."Field1">.
  • HALHAL
    отредактировано December 2009
    написал: »
    Вы перепутали событие, в OnBeforePrint переменная Value еще не проинициализирована

    Вместо 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;

    результат тот же - нет ни одной строки.
  • отредактировано 22:54
    HAL написал: »
    Проводил тест таким способом:
    procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
    begin
    if StrToFloat(Trim(FloatToStr(Memo44.Value)))<0.00 then
    ShowMessage(Trim(FloatToStr(Memo44.Value)));
    end;

    отображает(!) отрицательные значения :)
    Как я уже написал этот вариант не правильный, Value в OnBeforePrint будет всегда иметь значение из предыдущей строки, а первая будет пустой (не инициализирована).
    HAL написал: »
    поле 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.

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

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