当TaxZoneID在事件处理程序中更新时,强制重新计算税金。

问题描述 投票:0回答:1

我有一个发票的图形覆盖功能。

public class ARInvoiceEntry_Extension : PXGraphExtension<ARInvoiceEntry>

在一个事件处理程序中,我更新了 TaxZoneID,工作正常。但是,税金没有得到更新或重新计算。我已经尝试了上述方法 此处

cache.SetValueExt<SOOrder.taxZoneID>(order, branchLoc.VTaxZoneID);

但这对我不起作用。我试过在 _FieldUpdating, _FieldUpdated乃至 ARInvoice_RowPersisting(PXCache cache, PXRowPersistingEventArgs e, PXRowPersisting InvokeBaseHandler) 事件。有什么办法可以解决这个问题吗?税区和税率已经在数据库中(我们没有使用 Avatax)。

--- 编辑 1 ---

以下是更新TaxZoneID的代码。

namespace PX.Objects.AR
{
    public class ARInvoiceEntry_Extension : PXGraphExtension<ARInvoiceEntry>
    {
        #region Event Handlers
        protected void ARShippingAddress_PostalCode_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e, PXFieldUpdated del)
        {
            // PXTrace.WriteInformation("ARShippingAddress_PostalCode_FieldUpdated");
            ARShippingAddress row = e.Row as ARShippingAddress;

            if (row != null) {
                if (DoChangeTaxZone(row)) {
                    var invoice = Base.Document.Current;

                    if (invoice != null) {
                        invoice.TaxZoneID = GetTaxZoneId(row);

                        sender.SetValueExt<ARInvoice.taxZoneID>(invoice, invoice.TaxZoneID);
                    }
                }
            }

            if (del != null)
            {
                del(sender, e);
            }
        }
        #endregion

        private bool DoChangeTaxZone(ARShippingAddress row)
        {
            // logic ...

            return true;
        }

        private string GetTaxZoneId(ARShippingAddress row)
        {
            // logic ...

            return "TAX-ZONE-ID";
        }
    }
}


acumatica
1个回答
1
投票

当你使用典型的方法与税收记录进行编程交互时,税收总额将无法正确刷新。税务DAC属性默认情况下不会重新计算总数以提高性能。

要强制刷新税务属性,你需要改变税务计算模式。

税务计算模式 NoCalc 不重新计算总数。这是默认模式。

将税务计算模式设置为 ManualCalc 是需要刷新更新税额的。

代码示例更新税额字段,可以适应更新税区。

ARInvoiceEntry invoiceMaint = PXGraph.CreateInstance<ARInvoiceEntry>(); 
TX.TaxAttribute.SetTaxCalc<ARTran.taxCategoryID>(invoiceMaint.Transaction.Cache, null, TX.TaxCalc.ManualCalc); 
invoiceMaint.CurrentDocument.Current = invoiceMaint.Document.Search<ARInvoice.refNbr>("AR005452", ARDocType.Invoice).FirstOrDefault(); 
invoiceMaint.Taxes.Select();
invoiceMaint.Taxes.Current = invoiceMaint.Taxes.Search<ARTaxTran.taxID>("CAGST").FirstOrDefault(); 
invoiceMaint.Taxes.Cache.SetValueExt<ARTaxTran.curyTaxAmt>(invoiceMaint.Taxes.Current, 3); 
invoiceMaint.Taxes.Update(invoiceMaint.Taxes.Current);
invoiceMaint.SelectTimeStamp(); 
invoiceMaint.Save.Press(); 
© www.soinside.com 2019 - 2024. All rights reserved.