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.

Google でかなりの量を掘り下げた後、いくつかのことを発見しました。

  1. 「taSopLotAuto」は、ロットを自動的に満たそうとする販売注文処理コンポーネント内の eConnect プロシージャです。ロットが自動的に満たされることを望まないため、コードで手動でロットを埋めようとしています。また、CreateSalesInvoice ポリシーを自動ロット フルフィルメントから GP Web サービス ユーザーの手動ロット フルフィルメントに変更しましたが、どの 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 に答える