先前值或先前值的公式

时间:2019-04-12 16:05:18

标签: crystal-reports

我想突出显示基于先前/优先值的行。请参阅随附的图像以获取示例数据 Image of Crystal report sample

如果任何事件或任何事件之前的事件具有相同的Sch时间但ETA不同,则我想突出显示该行。在我的案例中,“ 1温斯顿爵士”将是突出显示的行

if({@ Activity})='P / U'和({@Sch_Time})=上一个({@Sch_Time}) 和({@Addr})<>上一个({@Addr})

和({@ETATime})>前一个({@ETATime}),然后crRed else crNoColor

1 个答案:

答案 0 :(得分:0)

一个可能的选择是使用共享或全局变量。如果您对Crystal Report中的变量不熟悉,请Here is a link to a tutorial

通过使用变量,您可以存储符合条件的最后一条记录中的数据。例如,以下公式将存储上一次{@Sch_Time}的{​​{1}}和{@ETATime}的值。

{@Activity} = "P/U"

您可以在“公式字段”中使用此公式,然后将其放置在报告中打印每条记录的部分。

后面的部分可以使用以下公式控制背景色以突出显示记录。

Shared StringVar schTime;
Shared StringVar etaTime;
Shared StringVar address;

If {@Activity} = "P/U" Then
    schTime := {@Sch_Time}
    etaTime := {@ETATime}
    address := {@Addr}
Else
    schTime := schTime
    etaTime := etaTime
    address := {@Addr};

这种方法有些细微之处可能对您来说是有问题的。例如,它只能存储最后一条记录Shared StringVar schTime; Shared StringVar etaTime; Shared StringVar address; If {@Activity} = "P/U" and {@Sch_Time} = schTime and {@Addr} <> address and {@ETATime} > etaTime then crRed else crNoColor; 的变量值。一旦遇到一条新记录(该语句为true),变量的值就会使用新记录中的值进行更新。

在不了解您的特定要求的情况下,我不能肯定地说这种方法对您有用。我认为这个问题将在Crystal Report之外以及从中检索数据的数据库中更容易解决。例如,您可以创建一个存储过程,该存储过程选择数据并使用SQL创建包含布尔值的列,以指示是否应突出显示每一行。

我不确定我还能提供多少帮助。最好按照我的建议尝试一些事情,或者就该方法提出一个新的问题,或者等待别人是否有更好的主意。