Веб-службы Dynamics GP: создание накладных с распределением лотов - PullRequest
0 голосов
/ 24 июня 2011

Я пытаюсь использовать следующий код для создания нового 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 я обнаружил несколько вещей.

  1. 'taSopLotAuto' - это процедура eConnect в компоненте Обработка заказа на продажу, которая пытается автоматически заполнять лоты. Я не хочу, чтобы лоты автоматически заполнялись, поэтому я пытаюсь заполнить их вручную в коде. Я также изменил политику CreateSalesInvoice с Автоматического выполнения лота на Ручное выполнение лота для пользователя веб-служб GP, но это не изменило, какая процедура eConnect была вызвана.
  2. '@ I_vLNITMSEQ' относится к LineSequenceNumber. LineSequenceNumber и SequenceNumber (самого лота) должны совпадать. В моем случае они оба являются значениями по умолчанию: 16384. Этот параметр не только установлен в приведенном выше коде, но также появляется в сообщении SOAP, которое сервер пытался обработать - вряд ли «не предоставлено».

Я могу создать счет-фактуру без строк, но если я добавлю позиции, произойдет сбой. Я не понимаю, почему я получаю сообщение об ошибке для отсутствующего параметра, который явно присутствует.

Есть ли какие-либо идеи относительно успешного создания SalesInvoice с помощью веб-служб Dynamics GP 10.0?

1 Ответ

1 голос
/ 28 июня 2011

Может быть, вы не можете добавить ключ линии к лоту:

lot.Key = new SalesLineKey(); 
lot.Key.SalesDocumentKey = new SalesDocumentKey(); 
lot.Key.SalesDocumentKey.Id = seq.ToString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...