Подтверждение отгрузки и обновление IN через код не работает - PullRequest
1 голос
/ 16 октября 2019

У меня есть требование для создания документа отгрузки, подтверждения отгрузки и обновления в документе передачи заказа на продажу.

Следующий код используется для подтверждения отгрузки

public string CreateShipment()
    {
        bool flag = false;
        string _retval = string.Empty;
        using (IEnumerator<PXResult<SOOrderShipment>> enumerator = Base.shipmentlist.Select(Array.Empty<object>()).GetEnumerator())
        {
            if (enumerator.MoveNext())
            {
                SOOrderShipment current = enumerator.Current;
                flag = true;
            }
        }
        if (flag)
        {
            string Mess = "Error: Shipment already created.";
            throw new PXException(Mess);
        }
        SOShipmentEntry sOShipmentEntry = PXGraph.CreateInstance<SOShipmentEntry>();
        //SOOrderEntry sOOrderEntry = PXGraph.CreateInstance<SOOrderEntry>();
        //sOOrderEntry.Caches.Clear();
        SOOrder sOOrder = Base.Document.Current;
        int? nullable = new int?(0);
        int? customerLocationID = new int?(0);
        if (sOOrder != null)
        {
            nullable = sOOrder.CustomerID;
            customerLocationID = sOOrder.CustomerLocationID;
        }
        int? siteID = new int?(0);
        //SOShipmentEntry sOShipmentEntry1 = PXGraph.CreateInstance<SOShipmentEntry>();
        SOShipment destinationDocument = sOShipmentEntry.Document.Insert();
        destinationDocument.ShipmentType = "T";
        destinationDocument = sOShipmentEntry.Document.Update(destinationDocument);
        destinationDocument.Operation = "I";
        destinationDocument = sOShipmentEntry.Document.Update(destinationDocument);
        using (IEnumerator<PXResult<SOLine>> enumerator1 = PXSelectReadonly<SOLine, Where<SOLine.orderType, Equal<Required<SOLine.orderType>>, And<SOLine.orderNbr, Equal<Required<SOLine.orderNbr>>>>>.Select(Base, new object[] { Base.Document.Current.OrderType, Base.Document.Current.OrderNbr }).GetEnumerator())
        {
            if (enumerator1.MoveNext())
            {
                SOLine line = (SOLine)enumerator1.Current;
                siteID = line.SiteID;
            }
        }
        destinationDocument.SiteID = siteID;
        destinationDocument.DestinationSiteID = sOOrder.DestinationSiteID;
        destinationDocument = sOShipmentEntry.Document.Update(destinationDocument);
        //sOOrderEntry.Document.Current = sOOrder;
        if (Base.Document.Current != null)
        {
            DocumentList<SOShipment> documentList = new DocumentList<SOShipment>(sOShipmentEntry);
            sOShipmentEntry.CreateShipment(Base.Document.Current, sOShipmentEntry.Document.Current.SiteID, sOShipmentEntry.Document.Current.ShipDate, new bool?(false), "I", documentList);
            if (sOShipmentEntry.Document.Current.ShipmentNbr != null)
            {

                SOOrderEntry sOOrderEntry1 = PXGraph.CreateInstance<SOOrderEntry>();
                sOOrderEntry1.Clear();
                sOOrderEntry1.Document.Current = sOOrder;
                int? openShipmentCntr = Base.Document.Current.OpenShipmentCntr;
                if ((openShipmentCntr.GetValueOrDefault() > 0 ? openShipmentCntr.HasValue : false))
                {
                    sOOrder.Status = SOOrderStatus.Shipping;
                    sOOrder.Hold = new bool?(false);
                    sOOrderEntry1.Document.Update(sOOrder);
                    sOOrderEntry1.Save.Press();
                    _retval = sOShipmentEntry.Document.Current.ShipmentNbr;
                }
            }
        }
        return _retval;
    }

Следующий кодподтверждает отгрузку и обновляет IN.

private void ConfirmShipment(string shipmentnbr)
    {
        SOShipmentEntry sOShipmentEntry = PXGraph.CreateInstance<SOShipmentEntry>();
        SOOrderEntry sOOrderEntry = PXGraph.CreateInstance<SOOrderEntry>();
        sOShipmentEntry.Clear();
        sOOrderEntry.Clear();
        sOOrderEntry.Document.Current = PXSelect<SOOrder, Where<SOOrder.orderType, Equal<Required<SOOrder.orderType>>, And<SOOrder.orderNbr, Equal<Required<SOOrder.orderNbr>>>>>.Select(sOOrderEntry, Base.Document.Current.OrderType, Base.Document.Current.OrderNbr);
        sOShipmentEntry.Document.Current = PXSelect<SOShipment,Where<SOShipment.shipmentNbr, Equal<Required<SOShipment.shipmentNbr>>>>.Select(sOShipmentEntry,shipmentnbr);
        if(sOShipmentEntry.Document.Current!= null && sOOrderEntry.Document.Current != null)
        {
            sOShipmentEntry.ConfirmShipment(sOOrderEntry, sOShipmentEntry.Document.Current);
            sOShipmentEntry.UpdateIN.Press();
        }
    }

Я могу выбрать заказ клиента в документе переноса покупки, но статус документа отгрузки по-прежнему отображается открытым и не завершенным.

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

«Счетчики отгрузки повреждены. «

...