微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在REST API中执行SalesOrderAddInvoice操作

如何解决在REST API中执行SalesOrderAddInvoice操作

如何在销售订单屏幕上的Acumatica AddInvoice Action中通过REST API执行? 我正在使用认端点版本20.200.001,并且该操作已映射有参数 endpoint version

在UI上,我可以通过对话框添加发票。 但是,在邮递员上,我尝试将此参数发送到POST请求,但收到错误响应。

这是我的要求:

{
"entity": {"OrderType":{"value":"CM"},"OrderNbr":{"value":"CC00000013"}},"parameters":{
    "DocumentType": {"value": "Invoice"},"ReferenceNbr":{"value": "CC00000010"}
}}

这是响应消息:

"exceptionMessage": "SalesOrder.Details[0].Allocations[0].Qty: Item '754502039173  
            0' in invoice 'CC00000010' lot/serial number '000001' quantity returned is greater than quantity invoiced. SalesOrder.Details[0].OrderQty: The return quantity exceeds the quantity available for return for the related invoice line CC00000010,754502039173.

减少当前行或发票行中存在的另一个退货单据CC00000011的对应行中的数量。 \ n插入“销售订单行”记录至少引发了一个错误。请检查错误。”

如何指定确切的发票行和批次/序列号。产品的数量数量,就像我在UI上所做的一样? add invoice dialog

我已经尝试在操作上添加一个Detail []部分,但是错误表明不支持这种类型的参数。

希望您能帮助我。

解决方法

当前版本的端点不支持此功能。 您可以做的是使用一些自定义项来调整已考虑退回物料的生产线上的数量,这样就不会失败,而是要调整返回的数量。例如

//SOOrderEntryExtension 
[PXOverride]
public virtual IEnumerable AddInvoice(PXAdapter adapter,Func<PXAdapter,IEnumerable> baseDelegate)
{
  var result = baseDelegate.Invoke(adapter);
  if (Base.IsContractBasedAPI && Base.Document.Current.Behavior == SOBehavior.RM)
  {
    foreach (SOLine line in Base.Transactions.Select().Where(line => ((SOLine)line).InvoiceNbr != null))
    {
      if (Base.Transactions.Cache.GetStatus(line) != PXEntryStatus.Inserted)
        continue;

      PXSelectBase<SOLine> selectReturnSOLines = new PXSelectJoin<SOLine,LeftJoin<SOOrder,On<SOOrder.orderType,Equal<SOLine.orderType>,And<SOOrder.orderNbr,Equal<SOLine.orderNbr>>>>,Where<SOLine.invoiceType,Equal<Required<SOLine.invoiceType>>,And<SOLine.invoiceNbr,Equal<Required<SOLine.invoiceNbr>>,And<SOLine.invoiceLineNbr,Equal<Required<SOLine.invoiceLineNbr>>,And<Where<SOLine.behavior,Equal<SOOrderTypeConstants.rmaOrder>,Or<SOLine.behavior,Equal<SOOrderTypeConstants.creditMemo>,And<SOOrder.cancelled,Equal<False>>>>>>>>>(Base);

      var returnSOLines = selectReturnSOLines.Select(line.InvoiceType,line.InvoiceNbr,line.InvoiceLineNbr).RowCast<SOLine>().Where(_ => _.OrderNbr != line.OrderNbr || _.OrderType != line.OrderType || _.LineNbr != line.LineNbr);

      SOLine copy = (SOLine)Base.Transactions.Cache.CreateCopy(line);
      foreach (var otherline in returnSOLines)
      {
        copy.OrderQty -= otherline.OrderQty;
      }
      if (copy.OrderQty > 0)
      {
        Base.Transactions.Cache.RaiseExceptionHandling<SOLine.orderQty>(line,line.OrderQty,null);
        Base.Transactions.Update(copy);
      }
      else
      {
        Base.Transactions.Cache.RaiseExceptionHandling<SOLine.orderQty>(line,null);
        Base.Transactions.Delete(copy);
      }
    }
  }
  return result;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。