我需要创建一个字段来放置组页脚#1,它按客户类型显示最新价格。分组是item_ID(见下文)。因此,例如,如果随着时间的推移,工厂和零售商店的价格会有不同的交易,那么它只会显示上次为工厂出售该商品的价格(我有一个单独的零售商店字段)。我尝试了一些东西,但没有任何工作。例如:
详细程度: if {TRANSACTIONS.TRANDATE} = Maximum({@FactoryTranDate},{TRANSACTION_LINES.ITEM_ID})然后 {TRANSACTIONS_LINES.PRICE}
FactoryTranDate基本上是:如果客户类型=工厂,那么trandate。然后我在组页脚#1上创建了最大值。
这在交易行上正确显示,但如果该项目的最后一笔交易不是工厂,则摘要行上的交易将为0。我试图做一个Max of the detail level字段,但它没有出现在我的汇总字段中,我假设它在汇总摘要时会感到困惑吗?
答案 0 :(得分:0)
听起来你遇到的问题是你试图在页脚中打印的数据列有多行,你无法预测你想要的值在这些行中的位置。所以当你到达页脚时,它只有最后一行打印的值。
要解决此问题,您可能需要使用一些公式字段来创建变量,这些变量可用于在打印时从正确的行存储所需的值。
我打算使用3个公式字段。一个用于初始化变量并将其设置为默认值零。将此公式字段放在与页脚对应的标题中,这将确保该变量存在,并重置为此标题中每个分组值的默认值。公式看起来像这样:
WhilePrintingRecords;
Shared NumberVar price:=0.00;
第二个公式将再次声明相同的变量,并且它还将包含一些逻辑以知道何时设置变量的值。此公式字段应放在打印分组详细记录的部分中。公式看起来像这样:
WhilePrintingRecords;
If <condition to evaluate> Then
Shared NumberVar price:={TRANSACTIONS_LINES.PRICE}
虽然根据您提供的信息,我不完全确定您要在此评估的条件,但我怀疑它将与if customer type = factory
一致。但是,只有当您想要捕获分组中详细记录的价格时,它才是唯一的条件。如果您有多个可能属实的情况,那么您需要对它们进行排序,使您想要捕获的那个在组中最后打印。既然你说它应该是最后一个工厂价格,那么我会按交易日期排序,变量将改变其每个具有真实条件的记录的价值,并且只保留具有最新交易日期的价格。< / p>
第三个公式字段仅用于在页脚中打印变量的值。此字段将放置在页脚部分中,并将在报表上显示变量的值。该字段的公式如下所示:
WhilePrintingRecords;
Shared NumberVar price;
如果您不希望它们在报表上打印,则可以禁止在标题和详细信息部分中使用的公式字段,但我建议您等待,直到您在压缩它们之前在页脚中打印了最终值。如果您不熟悉以这种方式使用变量,这将允许您查看变量的值如何随报告生成而更改。如果这是一个新主题,您可能还想了解水晶报表中变量的范围。我在这里的建议都使用SHARED范围,但也有LOCAL和GLOBAL范围。在你的情况下,GLOBAL可能会更好,但我倾向于在这些例子中使用SHARED,因为它们具有最广泛的范围。 LOCAL绝对不适合你。