【问题标题】:Crystal Reports - SECTION NAME - Is there a way to conditionally check or store the SECTION NAME in a within formula fieldCrystal Reports - 部分名称 - 有没有办法有条件地检查或存储部分名称在公式字段中
【发布时间】:2020-06-18 15:58:16
【问题描述】:

我想检查公式在哪个部分,然后有条件地从关联的详细信息行数据中返回特定值(数据库值或计算值)。尽量避免为每个详细信息部分设置单独的公式。

我尝试设置循环计数器,但只有在记录编号发生变化时,相同部分(详细信息 a、b、c、d 等)的循环计数器才会发生变化。我设置了一个 Whileprinting 公式(Init & Calc)但没有成功

  • 标题部分 - 全局 Numbervar N:=0;
  • 详细信息部分 - WhilePrintingRecords;数字变量 N;全局 NumberVar N:=N+1

再次想设置一个公式,该公式将根据其所在的部分返回不同的值。

公式类似于...

"section Name" = Details a, Details b, Details c, or Page Header a, Page Header b, etc

If "Section Name" = "Details a" then \\ Return Value 1 {NETSALES_TODAY} Else if "Section Name" = "Details b" then \\ Return Value 2 {NETSALES_MTD} Else if "Section Name" = "Details c" then \\ Return Value 3 {NETSALES_QTD} Else {NETSALES_YTD}

【问题讨论】:

    标签: crystal-reports


    【解决方案1】:

    编辑:它似乎不起作用 - 由于历史原因,它被保留在这里(并且因为知道它不起作用仍然很有价值)。


    我认为你非常接近。我现在无法测试它,但请尝试一下:

    1. 像您一样创建一个公式。我们称之为{@Declaration}。
    全局数字变量 N := 0;
    1. 像以前一样创建另一个公式。我们称之为 {@Increment}。
    全局数字变量 N; N := N + 1;
    1. 将 {@Declaration} 放在报告标题中。
    2. 将 {@Increment} 放在三个详细信息部分
    3. 修改您的公式以检查 N mod 4 的值是 0、1、2 或 3。也许您不需要该 mod(以防有许多详细信息行)。
    全局数字变量 N; 如果 N mod 3 = 0 则 {NETSALES_TODAY} 否则,如果 N mod 3 = 1 则 {NETSALES_MTD} 否则,如果 N mod 3 = 2 则 {NETSALES_QTD} 否则 {NETSALES_YTD}

    有意的区别是 (1) 将公式重复 3 次,以及 (2) 对公式本身进行小幅修正。

    【讨论】:

    • 我测试了您的回答/回复。感谢您的尝试,但增量公式不会为每个详细信息部分获得 +1。我没有通过我的在线搜索找到任何说明这将起作用的文档或示例。
    • 我可能会将我的问题重新发布到此站点,并专注于查看是否有办法识别公式所在的部分。即,如果“Section Name”=“Details c”跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多