如何在销售订单屏幕上的Acumatica AddInvoice操作中通过REST API执行?我使用的是默认端点版本20.200.001,该操作使用参数endpoint version进行映射
在UI上,我可以通过对话框添加发票。但是,在postman上,我尝试将此参数发送给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插入“销售订单行”记录至少引发了一个错误。请查看错误。“
如何指定确切的发票行和批次/序列号nbr。产品的数量,就像我在UI上做的那样?add invoice dialog
我已经尝试在操作上添加一个Detail[]部分,但是错误指出不支持这种类型的参数。
我希望你能帮助我。
发布于 2020-11-07 03:36:57
在当前版本的终结点中不支持它。您可以做的是,考虑到已经退回的项目,在行上使用一些自定义来调整数量,这样就不会失败,而是调整退货数量。例如:
//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;
}https://stackoverflow.com/questions/64687421
复制相似问题