打印记录Crystal Reports的多个副本

时间:2014-11-04 20:32:15

标签: crystal-reports

我的报告只有一条记录,但是,用户指定需要打印的次数,让我们说10次。每次打印时,它会打印同一份报告中的4份。像这样,Page 10 x 4,Page 2 x 4,Page 3 x 4等等。有10个应对,它们将共40页。

更新

我能够根据用户输入的值获得我需要的所有页面。所以,如果有10个托盘我有40页标签,这是正确的。现在需要显示的控件号部分。它有点像页码,但每4页数需要增加1.我假设我可以使用WhilePrinterRecords和一些增量,但我仍然是Crystal的新手并且不熟悉它。

Example:

Page 1: Control number 1
Page 2: Control number 1
Page 3: Control number 1
Page 4: Control number 1
Page 5: Control number 2
Page 6: Control number 2
Page 7: Control number 2
Page 8: Control number 2

这将持续到没有更多页面要打印。

2 个答案:

答案 0 :(得分:1)

如果您希望每个标签有4个副本,那么您可以在报告上创建具有相同信息的4个部分。确保为每个页面分配标签大小(例如4x6)。例如如果您的标题上有这些信息,请创建PHa,PHb,PHc和PHd,相同的细节或PF。

不知道这是否适合你,但至少是一个建议。您可以创建具有相同信息的抑制部分(例如10个部分)并创建一个控制该条件的参数默认为4.如果用户打印5,则将启用第5部分,如果要打印3则相同第四。

Upadte:如何获得增量:

在页面页脚上放置一个公式,如下图所示。它将在获取整数时返回值,并在等于0时将其抑制(右键单击它,数字选项卡,自定义,抑制为0)。

if pagenumber = Ceiling(pageNumber,4) then numbervar page := page +1

然后在你的PF上放置另一个公式,就像下面一个公式一样,并在pagenumber = Ceiling(pageNumber,4)时禁止它,所以当另一个有值时它将不会显示,而另一个重叠另一个以获得相同位置的值。

if {1st formula} <> 0 then numbervar page1 := {1st formula};
page1 + 1

第二次更新:

因为是一个标签而且您的详细信息充当新页面,请执行以下操作:

创建一个新的详细信息部分,因此您将获得详细信息a和b,并将公式放在详细信息b

答案 1 :(得分:0)

我已经使用了额外的表来进行这些技巧;这些表必须链接到报告以乘以主要查询结果。必须注意不要让多个用户打印输出混合。

示例,假设您的报表查询有一些唯一的ID链接,并且您的用户/会话也有一些唯一ID:

  • 你创建表cr_special(reportid int,userid int,ctlnumber int)
  • 您设计报告,通过reportid链接到此表并按userid过滤;更改ctlnumber字段取自您的特殊表
  • 打印前,删除所有带有reportid / userid组合的记录并插入新记录
  • 您打印报告,将userid作为参数

假设您要打印10个增加数字的报告 - 然后您将10条记录插入特殊表格,ctlnumber从1增加到10。

此解决方案的变体是使用其他一些非相关表,例如我们的包含所有日期的日期表:)

这两种解决方案都很难看,但它们通常都有效。

另一种方法是使用一些存储过程将这些序列号作为记录返回,并将报告链接到此类过程;但是,Crystal Reports和存储过程的行为并不总是很好。