Я пишу интеграцию веб-сервисов для GP. Я использую метод UpdateSalesOrder, извлекаю существующий объект Заказа на продажу с использованием идентификатора Заказа на продажу и предоставляю новый набор SalesOrderLines с заполненными Lots.
Цель состоит в том, чтобы наша система контролировала информацию о заказах / партиях, и мы экспортируем информацию для обновления заказа на продажу GP и его строк. Для заказа мы экспортируем ключ товара, его ключи лота, количества лота и количество товара (общее количество лота) и хотим сделать эти распределения в GP.
У меня есть базовый тест: обновление заказа клиента с 1 позицией и 1 лотом на элемент. В моем коде C # я установил для SalesOrderLine Количество, Количество назначенных, Количество выполненных до 5 и Единственное количество лотов SalesOrderLine равным 5.
Я получаю: «Количество выполненного лота не соответствует линии продаж выполнено. AllocateLotBehavior = 1. "
Я проверил SQL-трассировку taSopLotAuto и увидел @ I_vQUANTITY = 5.00000; @ I_vQTYFULFI = default (похоже, это может быть причиной)
- Если значение отправляемого @v_QTYFULFI должно быть в строке (5), как мне это сделать? (Объект SalesLineLot только из веб-служб предоставляет количество)
- Функция UpdateSalesOrder Allocate Lots Behavior установлена на Вручную.
- Количество позиций = сумма количества лотов в позиции (в моем тесте количество позиций = 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