是否存在表单位于网格中的列中执行运行总计的示例。用户订购和过滤网格会影响运行总计列。
如果仅按交易日期排序,我可以轻松执行上述操作,但包括用户排序和过滤我假设我们必须使用数据源 range()和 rangecount ()函数(参见 SysQuery :: mergeRanges()示例)然后迭代这些函数以应用过滤,然后包含dynalinks。订购也是如此,虽然这现在更加复杂。
任何建议表示赞赏。建议任何赞赏(例如:投票问题!)。
答案 0 :(得分:2)
您可以使用此策略将其实现为form datasource display method:
复制表单的数据源查询(不需要SysQuery::mergeRanges
):
QueryRun qr = new QueryRun(ledgerTrans_qr.query());
使用qr
对记录进行迭代和求和,在当前记录后停止:
while (qr.next())
{
lt = qr.getNo(1);
total += lt.AmountMST;
if (lt.RecId == _lt.RecId)
break;
}
如果排序顺序是固定的(使用sum(AmountMST)并添加where约束),这可以使性能更高。
返回总数
这是非常低效的(次级时间O(n^2))。
如果没有太多记录,缓存结果(在地图中)可能会使其可用。
答案 1 :(得分: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;
}