递增、显示和打印页数达到参数最大值

Increment, display, and print a number of pages up to a Parameter maximum

我正在尝试设置一个 Crystal 报告来生成每页包含 "Pallet N of M" 行的货盘标签。

数据库中的订单只有一个条目,其中包含标签的所有其他信息。我的问题是托盘的数量在打印之前是未知的,并且每个标签都需要相同的订单信息和托盘 ID。我正在寻找的是让用户输入托盘总数的参数,然后让 Crystal 生成正确数量的唯一标签。

例如,如果订单有 4 个托盘,那么 Crystal 应该生成 4 个标签副本,每个副本的唯一区别是最后一行应该是 'Pallet 1 of 4'、'Pallet 2 of 4'、'Pallet 3 of 4' 和 'Pallet 4 of 4'。

我能想到的唯一解决方案是创建数量等于托盘最大数量的部分,所有部分都包含我的真实数据作为子报告,然后抑制任何大于输入参数的部分。我试图避免这种情况,因为我们可能在给定订单上有超过 50 个托盘,因此创建起来会很乏味并且不是一个非常干净的解决方案。

-= 编辑 =-

非常感谢 Aliqux 提供的解决方案。最后,我需要更改语法以与 Oracle 兼容,并在报告中包含 LINKVALUE 字段,但答案是 99%,特别是考虑到我没有提到我的数据源是 Oracle。我最终使用的命令语法(我的参数名为 TotalPallets)是:

SELECT -1 AS "LINKVALUE" 来自 table WHERE rownum <= {?TotalPallets}

您需要向 table 添加命令。

1) 在您使用的数据库中的数据库专家下 select 添加命令。

2) 点击创建创建一个参数。

3) 创建请求的值,如果需要,您可以将默认值留空,并将值类型更改为数字。 (我将调用我的参数计数器)

4) 将以下内容放入 SQL 查询中,其中 table 是您使用的主要 table

SELECT TOP {?Counter}
-1  AS LINKVALUE
FROM table

5) 点击确定并在出现提示时输入一个值

6) 在 links link 中,一个数字字段永远不会变成负数,因为我们使用 -1 作为基数,到命令 [=45= 中的 LINKVALUE ].

7)Link选项如下

联接类型:内部联接,强制联接:未强制,Link类型:!=

8) 在您的报告中创建一个公式,该公式具有从 1 开始的共享数值。

shared numbervar counters;
if counters = {?Counter} then counters := 0;
counters := counters + 1

9) 您可以为标签使用该公式和计数器参数

totext({@Counts},0,"")+" of "+totext({?Counter},0,"")

信用参考:https://blogs.sap.com/2014/01/24/duplicating-data-details-records-n-times-eg-repeating-labels-n-times/