通过 Web 服务添加销售订单时如何覆盖税务详细信息 API

How to override the tax details when adding a sales order through web service API

当我尝试通过 Acumatica Web 服务 API 将我们的电子商务订单添加到 Acumatica 时,Acumatica 始终会根据我从我们的电子邮箱发送的产品和客户信息自动计算包括总计在内的税务详细信息- 商务系统到 Acumatica。

由于我们的客户已经在我们的电子商务网站上为他们的订单支付了包括税在内的全额付款,我想用任何数据覆盖这些与税收相关的信息,例如税收总额和税收金额每个项目,我从电子商务中获得,以避免电子商务和 Acumatica 之间的潜在冲突(大多数时候两个系统中的税收计算应该完全相同,但有时由于某些配置或系统错误可能会有所不同) , 但是,我尝试了不同的方法,但 none 方法奏效了。

有人知道怎么做吗?我的部分代码如下:

SO301000Content SO301000 = context.SO301000GetSchema();
context.SO301000Clear();

List<Command> cmds = new List<Command>();

cmds.Add(new Value { Value = "SO", LinkedCommand = SO301000.OrderSummary.OrderType });
cmds.Add(new Value { Value = "<NEW>", LinkedCommand = SO301000.OrderSummary.OrderNbr });
cmds.Add(new Value { Value = "ABCD", LinkedCommand = SO301000.OrderSummary.Customer });
cmds.Add(new Value { Value = "ABCD1234", LinkedCommand = SO301000.OrderSummary.Location }); 

//please note I could add extra tax item as below:
cmds.Add(SO301000.TaxDetails.ServiceCommands.NewRow);
cmds.Add(new Value { Value = "0.5", LinkedCommand = SO301000.TaxDetails.TaxAmount });
cmds.Add(new Value { Value = "ON HST", LinkedCommand = SO301000.TaxDetails.TaxID });
cmds.Add(new Value { Value = "10", LinkedCommand = SO301000.TaxDetails.TaxRate });
cmds.Add(new Value { Value = "289", LinkedCommand = SO301000.TaxDetails.TaxableAmount });

//however when I was trying to add the number for tax total, it doesn't work
cmds.Add(new Value { Value = "1.5", LinkedCommand = SO301000.OrderSummary.TaxTotal });
cmds.Add(new Value { Value = "GST", LinkedCommand = SO301000.TaxDetails.TaxID });
//the two lines above do not work

//add line items
foreach (OrderItem item in orderInfo.OrderItems)
{
    cmds.Add(SO301000.DocumentDetails.ServiceCommands.NewRow);
    cmds.Add(new Value { Value = item.InventoryCD, LinkedCommand = SO301000.DocumentDetails.InventoryID });
    cmds.Add(new Value { Value = item.Quantity.ToString(), LinkedCommand = SO301000.DocumentDetails.Quantity });

}

cmds.Add(SO301000.Actions.Save);
cmds.Add(SO301000.OrderSummary.OrderNbr);

SO301000Content[] SO30100content = context.SO301000Submit(cmds.ToArray());

谢谢。

TaxTotal 是一个基于税收选项卡行项目总计的计算字段。如果没有一些自定义工作来启用该字段并删除计算,我认为不可能覆盖计算值。

我能看到的几个选项 1) 根据您的行项目的税收总额手动输入所有税收行 2) 修改行项目以包含税金并将税金类别设置为 "NONTAXABLE" 或为 "PRETAXED/INCLUDINGTAX" 创建一个新类别或类似的内容,这样税金就不会自动计算。 3) 让 Acumatica 根据税收规则自动计算税收。

过去我根据需求倾向于#2 和#3。

让我解释一下 Acumatica 中的税收计算是如何工作的。 Acumatica 根据财务设置选项卡中的客户税区 属性 计算税款。

主要问题是你将如何向税务局报税,正如 Jeff 所写,你有几个选择。

如果您只需要文件的完整税额并且不想控制文件中使用了哪些税款,那么下一个方法适合您:

  1. 使用默认税区和税种创建默认税。
  2. 设置过去的开始日期,税率 = 0
  3. 对于来自电子商务的任何新 SO,设置 Customer Tax Zone = Default
  4. 然后当您保存基于税收设置的文档时,acumatica 将在“税收详细信息”下创建一个税额为 0 的行,因此您可以对其进行编辑。也许您还可以在 api 调用期间即时创建该行。

注意:如果您需要更详细的数据,比如从电子商务中获得所有税费(州税、县税等),您可以使用相同的方法,但您需要即时创建您的 taxes/tax 区域。

另一种选择是使用 Avalara 税务提供商。

希望这些信息对您有所帮助。

这是一个旧的 post,但我想我会 post 对我适用于 2019 R2 的答案。出于某种原因,Acumatica 不允许您在创建销售订单时更新 TaxDetails 税额字段。使用分配的税区创建销售订单后,只能使用税明细对象 ID 更新“税额”字段。因此,您需要通过使用 ODATA 查询 $expand=TaxDetails

展开“税务详细信息”来获取销售订单的税务详细信息

然后使用 PUT 更新销售订单,并使用对象的现有“id”将税额发送到“TaxAmount”键值。根据您编写代码的方式,这每次都能完美运行。下面是引用 TaxDetails 对象 ID 的屏幕截图。

对于寻找此问题解决方案的其他人,我们 运行 遇到了类似的问题,我们在尝试手动输入税额时收到以下错误:“没有行与税款匹配”销售订单抬头。解决方案是找到我们在“税收”>“配置文件”>“税收”中使用的税号,转到“类别”选项卡,并确保我们已将每个税种添加到该 ID。