2014-02-21 235 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}