You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对Data Delegate数组排序并计算填充滚动余额(含代码)

解决Acumatica中Data Delegate的排序与滚动余额计算问题

我来帮你搞定这个需求——按交易日期排序后计算滚动余额,结合你给出的代码片段,咱们一步步来实现:

第一步:确保数据按交易日期排序

你已经在PXSelectOrderBy里指定了按tranDate升序排序,但如果你的importlist是通过自定义查询(比如从ARPayment和另一个视图取数合并)构建的,这个内置排序可能不会生效。所以需要手动对列表进行排序:

protected virtual IEnumerable FBData() 
{
    List<FundBalanceData> importlist = new List<FundBalanceData>();
    PXSelectBase<ARPayment> cmd = ...; // 你的现有查询逻辑,从ARPayment或其他视图取数填充importlist

    // 关键:对importlist按交易日期升序排序,确保顺序正确
    importlist = importlist.OrderBy(item => item.TranDate).ToList();

    // 后续计算滚动余额的逻辑放在这里
}

第二步:计算滚动余额

遍历排序后的列表,维护一个累计余额变量,逐行计算并赋值给FundBalanceData对应的字段(假设你已经在DAC里定义了RunningBalance字段来存储滚动余额):

protected virtual IEnumerable FBData() 
{
    List<FundBalanceData> importlist = new List<FundBalanceData>();
    PXSelectBase<ARPayment> cmd = ...; // 你的现有取数逻辑

    // 1. 先排序
    importlist = importlist.OrderBy(item => item.TranDate).ToList();

    // 2. 计算滚动余额
    decimal runningBalance = 0;
    foreach (var item in importlist)
    {
        // 根据你的业务逻辑调整:比如收入加、支出减,这里假设TranAmt是交易金额字段
        runningBalance += item.TranAmt ?? 0;
        // 将计算结果赋值给DAC的滚动余额字段
        item.RunningBalance = runningBalance;
    }

    // 3. 返回处理后的数据集
    foreach (var item in importlist)
    {
        yield return item;
    }
}

注意事项

  • 确保TranDate是DateTime类型,避免字符串排序导致的日期顺序错误。
  • 根据你的实际业务调整余额计算逻辑:比如如果是应付/应收场景,可能需要区分借贷方向,对金额做加减调整。
  • 如果importlist是直接从PXSelectOrderBy查询获取的结果,也可以跳过手动排序,但自定义合并多数据源的列表必须手动排序。

内容的提问来源于stack exchange,提问作者Muralidharan Ramakrishnan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:39:12