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

时间:2015-06-24 15:31:58

标签: acumatica

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

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

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

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());

感谢。

3 个答案:

答案 0 :(得分:0)

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

我可以看到几个选项 1)根据您的订单项的税金总额手动输入所有税行 2)修改订单项以包含税,并将税收类别设置为&#34; NONTAXABLE&#34;或为&#34; PRETAXED / INCLUDINGTAX&#34;创建一个新类别。或者沿着那些方向的东西,所以税不是自动计算的。 3)让Acumatica根据税收规则自动计算税额。

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

答案 1 :(得分:0)

让我澄清一下Acumatica的工作税计算方法。 Acumatica根据“客户税区”属性“财务设置”选项卡计算税额。

关于你如何向税务局报税的主要问题,正如杰夫写的那样,你有几个选择。

如果您只需要对文档只有完整的税额而且您不想控制文档中使用的税,那么下一步就是您:

  1. 使用DEFAULT税区和税收类别创建默认税。
  2. 设置过去的开始日期,税率= 0
  3. 对于来自电子商务的任何新SO,请设置客户税区=默认
  4. 然后,当您根据税收设置保存文档acumatica时,将在税务详细信息下创建一个含0税额的行,以便您可以对其进行编辑。也许您也可以在api通话期间动态创建该行。
  5. 注意:如果您需要更详细的数据,比如从电子商务(州税,县税等)获得SO的所有税款,您可以使用相同的方法,但您需要动态创建税/税区

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

    我希望这些信息会有所帮助。

答案 2 :(得分:0)

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

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

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

JSON Example Showing TaxDetails Object id