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