GP Web Services: обновление заказа на продажу для включения информации о лоте с неправильным распределением лота
Я пишу интеграцию веб-сервисов для GP. Я использую метод UpdateSalesOrder, извлекаю существующий объект Заказа на продажу с использованием идентификатора Заказа на продажу и предоставляю новый набор SalesOrderLines с заполнением Lots.
Цель состоит в том, чтобы наша система контролировала информацию о заказе / лоте, и мы экспортируем информацию, чтобы обновить заказ на продажу GP и его строки. Для заказа мы экспортируем ключ товара, его ключи лота, количества лота и количество товара (общее количество лота) и хотим сделать эти распределения в GP.
У меня есть базовый тест: обновление заказа клиента с 1 позицией и 1 лотом на элемент. В моем коде C# я установил для SalesOrderLine Quantity, QuantityAllocated, QuantityFulfilled 5 и только для LotOrderLine количества лотов значение 5.
Я получаю: "Количество лота не выполнено". AllocateLotBehavior = 1. "
Я проверил SQL-трассировку taSopLotAuto и увидел @I_vQUANTITY=5.00000; @I_vQTYFULFI=default (похоже, это может быть причиной)
- Если отправляемое @v_QTYFULFI должно быть значением в строке (5), как мне это сделать? (Объект SalesLineLot из веб-сервисов предоставляет только количество)
- UpdateSalesOrder Распределение лотов Поведение установлено на Вручную.
- Количество позиций = сумма количества лотов в строке (в моем тесте количество позиций = 5, количество лотов = 5)
Вот фрагмент моего кода для того, как я генерирую информацию о позиции и лоте.
int itemSeq = 0;
// Create New Sales Order Lines
foreach (var item in shipmentItems)
{
SalesOrderLine gpSalesOrderNewLine = new SalesOrderLine();
gpSalesOrderNewLine.ItemKey = new ItemKey { Id = item.ItemID };
gpSalesOrderNewLine.QuantityFulfilled = new Quantity { Value = decimal.Parse(item.Quantity) };
gpSalesOrderNewLine.QuantityAllocated = new Quantity { Value = decimal.Parse(item.Quantity) };
gpSalesOrderNewLine.QuantityToInvoice = new Quantity { Value = decimal.Parse(item.Quantity) };
gpSalesOrderNewLine.Quantity = new Quantity { Value = decimal.Parse(item.Quantity) };
SalesLineKey slKey = new SalesLineKey();
slKey.SalesDocumentKey = sdKey;
slKey.CompanyKey = cKey;
gpSalesOrderNewLine.Key = slKey;
gpSalesOrderNewLine.Key.LineSequenceNumber = itemSeq;
// Get Lots from XML
var shipmentItemLots = from shipLot in item.Lots.Descendants("Lot")
select new
{
LotID = shipLot.Descendants("LotID").First().Value,
LotQuantity = shipLot.Descendants("LotQuantity").First().Value,
};
// Loop through item's lots, each lot generates an item line and an item lot line with the lot level quantity.
if (shipmentItemLots.Count() > 0)
{
List<SalesLineLot> inventoryLots = new List<SalesLineLot>();
int lotSeq = 0;
foreach (var lot in shipmentItemLots)
{
// Create Lot Info
SalesLineLot inventoryLot = new SalesLineLot();
inventoryLot.LotNumber = lot.LotID;
inventoryLot.Quantity = new Quantity { Value = decimal.Parse(lot.LotQuantity) };
inventoryLot.Key = new SalesLineLotKey();
inventoryLot.Key.SalesLineKey = slKey;
inventoryLot.Key.SequenceNumber = lotSeq;
inventoryLot.Key.CompanyKey = cKey;
inventoryLots.Add(inventoryLot);
gpSalesOrderNewLine.Lots = inventoryLots.ToArray();
lotSeq++;
}
}
else
{
string errorMessage = String.Format("Product {0}: Could not find lots in exported XML.", item.ItemID);
throw new Exception(errorMessage);
}
gpSalesOrderNewLines.Add(gpSalesOrderNewLine);
itemSeq++;
}
// gpSalesOrderNewLines is added to a gpSalesOrder object, and UpdateSalesOrder is called below. Everything works, except for getting Lots allocated
Я несколько раз подправил этот код и столкнулся с проблемами несоответствия выполнения, или, если мне удастся получить Заказ на продажу для обновления, Распределение лотов не производится с количествами, которые я храню в объекте SalesOrder