GP Web Services: обновление заказа на продажу для включения информации о лоте с неправильным распределением лотов - PullRequest
0 голосов
/ 06 ноября 2018

Я пишу интеграцию веб-сервисов для 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...