Delphi 11 中的快速报告。如何根据记录的“数量”字段打印每条记录

Fast Report in Delphi 11. How to print each record based on the Quantity field of the record

提问人:codeGood 提问时间:10/19/2023 最后编辑:codeGood 更新时间:10/23/2023 访问量:86

问:

我有一个主详细信息报告。 我希望报表根据其数量字段打印主信息(及其详细信息)。 因此,如果主记录的 Quanitty 字段为 3,则应在报表上显示 3 次,如果字段为 2,则应显示 2 次,依此类推。

- 这是一个包含 2 条记录的 Master 表的示例

主 1 数量字段为 3, 主 2 归档数量为 2

所需的打印如下:

硕士1 详细1

硕士1 详细1

硕士1 详细1

硕士2 十进制2

硕士2 详细2

任何帮助将不胜感激。

德尔福 报告 Pascal FastReport

评论


答:

0赞 Fabrizio 10/19/2023 #1

您可以执行以下操作:

  1. 添加主波段并将其链接到主数据集。
  2. 将主带高度设置为 0
  3. 添加详图波段,并将主数据集和详图数据集中的字段放入此波段

Picture showing the FastReport designer with a master band with 0 height, and a detail band

评论

0赞 SergeGirard 10/19/2023
我不认为你的回答符合要求。在问题中,codeGood 需要 3 行。当我使用这种东西时,即对于盒子标签,我会在打印之前处理数据(可塑性)(在这种情况下生成 3 条记录)
1赞 SergeGirard 10/19/2023 #2

使用 FrxDBUserDataset FastReport Design Form Design and Run 代码

procedure TForm16.Button1Click(Sender: TObject);
begin
frxreport1.ShowReport();
end;


// IMPORTANT  frxUserDetail.RangeEnd:=reCount
procedure TForm16.frxDBMasterFirst(Sender: TObject);
begin
frxUserDetail.First;
frxUserDetail.RangeEndCount:=FDMaster.FieldByName('QTE').AsInteger;
end;

procedure TForm16.frxDBMasterNext(Sender: TObject);
begin
frxUserDetail.First;
frxUserDetail.RangeEndCount:=FDMaster.FieldByName('QTE').AsInteger;
end;

我的 SQL 数据 (Firebird) 是

SELECT CAST('LIGNE 1' AS VARCHAR(20)) DESCRIPTION,3 QTE FROM RDB$DATABASE
UNION
SELECT CAST('LIGNE 2'  AS VARCHAR(20)),1 FROM RDB$DATABASE

评论

0赞 codeGood 10/23/2023
感谢您的回复,但我想打印 Maser 和详细信息 3 次,即 Master 1
0赞 codeGood 10/23/2023
我更新了我最初的问题以澄清。请看一看。:)
0赞 SergeGirard 10/23/2023
如果你看一下我的回复,你可以看到打印的数据('LIGNE 1'、'LIGNE 2')来自主数据源,所以我不明白你的问题。我认为您简化了您的问题,也许是因为缺少详细数据?
0赞 codeGood 10/23/2023
我不确定我是否了解 RangeEndCount 属性是什么......你能详细说明一下吗?
0赞 codeGood 10/23/2023
另外,我在您的 Frx 屏幕截图中看到 Ligne 1 实际上在 Frx 的 DetailsData 中,在我的情况下,情况并非如此,因为我希望根据数量打印主数据......