细表金额统计(50分)

  • 主题发起人 主题发起人 savetime
  • 开始时间 开始时间
S

savetime

Unregistered / Unconfirmed
GUEST, unregistred user!
细表金额统计

一个销售订单
主表中有税率字段
细表中有产品,单价,数量,通过ADO Field,可动态生成细表的货款
金额,税款金额。

问题:
如何在输入表单中动态统计总税款、货款和总金额。
不知道一般的进销存中每一个订单的总金额是单独存一个字段还是临时
计算得到的。
 
select sum(单价*数量) from 细表 //货款

select (sum(单价*数量))*税率 from 细表 //总税款

select sum(单价*数量)+(sum(单价*数量))*税率 from 细表 //总金额

應該是单独存一个字段,因為這樣便于查詢和處理
 
建议用计算字段来做,这里用查询来搞反而显得麻烦了。
在子表加入“货款金额”和“税款金额”三个计算字段。
在子表的OnCalculate事件中加入
子表货款金额.value:=子表单价.value*子表数量.value;
子表税款金额.value:=子表货款金额.value*主表税率.value;
还有一个要用计算字段的原因是在主从表结构中常会用到缓存更新,而缓存更新在提交之前
数据并未实际在表中,所以上面那位老兄用QUERY的方法是不可行的。
对于总金额,同样的原因,就要用遍历的方法,计算子表的合计数了,过程如下:
procedure TDM.UpdateTotals(TMain:TDataset;TList:TDataSet);
var
TempTot:extended;
TempSum:Currency;
PrevRecord:TBookmark;
begin
prevrecord:=TList.getbookmark;//记录当前子表记录的位置
try
TList.DisableControls;
TList.First;
TempTot:=0;
TempSum:=0;
//关键是这下面一段,遍历了子表,把合计数放到中间变量中,你只要改改就能用到你自己
//的上面了。
while not TList.Eof do
begin
tempTot:=tempTot+TList.FieldValues['Tot'];
tempsum:=tempsum+TList.FieldValues['Sum'];
TList.Next;
end;
TMain.FieldValues['ListTot']:=TempTot;
TMain.FieldValues['ListSum']:=TempSum;
finally
TLIst.EnableControls;
if prevrecord<>nil then
begin
TList.GotoBookmark(PrevRecord);
TList.FreeBookmark(PrevRecord);
end;
end;
end;

 
oceanwave,
昨晚我也想到了天什和你的方法,我是用手工按钮计算总计的。
请问加在哪个事件中自动触发比较适合。
 
在子表的AfterPost和AfterDelete两个事件中都要加
 
接受答案了.
 

Similar threads

回复
0
查看
886
不得闲
回复
0
查看
1K
不得闲
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部