如何使QR页面页脚或条带位于条带详细信息下,而不是位于页尾?

z8dt9xmd  于 2022-09-21  发布在  其他
关注(0)|答案(2)|浏览(201)

我需要做报告,那是在细节打印后有摘要,而不是在每个细节之后。

我只知道页脚,但它在页面底部,而不是在细节栏之后。

有没有QRBand可以追查详细信息乐队?或者,你能让PageFooter在每一页上调整高度吗?

kmpatx3s

kmpatx3s1#

汇总带区仅打印在紧跟在最后一个‘Detail’之后的报告结尾处(除非AlignToBottom属性设置为true)。

您应该向报表添加TQRBand,并将BandType属性设置为rbSummary

编辑

如果需要在每一页上显示中间结果,可以添加FooterBandSummaryBand

摘要区段仅在报表末尾(最后一页)打印,您可以使用摘要的BeforePrint事件禁用页脚区段。

EDIT2

您也可以尝试使用QRGroupBandQRFooterBand

GroupBand中:

  • 使用Expression属性将一组产品与另一组产品分开(波段也可以为空)
  • 适当设置FooterBand属性。在这里,您可以将页眉带链接到正确的页脚带,并在其中封装您的组。通过删除QRBand组件并立即将TyperbTitle更改为rbGroupFooter,首先放置页眉区段,然后返回并放置页脚区段。完成此操作后,您可以返回到QRGroup页眉并选择要使用的正确页脚区域。

FooterBand是打印每个产品的汇总的地方。

gopyfrb3

gopyfrb32#

我能够在QuickReport事件和数据源事件的帮助下解决这个问题。在一个测试项目中,在页脚中放一个tqr标签就足够了,剩下的部分写在下面。

type
TForm1 = class(TForm)
  ...
private
  firstValue: Integer;
public
  counter: Integer;
end;

var
  Form1: TForm1;
  PageSummery: Integer;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Application.CreateForm(TForm2, Form2);
  adoquery.First;
  counter := 0;
  firstValue := adoquery.FieldByName('id').AsInteger;
  PageSummery := 0;
  Form2.QuickRep1.Preview;
  Form2.Free;
end;

procedure TForm1.adoqueryAfterScroll(DataSet: TDataSet);
begin
  if counter <= 1 then
    PageSummery := firstValue + adoquery.FieldByName('id').AsInteger
  else
  begin
    PageSummery := PageSummery + adoquery.FieldByName('id').AsInteger;

    form2.QRLabel2.Caption := IntToStr(PageSummery - Form1.adoquery.FieldByName('id').AsInteger);
  end;
counter := counter + 1;
end;

注意第一种形式中变量的位置。第一个按钮用于填充查询数据。在每次增加之后,数据被放置在qrLabel中,以便在事件被触发时保存所有数据。最后一点是QuickReport事件,该事件在创建新页面时填充打印行之前发生。在这种情况下,必须将多个变量设置为零。

procedure TForm2.QuickRep1StartPage(Sender: TCustomQuickRep);
begin
  if Form1.counter = 0 then
    PageSummery := 0
  else
    PageSummery := Form1.adoquery.FieldByName('id').AsInteger;
end;

相关问题