2014-10-17 66 views
1

我有要求将预付款添加到销售订单。会计在Acumatica中设置了所需的课程和付款方式。我可以通过GUI完成此操作,但是当我尝试使用Web Service输入销售订单上的付款信息时,我收到错误响应。错误响应是:PX.Data.PXException:错误#14:插入'SOAdjust'记录引发了一个或多个错误。请查阅。错误:'参考号码'可能不是空的。将预付款添加到销售订单

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

 List<Command> cmds = new List<Command>(); 
     cmds.AddRange(new Command[]{ 

      new Value {Value = "C3", LinkedCommand = SO301000.OrderSummary.OrderType}, 
      new Value { Value = orderNbr, LinkedCommand = SO301000.OrderSummary.OrderNbr, Commit = true}, 

      SO301000.Payments.ServiceCommands.NewRow, 

      new Value { Value = "Prepayment", LinkedCommand = SO301000.Payments.DocType}, 
      new Value { Value = paymentNbr, LinkedCommand = SO301000.Payments.ReferenceNbr, Commit = true }, 
      // new Value { Value = "3.00" , LinkedCommand = SO301000.Payments.AppliedToOrder, Commit = true}, 

      SO301000.Actions.Save, 
      SO301000.OrderSummary.OrderNbr 
     }); 

     string orderNumber = string.Empty; 

     try 
     { 
      var SO301000ContentReturned = context.SO301000Submit(cmds.ToArray()); 
      orderNumber = SO301000ContentReturned[0].OrderSummary.OrderNbr.Value; 
      Console.WriteLine(orderNumber); 
     } 
     catch (Exception exception) 
     { 
      orderNumber = exception.Message; 
      Console.WriteLine(exception); 
     } 


     return orderNumber;` 

有什么建议吗?我曾尝试使用AR302000屏幕以将付款应用于付款屏幕中的订单,并收到相同的错误消息。

回答

1

在由两个关键字段(在这种情况下为DocType + ReferenceNbr)驱动的网格中存在已知的限制。在这种情况下,只有第二个键应该具有Commit = true set,因此您需要在DocType字段上设置Commit = false。但是不要从Value对象执行它,你需要在模式内容对象上执行它。

另一个Commit = true和NewRow命令是不必要的。我已经编辑了下面的原始代码,这是它应该看起来如何:

SO301000.Payments.DocType.Commit = false; //This is the line that I added 
    List<Command> cmds = new List<Command>(); 
    cmds.AddRange(new Command[]{ 
     new Value {Value = "C3", LinkedCommand = SO301000.OrderSummary.OrderType}, 
     new Value { Value = orderNbr, LinkedCommand = SO301000.OrderSummary.OrderNbr}, 

     new Value { Value = "Prepayment", LinkedCommand = SO301000.Payments.DocType}, 
     new Value { Value = paymentNbr, LinkedCommand = SO301000.Payments.ReferenceNbr}, 
     //new Value { Value = "3.00" , LinkedCommand = SO301000.Payments.AppliedToOrder}, 

     SO301000.Actions.Save, 
     SO301000.OrderSummary.OrderNbr 
    }); 

    string orderNumber = string.Empty; 

    try 
    { 
     var SO301000ContentReturned = context.SO301000Submit(cmds.ToArray()); 
     orderNumber = SO301000ContentReturned[0].OrderSummary.OrderNbr.Value; 
     Console.WriteLine(orderNumber); 
    } 
    catch (Exception exception) 
    { 
     orderNumber = exception.Message; 
     Console.WriteLine(exception); 
    } 


    return orderNumber; 
+0

注意 - 我确实应该自动设置提交标志;我要去咨询工程团队为什么在这种情况下没有完成... – Gabriel 2014-10-18 15:43:05

+0

仍然是同样的错误信息。 – Spyder045 2014-10-20 15:17:44

+0

您是否从其他所有行删除了Commit = True?您可以通过[email protected]通过电子邮件向您的开发站点发送一个示例控制台应用程序供我查看吗? – Gabriel 2014-10-20 15:21:45

相关问题