Crystal Report组排序顺序

时间:2014-02-21 10:33:20

标签: sorting crystal-reports

我正在制作一份报告,显示客户名单和一些数字值。 我使用公式来对我的小组进行排序,具体如下:

if {Db.SortOrder} = 0 then
    {Db.CostumerName}
else
     ToText({Db.Value},'00000000',0,'') 

通过这种方式,我可以按客户名称或值进行分组,问题是我需要对它们使用不同的排序顺序,当我按CostumerName分组时按升序排序,当我按Value分组时降序。我怎样才能实现这一目标?我使用crAscendingOrder,crDescendingOrder尝试了“按公式排序组”,但它说我需要使用costant而不是变量(在我的情况下我用的是db.SortOrder)

2 个答案:

答案 0 :(得分:9)

我的方法:

首先,创建一个参数字段({?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;

接下来,创建一个将用于排序的公式字段:

// {@Sorted Field}
Select {?Sorted Field}
Case "Customer": {Db.Customer}
Case "Value": ASCII(ToText({Db.Value},'00000000',0,''), crDescendingOrder)
Default: {Db.Customer}

最后,在记录排序专家中引用此字段:

enter image description here

答案 1 :(得分:0)

在我的情况下,我只需要选择要排序的字段。我创建了名为SortField的参数字段作为静态文本,并创建了我想要显示的三个友好值,然后创建了引用它的公式。我有水晶2011所以我的公式看起来像这样:

// {@Sorted Field}
Select {?SortField}
Case "BIN":{V_ITEM_MASTER.BIN}
Case "ORDER REF":{V_ITEM_MASTER.HEAT}
Case "PART":{V_ITEM_MASTER.PART}
Default: {V_ITEM_MASTER.BIN}