Dynamics nav 2009 RE: SoapException: код стандартного элемента «foo» не существует

Я пытаюсь создать счет на покупку:

PurchseInvoice_Service pis = new PurchseInvoice_Service();
PurchseInvoice pi = new PurchseInvoice();
pis.Create(ref pi);
pi.Buy_from_Vendor_No = "40000";
pi.Currency_Code = "EUR";
pi.Location_Code = "GREEN";
pis.Update(ref pi);
pi.PurchLines = new Purch_Invoice_Line[1];

pi.PurchLines[0] = new Purch_Invoice_Line();
pi.PurchLines[0].Type = PurchaseInvoice.Type.Item;
pi.PurchLines[0].No = "LS-150";
pi.PurchLines[0].Quantity = 1;
pi.PurchLines[0].Unit_of_Measure_Code = "PCS";
pi.PurchLines[0].Line_Amount = 1;

pis.Update(ref pi);

И я получаю SoapException с сообщением в последней строке:

Стандартный текстовый код «LS-150» не существует.

Я сильно запутался, этот код товара используется в заказе на покупку, и я вижу его в списке товаров. Так почему я не могу использовать его здесь? Это должно работать, на мой взгляд. Я даже могу получить доступ к этому текстовому идентификатору из объекта 'PostOrder':

Console.WriteLine( po.PurchLines[1].No );

Output is : LS-150

Я использую Dynamics NAV 2009 R2 с приложением DEMO для компании "CRONUS International Ltd." - может в этом моя проблема?

КСТАТИ. Что за история с этими постоянными тайм-аутами SQL Server? Почему я могу создать PurchaseInvoice, которые не могут быть удалены из-за отсутствия и не могут быть обновлены из-за неправильного формата, но я могу их хорошо читать? Разве веб-сервисы не должны быть «безопасным способом доступа к приложению»?

РЕШЕНИЕ:

Решение состояло в том, чтобы добавить одну строку обновления:

....           
pi.PurchLines[0] = new Purch_Invoice_Line();
pis.Update(ref pi);
pi.PurchLines[0].Type = PurchaseInvoice.Type.Item;
....

Благодаря @uncommonsense.


person vt100    schedule 03.04.2013    source источник


Ответы (1)


Не забудьте также установить поле «Тип» строки покупки, т.е. к значению опции "Элемент". Значение опции по умолчанию " " (пробел) означает, что строка покупки является текстовой строкой, и в этом случае "Нет" Поле можно использовать для поиска стандартного текста (что, с точки зрения NAV, и есть то, что делает ваш код выше, отсюда и сообщение об ошибке).

person Jan Hoek    schedule 04.04.2013
comment
Спасибо, добавил строчку (которую забыл скопировать из кода). О какой стоимости опциона вы говорите? Я бы хотел изменить его, но я не уверен, что вы имеете в виду. Я пробовал pi.PurchLines[0].Type = PurchaseInvoice.Type._blank_ и pi.PurchLines[0].Type = PurchaseInvoice.Type.Item, и все еще есть то же исключение с тем же сообщением. Любые идеи? :) - person vt100; 04.04.2013
comment
Чего я не понимаю, так это того, как Type.Item будет определяться на уровне PurchaseInvoice? Я полагаю, это должно происходить на уровне PurchaseInvoiceLine? Может быть, в качестве теста, вы могли бы передать значение 2 в качестве типа строки покупки? (поскольку строка параметра с отсчетом от нуля имеет вид ,Основной счет,Товар,,Основные средства,Заряд (Товар)). - person Jan Hoek; 04.04.2013
comment
PurchaseInvoiceLine не имеет такого члена, а объект этого типа имеет поле Type, которое равно PurchaseInvoice.Type, что тоже странно для меня... Сейчас я бросаю pi.PurchLines[0].Type = (PurchaseInvoice.Type)2, и это то же самое. Я пробовал и другие целые числа. Никакого эффекта... - person vt100; 04.04.2013
comment
Спасибо за ваше время :) Я решил это, добавив еще одну строку с обновлением сразу после создания нового Purchase_Invoice_line и перед установкой поля No. Это не имеет для меня никакого смысла, но работает :) Еще раз спасибо. - person vt100; 04.04.2013