我正在制作一份报告,显示客户名单和一些数字值。 我使用公式来对我的小组进行排序,具体如下:
if {Db.SortOrder} = 0 then
{Db.CostumerName}
else
ToText({Db.Value},'00000000',0,'')
通过这种方式,我可以按客户名称或值进行分组,问题是我需要对它们使用不同的排序顺序,当我按CostumerName分组时按升序排序,当我按Value分组时降序。我怎样才能实现这一目标?我使用crAscendingOrder,crDescendingOrder尝试了“按公式排序组”,但它说我需要使用costant而不是变量(在我的情况下我用的是db.SortOrder)
答案 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}
最后,在记录排序专家中引用此字段:
答案 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}