1

是否有任何表格的示例在位于网格内的列中执行运行总计。网格的用户排序和过滤会影响运行总计列。

如果仅按交易日期排序,我可以轻松执行上述操作,但包括用户排序和过滤我认为我们必须使用数据源range()rangecount()函数(参见SysQuery::mergeRanges( )例如)然后遍历这些以应用过滤,然后包括动态链接。订购也是如此,尽管现在更复杂了。

任何建议表示赞赏。建议的任何赞赏(如:对问题投票!)。

4

2 回答 2

2

您可以使用以下策略将其实现为表单数据源显示方法:

  1. 复制表单的数据源查询(不需要SysQuery::mergeRanges):

    QueryRun qr = new QueryRun(ledgerTrans_qr.query());

  2. qr使用, 在当前记录之后停止对您的记录进行迭代和求和:

    while (qr.next()) { lt = qr.getNo(1); total += lt.AmountMST; if (lt.RecId == _lt.RecId) break; }

    如果排序顺序是固定的(使用 sum(AmountMST) 并添加 where 约束),这可以提高性能。

  3. 返回总计

这导致效率非常低(次二次时间,O(n^2))。

如果没有太多记录,缓存结果(在地图中)可能使其可用。

更新:一个工作示例

于 2012-08-14T10:38:27.000 回答
0

欢迎对以下代码提出任何意见或批评。Jan 关于该方法缓慢的观察仍然有效。如您所见,这是对他原始答案的修改。

//BP Deviation Documented
display AmountMST XXX_runningBalanceMST(LedgerTrans _trans)
{
    LedgerTrans localLedgerTrans;
    AmountMST   amountMST;
    ;
    localLedgerTrans    = this.getFirst();
    while (localLedgerTrans)
    {
        amountMST           += localLedgerTrans.AmountMST;
        if (localLedgerTrans.RecId == _trans.RecId)
        {
            break;
        }
        localLedgerTrans    = this.getNext();
    }
    return amountMST;
}
于 2012-08-16T12:06:36.587 回答