4

在 Crystal Reports v 11 中,是否可以在报表上显示“参数说明”值,而不是仅显示参数值?每当我将参数拖到报表上显示它时,只显示值,我想打印描述。

注意:我使用的是 Crystal 11 (XI),而不是 .NET Crystal Report 插件。

4

6 回答 6

4

我同意 Ryan 的观点——没有本地机制来获取这些值。用户函数库 (UFL) 可能是一种值得研究的方法。

取而代之的是,我以多种方式处理此问题:

  1. 带有 case 语句的公式,用于将值转换为描述。
  2. 一个与#1 相同的自定义函数;自定义函数可以通过 BOE 存储库与其他报告共享
  3. 使用子报表查询可以将值转换为描述的表。将值存储在 Detail 部分的数组中(被抑制),然后在报表页脚中加入()数组。如果您将子报表嵌入其自己的部分,它将根据需要扩展以容纳扩展列表
  4. 您也许可以调整 #3 以使用 BO 的查询作为 Web 服务 (QAAWS) 公开的值列表,但我没有对此进行过实验。如果它没有关联的模式文档,CR 将无法将 XML Web 服务用作数据源。
于 2011-08-23T02:08:03.270 回答
2

首先,将参数值和描述连接在一起,并使用竖线“|”分隔两个值 或其他较少使用的字符

示例:CustomerID、CustomerName -> 12345|ABC 公司

其次,使用带有数组的Crystal 函数在报表上显示描述面,即分隔符之后的所有内容

Numbervar i;
Numbervar j;
StringVar Array z := "";

Local StringVar Array x := split(Join({?My Parameter},";"),";");

j := count(x);

redim preserve z[j];

for i := 1 to j do(
z[i] := right(x[i],Length(x[i])-instr(x[i],"|")) 
);

join(z,",")

第三。创建第二个函数,如上述函数,将参数值返回到分隔符左侧,用作报表选择公式的一部分**

于 2011-10-26T19:57:49.650 回答
0

我不相信有办法直接获得描述(分散在互联网上的其他几篇文章似乎同意)。如果您有少量(-ish)参数选项,您可以创建一个公式或函数,其中包含一个将值转换为描述的案例陈述。

于 2011-08-23T00:17:45.277 回答
0

我感到震惊的是,Crystal Reports 能够以某种方式检索参数的描述,但它并没有公开它以在公式中使用。被迫复制参数和描述的定义在我看来是一种不好的形式,仅仅是因为在编程时不应该复制东西。另一种技巧(除了列出的所有方法)是将您的值和描述作为 SQL 数据源的值(在 SQL 中硬编码它们)。然后,您可以从所述数据源填充您的参数,并且您将有可用的描述作为一个字段。这样你就只有“一个版本的真相”,将你的价值观映射到你的描述中,尽管更动人。

于 2018-11-16T17:47:40.993 回答
0

请参阅:1678487 - 如何在 Crystal Reports 中显示参数描述而不是参数值:https ://apps.support.sap.com/sap/support/knowledge/public/en/1678487

于 2018-11-16T21:19:22.693 回答
-1

有一个新功能实际上可用于在报表上显示参数说明。

来源:https ://launchpad.support.sap.com/#/notes/2037542

我将为那些不必访问此页面的用户粘贴整个文档。

Crystal Reports 2016 中添加了一个新函数 GetValueDescriptions(),以允许用户创建可以操作/显示参数选定值描述的公式。

GetValueDescriptions() 支持各种参数(单个和多个、离散和范围)。下面是一个公式示例,其中 {?customerMultiDiscreteAndRange} 是一个多范围参数:

本地 stringVar 范围数组 im := GetValueDescriptions ({?customerMultiDiscreteAndRange}); 本地数字变量 i := 1; 本地字符串变量输出:=“”;

while i <= count(im) do ( if (IncludesLowerBound ({?customerMultiDiscreteAndRange}[i])) then ( out := out + "["; ) else ( out := out + "("; );

if (HasLowerBound ({?customerMultiDiscreteAndRange}[i])) then ( out := out + GetLowerBound(im[i]) );

出:=出+“..”;

if (HasUpperBound ({?customerMultiDiscreteAndRange}[i])) then ( out := out + GetUpperBound(im[i]) );

if (IncludesUpperBound ({?customerMultiDiscreteAndRange}[i])) then ( out := out + "]"; ) else ( out := out + ")"; );

if (i < count(im)) 那么 out := out + ", ";

我:=我+1;);

出去;</p>

还要注意两个新函数 - GetLowerBound() 和 GetUpperBound(),它们可用于获取正确的下限/上限描述。如果 Maximum() 和 Minimum() 返回交换的描述,这两个特别有用。

上面的公式示例可以很容易地调整,例如同时显示值和描述,或者满足更多的报告需求。

要使用这些功能,请将 Crystal Reports 升级到已进行增强的版本。

有关详细信息和可用补丁,请参阅 SP 补丁级别部分。

对于 SAP Crystal Reports,Eclipse 版本:

仅自 SP22 起,运行时才支持这些函数,但有以下限制:

SAP Crystal Reports Eclipse 运行时版本不支持静态多范围参数,与之前相同。支持动态多范围参数。SAP Crystal Reports(Eclipse 版本)中的嵌入式设计器不支持显示描述的“值选项”。如果您有一个在 SAP Crystal Reports 2016 中设计的现有报表,其中包含参数的“值选项”以显示描述,则在嵌入式设计器中重新保存的任何修改都将覆盖“值选项”以显示值。相反,SAP Crystal Reports Eclipse 运行时版本支持在 SAP Crystal Reports 2016 中创建的带有“值选项”以显示描述的报表。要下载适用于 Eclipse 的 SAP Crystal Reports 的最新支持包,请执行以下操作:

https://wiki.scn.sap.com/wiki/display/BOBJ/SAP+Crystal+Reports+version+for+Eclipse+-+Downloads

于 2020-11-02T19:21:51.540 回答