Я пытаюсь использовать следующий код для создания нового SalesInvoice на основе существующего SalesOrder:
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.
И более подробное исключение из консоли исключений в динамике:
Procedure or function 'taSopLotAuto' expects parameter '@I_vLNITMSEQ',
which was not supplied.
После долгих поисков в Google я обнаружил несколько вещей.
- 'taSopLotAuto' - это процедура eConnect в компоненте Обработка заказа на продажу, которая пытается автоматически заполнять лоты. Я не хочу, чтобы лоты автоматически заполнялись, поэтому я пытаюсь заполнить их вручную в коде. Я также изменил политику CreateSalesInvoice с Автоматического выполнения лота на Ручное выполнение лота для пользователя веб-служб GP, но это не изменило, какая процедура eConnect была вызвана.
- '@ I_vLNITMSEQ' относится к LineSequenceNumber. LineSequenceNumber и SequenceNumber (самого лота) должны совпадать. В моем случае они оба являются значениями по умолчанию: 16384. Этот параметр не только установлен в приведенном выше коде, но также появляется в сообщении SOAP, которое сервер пытался обработать - вряд ли «не предоставлено».
Я могу создать счет-фактуру без строк, но если я добавлю позиции, произойдет сбой. Я не понимаю, почему я получаю сообщение об ошибке для отсутствующего параметра, который явно присутствует.
Есть ли какие-либо идеи относительно успешного создания SalesInvoice с помощью веб-служб Dynamics GP 10.0?