0

我正在尝试使用以下代码根据现有的 SalesOrder 创建一个新的 SalesInvoice:

SalesInvoice invoice = new SalesInvoice();

invoice.DocumentTypeKey = new SalesDocumentTypeKey { Type = SalesDocumentType.Invoice };
invoice.CustomerKey = originalOrder.CustomerKey;
invoice.BatchKey = originalOrder.BatchKey;
invoice.Terms = new SalesTerms { DiscountTakenAmount = new MoneyAmount { Value = 0, Currency = "USD", DecimalDigits = 2 }, DiscountAvailableAmount = new MoneyAmount { Value = 0, Currency = "USD", DecimalDigits = 0 } };
invoice.OriginalSalesDocumentKey = originalOrder.Key;

List<SalesInvoiceLine> lineList = new List<SalesInvoiceLine>();
for (int i = 0; i < originalOrder.Lines.Length; i++)
{
    SalesInvoiceLine line = new SalesInvoiceLine();
    line.ItemKey = originalOrder.Lines[i].ItemKey;
    line.Key = new SalesLineKey { LineSequenceNumber = originalOrder.Lines[i].Key.LineSequenceNumber; }

    SalesLineLot lot = new SalesLineLot();
    lot.LotNumber = originalOrder.Lines[i].Lots[0].LotNumber;
    lot.Quantity = new Quantity { Value = 2200 };
    lot.Key = new SalesLineLotKey { SequenceNumber = originalOrder.Lines[i].Lots[0].Key.SequenceNumber };
    line.Lots = new SalesLineLot[] { lot };
    line.Quantity = new Quantity { Value = 2200 };
    lineList.Add(line);
}
invoice.Lines = lineList.ToArray();

DynamicsWS.CreateSalesInvoice(invoice, DynamicsContext, DynamicsWS.GetPolicyByOperation("CreateSalesInvoice", DynamicsContext));

执行时,我收到以下错误:

SQL Server Exception: Operation expects a parameter which was not supplied.

以及来自 Dynamics 异常控制台的更详细的异常:

Procedure or function 'taSopLotAuto' expects parameter '@I_vLNITMSEQ',
which was not supplied.

在通过谷歌大量挖掘之后,我发现了一些东西。

  1. 'taSopLotAuto' 是销售订单处理组件中的一个 eConnect 程序,它尝试自动填充批次。我不希望自动填充批次,这就是为什么我尝试在代码中手动填充它们。我还为 GP Web 服务用户将 CreateSalesInvoice 策略从自动批次履行修改为手动批次履行,但这并没有改变调用的 eConnect 过程。
  2. '@I_vLNITMSEQ' 指的是 LineSequenceNumber。LineSequenceNumber 和 SequenceNumber(批次本身的)必须匹配。在我的例子中,它们都是默认值:16384。不仅在上面的代码中设置了这个参数,而且它还出现在服务器试图处理的 SOAP 消息中——几乎没有“未提供”。

我可以毫不费力地创建没有行项目的发票,但如果我添加行项目它会失败。我不明白为什么我会收到明显存在的缺失参数的错误。

关于如何通过 Dynamics GP 10.0 Web 服务成功创建 SalesInvoice 的任何想法?

4

1 回答 1

1

也许你乱把线路键加到地段:

lot.Key = new SalesLineKey(); 
lot.Key.SalesDocumentKey = new SalesDocumentKey(); 
lot.Key.SalesDocumentKey.Id = seq.ToString();
于 2011-06-28T16:11:51.960 回答