Acumatica 如何对数据委托数组进行排序
我在数据委托中使用两个视图填充数据。我必须根据交易日期排序,计算流动余额。如何对数据进行排序并填充运行余额 委托代码如下所示Acumatica 如何对数据委托数组进行排序,acumatica,Acumatica,我在数据委托中使用两个视图填充数据。我必须根据交易日期排序,计算流动余额。如何对数据进行排序并填充运行余额 委托代码如下所示 [PXVirtualDAC] public PXSelectOrderBy<FundBalanceData, OrderBy<Asc<FundBalanceData.tranDate>>> fbdata; protected virtual IEnumerable FBData() { List&
[PXVirtualDAC]
public PXSelectOrderBy<FundBalanceData, OrderBy<Asc<FundBalanceData.tranDate>>> fbdata;
protected virtual IEnumerable FBData()
{
List<FundBalanceData> importlist = new List<FundBalanceData>();
PXSelectBase<ARPayment> cmd = new PXSelectJoin<ARPayment, InnerJoin<GLTran, On<ARPayment.batchNbr, Equal<GLTran.batchNbr>>,
InnerJoin<PMProject, On<GLTran.projectID, Equal<PMProject.contractID>>>>,
Where<GLTran.projectID, Equal<Current<PMProject.contractID>>,
And<ARPayment.docType, Equal<ARPaymentType.prepayment>>>>(Base);
foreach(PXResult<ARPayment,GLTran,PMProject> line in cmd.Select())
{
FundBalanceData data = new FundBalanceData();
ARPayment arp = line;
PMProject pmp = line;
GLTran glt = line;
data.BAccountID = arp.CustomerID;
data.CreditAmount = glt.CreditAmt;
data.DebitAmount = glt.DebitAmt;
data.RefNbr = arp.RefNbr;
data.DocType = arp.DocType;
data.Desc = arp.DocDesc;
data.TranDate = arp.DocDate;
importlist.Add(data);
}
PXSelectBase<APAdjust> cmd2 = new PXSelectJoin<APAdjust, LeftJoin<GLTran, On<APAdjust.adjBatchNbr, Equal<GLTran.batchNbr>, And<APAdjust.adjdAPAcct, Equal<GLTran.accountID>>>,
InnerJoin<APPayment, On<APAdjust.adjgRefNbr, Equal<APPayment.refNbr>, And<APAdjust.adjgDocType, Equal<APPayment.docType>>>,
InnerJoin<APTran,On<APTran.refNbr,Equal<APAdjust.adjdRefNbr>,And<APTran.tranType,Equal<APAdjust.adjdDocType>>>>>>,
//InnerJoin<GLTran, On<APTran.projectID, Equal<GLTran.projectID>>>>>,
Where<APAdjust.adjgDocType, Equal<APPaymentType.prepayment>, And<APTran.projectID, Equal<Current<PMProject.contractID>>, And<GLTran.accountID, NotEqual<APPayment.aPAccountID>>>>>(Base);
foreach (PXResult<APAdjust,GLTran,APPayment,APTran> line in cmd2.Select())
{
FundBalanceData data = new FundBalanceData();
APPayment arp = line;
GLTran glt = line;
APAdjust apd = line;
data.BAccountID = arp.VendorID;
data.CreditAmount = glt.CreditAmt;
data.DebitAmount = glt.DebitAmt;
data.RefNbr = arp.RefNbr;
data.DocType = arp.DocType;
data.Desc = arp.DocDesc;
data.TranDate = arp.DocDate;
importlist.Add(data);
}
decimal? balance = decimal.Zero;
foreach(FundBalanceData data in importlist)
{
balance = balance + (data.CreditAmount - data.DebitAmount);
data.Balance = balance;
}
return importlist;
}
[PXVirtualDAC]
公共PXSelectOrderBy以下是关于T200 Acumatica Framework基础课程数据视图结果集排序的部分:
数据视图按照以下规则执行委托:
- 如果定义了委托,则调用该委托
- 如果委托返回null,则执行BQL命令
- 如果委托返回一个对象,则根据BQL命令的OrderBy子句对结果重新排序
- 如果未定义委托,请执行BQL命令
数据视图返回的结果集始终按顺序排序
在数据视图对象的类型中指定的BY子句。如果你分类
在委托内以不同的方式记录数据,即结果集
将在数据视图返回之前重新排序
代码中余额的计算在返回结果集之前完成。这就是为什么在你们等待的时候它并没有被计算出来。在返回结果集后,将进行排序
更新1
将cmd
和cmd2
更改为以下查询:
PXSelectBase<ARPayment> cmd = new PXSelectJoin<ARPayment, InnerJoin<GLTran, On<ARPayment.batchNbr, Equal<GLTran.batchNbr>>,
InnerJoin<PMProject, On<GLTran.projectID, Equal<PMProject.contractID>>>>,
Where<GLTran.projectID, Equal<Current<PMProject.contractID>>,
And<ARPayment.docType, Equal<ARPaymentType.prepayment>>>,OrderBy<Asc<ARPayment.DocDate>>>(Base);
PXSelectBase<APAdjust> cmd2 = new PXSelectJoin<APAdjust, LeftJoin<GLTran, On<APAdjust.adjBatchNbr, Equal<GLTran.batchNbr>, And<APAdjust.adjdAPAcct, Equal<GLTran.accountID>>>,
InnerJoin<APPayment, On<APAdjust.adjgRefNbr, Equal<APPayment.refNbr>, And<APAdjust.adjgDocType, Equal<APPayment.docType>>>,
InnerJoin<APTran,On<APTran.refNbr,Equal<APAdjust.adjdRefNbr>,And<APTran.tranType,Equal<APAdjust.adjdDocType>>>>>>,
//InnerJoin<GLTran, On<APTran.projectID, Equal<GLTran.projectID>>>>>,
Where<APAdjust.adjgDocType, Equal<APPaymentType.prepayment>, And<APTran.projectID, Equal<Current<PMProject.contractID>>, And<GLTran.accountID, NotEqual<APPayment.aPAccountID>>>>,OrderBy<Asc<APPayment.DocDate>>>(Base);
或者如果TranDate不是DateTime
importlist= importlist.OrderBy(x => x.TranDate).ToList();
view order by不会按order by(仅按键)对显示的记录进行排序。我认为唯一的方法是确保按您想要的顺序从视图委托返回列表。我尝试对importlist数组进行排序,但没有成功。网格中的最终结果是按日期排序的。我必须计算代理中的平衡,以在网格上显示适当的平衡。目前,由于AR和AP未在数据代理中排序,计算的余额不正确。我尝试了数组排序,但在DateTime上没有工作?字段。@MuralidharanRamakrishnan我已经在答案中添加了修改过的BQL查询请尝试它们我已经尝试过了,但仍然存在问题。它需要在从2填充数据后进行排序view@MuralidharanRamakrishnan第二行的余额是1000,第三行的余额是500?或者应该是14300和13800?@MuralidharanRamakrishnan尝试在最后一个循环importlist=importlist.OrderBy(x=>x.TranDate.Value).ToList()之前添加以下行
或importlist=importlist.OrderBy(x=>x.TranDate.ToList()代码>如果TranDate
不是DateTime?
importlist= importlist.OrderBy(x => x.TranDate).ToList();