Acumatica 在事件处理程序内更新TaxZoneID时强制税务重新计算
我有一个发票的图形覆盖Acumatica 在事件处理程序内更新TaxZoneID时强制税务重新计算,acumatica,Acumatica,我有一个发票的图形覆盖 public类ARInvoiceEntry_扩展名:pxGrapherExtension cache.SetValueExt(order,branchLoc.VTaxZoneID) 但这对我不起作用。我在\u FieldUpdated,\u FieldUpdated,甚至在ARInvoice\u行持久化(PXCache缓存,PXRowPersistingEventArgs e,pxRowPersistingInvokeBaseHandler)事件中尝试过它。你知道为什么它
public类ARInvoiceEntry_扩展名:pxGrapherExtension
cache.SetValueExt(order,branchLoc.VTaxZoneID)代码>
但这对我不起作用。我在\u FieldUpdated
,\u FieldUpdated
,甚至在ARInvoice\u行持久化(PXCache缓存,PXRowPersistingEventArgs e,pxRowPersistingInvokeBaseHandler)
事件中尝试过它。你知道为什么它不起作用吗?分类区和税率已经在数据库中(我们不使用Avatax)
---编辑1---
下面是更新TaxZoneID的代码
名称空间PX.Objects.AR
{
公共类的VoiceEntry_扩展名:pxGrapherExtension
{
#区域事件处理程序
受保护的无效ARShippingAddress\u PostalCode\u FieldUpdate(PXCache发送器、PXFieldUpdatedEventArgs e、PXFieldUpdated del)
{
//PXTrace.WriteInformation(“ARShippingAddress\u PostalCode\u FieldUpdated”);
ARShippingAddress行=e.作为ARShippingAddress的行;
如果(行!=null){
国际单项体育联合会(世界其他地区){
var发票=Base.Document.Current;
如果(发票!=null){
invoice.TaxZoneID=GetTaxZoneId(行);
sender.SetValueExt(发票,发票.TaxZoneID);
}
}
}
如果(del!=null)
{
del(发送者,e);
}
}
#端区
私人住宅区(ARShippingAddress row)
{
//逻辑。。。
返回true;
}
私有字符串GetTaxZoneId(ARShippingAddress行)
{
//逻辑。。。
返回“税区ID”;
}
}
}
当您使用典型方法以编程方式与税务记录交互时,税务总额将无法正确刷新。默认情况下,Tax 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();
ARInvoiceEntry invoiceMaint=PXGraph.CreateInstance();
TX.TaxAttribute.SetTaxCalc(invoiceMaint.Transaction.Cache,null,TX.TaxCalc.ManualCalc);
invoiceMaint.CurrentDocument.Current=invoiceMaint.Document.Search(“AR005452”,ARDocType.Invoice).FirstOrDefault();
invoiceMaint.Taxes.Select();
invoiceMaint.Taxes.Current=invoiceMaint.Taxes.Search(“CAGST”).FirstOrDefault();
invoiceMaint.Taxes.Cache.SetValueExt(invoiceMaint.Taxes.Current,3);
invoiceMaint.Taxes.Update(invoiceMaint.Taxes.Current);
invoiceMaint.SelectTimeStamp();
invoiceMaint.Save.Press();
当您使用典型方法以编程方式与税务记录交互时,税务总额将无法正确刷新。默认情况下,Tax 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();
ARInvoiceEntry invoiceMaint=PXGraph.CreateInstance();
TX.TaxAttribute.SetTaxCalc(invoiceMaint.Transaction.Cache,null,TX.TaxCalc.ManualCalc);
invoiceMaint.CurrentDocument.Current=invoiceMaint.Document.Search(“AR005452”,ARDocType.Invoice).FirstOrDefault();
invoiceMaint.Taxes.Select();
invoiceMaint.Taxes.Current=invoiceMaint.Taxes.Search(“CAGST”).FirstOrDefault();
invoiceMaint.Taxes.Cache.SetValueExt(invoiceMaint.Taxes.Current,3);
invoiceMaint.Taxes.Update(invoiceMaint.Taxes.Current);
invoiceMaint.SelectTimeStamp();
invoiceMaint.Save.Press();
请将您正在更新TaxZoneID的代码添加到您正在处理的问题ARInvoiceEntry
PXGraph,而不是SOOrderEntry
,很可能税务引擎是对ARInvoice
的TaxZoneID
做出反应,而不是SOOrder
。尝试在ARInvoice
的TaxZoneID
@SamvelPetrosov上SetValueExt
——我在更新发生的地方添加了代码。正如您在添加的代码中所看到的那样,我确实尝试在ARInvoice.taxZoneID
上调用SetValueExt
,但由于某些原因,这似乎不起作用。也许我使用了错误的事件传播顺序?这样做并不简单,我想问一下我以前见过的一个例子。有人应该很快发布答案。请将您正在更新TaxZoneID的代码添加到您正在处理的问题ARInvoiceEntry
PXGraph而不是SOOrderEntry
,很可能税务引擎是对ARInvoice
TaxZoneID
做出反应,而不是SOOrder
。尝试在ARInvoice
的TaxZoneID
@SamvelPetrosov上SetValueExt
——我在更新发生的地方添加了代码。正如您在添加的代码中所看到的那样,我确实尝试在ARInvoice.taxZoneID
上调用SetValueExt
,但由于某些原因,这似乎不起作用。也许我使用了错误的事件传播顺序?这样做并不简单,我想问一下我以前见过的一个例子。有人应该尽快发布答案。