Sil*_*e47 2 sorting crystal-reports
我正在制作一份报告,显示客户名单和一些数字值.我使用公式来对我的小组进行排序,具体如下:
if {Db.SortOrder} = 0 then
{Db.CostumerName}
else
ToText({Db.Value},'00000000',0,'')
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我可以按客户名称或值进行分组,问题是我需要对它们使用不同的排序顺序,当我按CostumerName分组时按升序排序,当按值分组时降序.我怎样才能实现这一目标?我使用crAscendingOrder,crDescendingOrder尝试了"按公式排序组",但它说我需要使用costant而不是变量(在我的情况下我使用了db.SortOrder)
我的方法:
首先,创建一个参数field({?Sorted Field})来选择排序字段:String; 静态列表,包括"客户"和"价值"; 默认值为'客户'
接下来,创建一个自定义函数,将字符串转换为ASCII表示,允许更改顺序:
// ASCII()
Function (Stringvar characters, Optional Numbervar direction:=crAscendingOrder)
Local numbervar i;
Local stringvar c;
For i:= 1 To Len(characters) Do (
If direction=crAscendingOrder Then
c:=c + ToText( Ascw(Mid(characters,i,1)), "#")
Else
c:=c + ToText( 256- Ascw(Mid(characters,i,1)), "#")
);
c;
Run Code Online (Sandbox Code Playgroud)
接下来,创建一个将用于排序的公式字段:
// {@Sorted Field}
Select {?Sorted Field}
Case "Customer": {Db.Customer}
Case "Value": ASCII(ToText({Db.Value},'00000000',0,''), crDescendingOrder)
Default: {Db.Customer}
Run Code Online (Sandbox Code Playgroud)
最后,在记录排序专家中引用此字段:
