2014-02-21 232 views
1

我正在制作一份报告,显示costumers和一些数值的列表。 我用一个公式中的顺序排序我的组,至极如下:Crystal Report组排序顺序

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

这样我可以负荷消费的名称或值组,问题是,我需要使用不同的排序顺序为他们,当我按CostumerName分组时按升序排列,当按Value分组时按降序排列。我怎么能做到这一点?我已经试过“式排序组”使用crAscendingOrder,crDescendingOrder但它说我需要涂用costant,而不是一个变量(在我的情况,我用db.SortOrder)

回答

8

我的方法:

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

+0

谢谢你的详细回应,但它似乎并没有在我的情况下工作。在记录排序专家中,我无法取消选择我的分组公式作为排序字段,它总是排在最前面。 – SilentRage47

+0

对不起,我只注意到我的错误。将公式添加到组排序专家。我今天晚些时候会改变答案。 – craig

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}