我使用数据委托中的2个视图填充数据。我必须通过基于交易日期排序来计算运行余额。如何对数据进行排序并填充运行余额。
代表代码如下。
this.setState({token:responseJson.token});
数组未按TranDate排序且计算的余额错误
实施 Samvel Petrosov 建议后的结果
我试图在DateTime上对数组进行排序?并且错过了使用Value属性。我尝试了 Samvel Petrosov 的建议,但它确实有效。
答案 0 :(得分:1)
以下是关于从T200 Acumatica框架基础课程中对数据视图的结果集进行排序的部分:
数据视图按以下规则执行委托:
- 如果定义了委托,则调用委托
- 如果委托返回null,则执行BQL命令
- 如果委托返回一个对象,则根据BQL命令的OrderBy子句重新排序结果
- 如果未定义委托,请执行BQL命令
数据视图返回的结果集始终按ORDER排序 在数据视图对象的类型中指定的BY子句。如果你排序 数据以不同的方式记录在委托中,结果集 将在数据视图返回之前重新排序。
代码中的Balance的计算是在返回结果集之前完成的。这就是你不等的计算方法。返回结果集后,将进行排序。
更新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);
更新2
尝试在最后一个循环之前按事务日期添加其他排序:
importlist= importlist.OrderBy(x => x.TranDate.Value).ToList();
或者TranDate不是DateTime?
importlist= importlist.OrderBy(x => x.TranDate).ToList();