首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在REST API中执行SalesOrderAddInvoice操作

在REST API中执行SalesOrderAddInvoice操作
EN

Stack Overflow用户
提问于 2020-11-05 04:41:04
回答 1查看 120关注 0票数 1

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

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

这是我的请求:

代码语言:javascript
复制
{
"entity": {"OrderType":{"value":"CM"}, "OrderNbr":{"value":"CC00000013"}},
"parameters":{
    "DocumentType": {"value": "Invoice"},
    "ReferenceNbr":{"value": "CC00000010"}
}}

这是响应消息:

代码语言:javascript
复制
"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插入“销售订单行”记录至少引发了一个错误。请查看错误。“

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

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

我希望你能帮助我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-07 03:36:57

在当前版本的终结点中不支持它。您可以做的是,考虑到已经退回的项目,在行上使用一些自定义来调整数量,这样就不会失败,而是调整退货数量。例如:

代码语言:javascript
复制
//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, line.OrderQty, null);
        Base.Transactions.Delete(copy);
      }
    }
  }
  return result;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64687421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档