Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Acumatica 在事件处理程序内更新TaxZoneID时强制税务重新计算_Acumatica - Fatal编程技术网

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
,但由于某些原因,这似乎不起作用。也许我使用了错误的事件传播顺序?这样做并不简单,我想问一下我以前见过的一个例子。有人应该尽快发布答案。