Axapta财务过账分析(二)

点击窗体上的OK后,就会调用salesFormLetter(其子类SalesFormLetter_invoice没有重载Run())Run()方法了.
Run()方法做了如下几件事情:
1.构造QueryRun(),该QueryRun对象执行的SQL如下所示:
select * from salesParmUpdate a
inner join salesParmTable b on a.parmid = b.parmId
where a.parmid='当前的ParmId' and B.PARMJOBSTATUS='ParmJobStatus::Waiting'
2.如果打印类型是current或者invocie是proforma的,则构造用表CustInvoiceJour构造一个RecordSortedList,供后面使用.
3.从步骤1中构造的QueryRun()返回的结果中取出SalesParmTable,并有SalesParmTable找到其对应的salesTable记录.如果salesTable不为空则调用createJournal()方法.
createJournal()做了如下几件事情:
1.根据salesTable,文档类型以及salesParmUpdate的一些值构造salesTotal对象,最终实例化的是类型是salesTotal_ParmTrans.介绍一下salesTotal中几个类的继承关系:TradeTotals<-SalesTotal<-Salestotal_Sales<-SalesTotal_ParmTrans.后面很多的计算任务都是由父类TrandTotals完成的.
2.调用salesTotal_ParmTrans的方法设定是否计算数量,金额等,这些项包括应收账款,杂项收费,税款等等.
3.调用TradeTotals的tax方法计算税额.
4.调用InsertJournal()方法,进行相关费用的计算,过账,并更新salesParmTable和salesParmLine等相关表的状态.
到此为止,SalasFormLetter的主线逻辑已经叙述完毕.
实际上财务过账的主要工作在createJournal()方法中的第三步和第四步完成的.
在下一篇文章中将进入正题详细介绍Tax的计算.
原文地址:https://www.cnblogs.com/Farseer1215/p/510715.html