我有两个表,一个名为 Sales 的父表记录了交易,还有一个名为 SalesDetail 的子表记录了每个交易的所有项目。
表销售具有以下字段:SalesID,Customer,CustomerInfo,VAT:
表 SalesDetail 具有以下字段:SalesDetailID,SalesMasterID,ItemName,UnitPrice,Qty,Amount,booVAT:
故事的寓意是,某些商品对特定客户免征增值税(15%),这就是为什么我不能将增值税直接纳入价格中的原因。只有未获豁免的人才需要支付增值税,这将在booVAT复选框中选中。
每次勾选booVAT复选框时, SalesDetail 中的15%的Amount字段将添加到 Sales 中的VAT字段,如果未选中,则相同金额将被推导。
当前,我有一个名为forSales的表单,您可以在其中添加或编辑每个 Sales 交易,以及一个子表单(数据表)为 SalesDetail subSalesDetail的子表单(数据表)每笔交易。我还使用了一些代码和宏,通过使用父窗体的另一个控件(我将此控件称为ctrVAT)使用ctrVAT = Sum([subSalesDetail.Form!Amount])来自动更新 Sales .VAT * 0.15。但是,将ctrVAT更新为 Sales .VAT时,找不到任何解决方法,因为我无法及时了解ctrVAT修改的情况。大多数事件仅针对直接数据修改而触发,而不能通过计算字段或VBA进行动态修改。
我还考虑过使用On Timer事件,但是使用On Timer并不是很优雅:在低端计算机上不断在后台运行宏可能会增加负担。
有什么办法可以解决此问题?我希望计算尽可能自动,以避免人为错误。
答案 0 :(得分:0)
由于ctrVAT
的值仅在更新/添加SalesDetail表单中的Amount字段时才更改,因此可以使用子表单的AfterUpdate事件。
在SalesDetail子窗体的AfterUpdate事件中,您可以执行以下操作:
forSales!Vat = forSales!ctrVAT
您将需要更新子窗体所基于的查询,并添加一个计算字段:VATAmount: iif([booVAT], [Amount]*0.15, [Amount])
然后将ctrVAT
的控制源更新为=Sum([subSalesDetail.Form!VATAmount])
。
您可能需要在子表单中将VATAmount
添加为隐藏字段/列。