Axapta 表格2009年运行总计

Axapta 表格2009年运行总计,axapta,dynamics-ax-2009,x++,Axapta,Dynamics Ax 2009,X++,是否有一个表格的任何地方都可以在网格中的列中执行运行总计的示例。网格的用户排序和筛选将影响“运行总计”列 如果只是按事务日期排序,但包括用户排序和筛选,我认为我们必须使用datasource range()和rangecount()函数(例如,请参见SysQuery::mergeRanges()),然后迭代这些函数以应用筛选,然后包括dynalinks。订购也一样,不过现在更复杂了 如有任何建议,我们将不胜感激。任何建议的赞赏(如:投票支持该问题!)。您可以使用以下策略将其作为一个工具来实施:

是否有一个表格的任何地方都可以在网格中的列中执行运行总计的示例。网格的用户排序和筛选将影响“运行总计”列

如果只是按事务日期排序,但包括用户排序和筛选,我认为我们必须使用datasource range()和rangecount()函数(例如,请参见SysQuery::mergeRanges()),然后迭代这些函数以应用筛选,然后包括dynalinks。订购也一样,不过现在更复杂了


如有任何建议,我们将不胜感激。任何建议的赞赏(如:投票支持该问题!)。

您可以使用以下策略将其作为一个工具来实施:

  • 复制表单的数据源查询(无需
    SysQuery::mergeRanges
    ):

    QueryRun qr=新的QueryRun(ledgerTrans\u qr.query())

  • 使用
    qr
    对记录进行迭代和求和,在当前记录后停止:

    while(qr.next())
    {
    lt=qr.getNo(1);
    总计+=lt.AmountMST;
    如果(lt.RecId==_lt.RecId)
    打破
    }

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

  • 返回总数

  • 这是非常低效的原因(次二次时间,)

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


    更新:。

    欢迎对以下代码提出任何意见或批评。简关于该方法速度缓慢的观察仍然有效。正如你所看到的,这是对他最初答案的修改

    //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;
    }
    

    回答得很好,简。非常感谢你抽出时间。我刚刚实现了这一点,我可以确认您对现在较慢的表单响应的观察。你好,阿格!我刚刚进行了测试,网格用户过滤器似乎没有应用到我们正在使用的查询对象。我尝试了ledgerTrans_qr.query()和this.query(),但它们都没有包含我添加到网格中的标准列筛选值。欢迎任何建议。是否缓存显示方法结果?当用户更改查询时,应该刷新缓存,
    executeQuery()
    将是一个好地方。用户过滤器肯定会显示在您的查询中!
    this.queryRun().query()
    ledgerTrans\u qr.query()
    都有效!但是
    this.query()
    不起作用,因为这是初始查询。这应该起作用。不过,上面的pastebin中给出的查询解决方案可能要快得多(选择字段列表,在地图中缓存)。