Create a delivery via SAP DI API

4.2k Views Asked by At

I am using SAP B1 9.1 HANA and programmatically creating a delivery upon successful shipment of a product. When the delivery is created, I get Quantity falls into negative inventory [DLN1.ItemCode][line: 1] for a product with positive on-hand inventory. Has anyone seen this error?

Thanks.

Here is the code.

Private Function createDelivery(SalesOrderKey As Integer, MyConn As OdbcConnection)

        Dim myString As String = ""
        Dim ivar As Integer
        Dim icnt As Integer
        Dim oSalesOrder As SAPbobsCOM.Documents
    Dim oDeliveryNote As SAPbobsCOM.Documents
    Dim oDeliveryLines As SAPbobsCOM.Documents
    Dim lRetCode As Integer
    Dim PostSuccess As Boolean
    Dim DeliveryLineAdded As Boolean
    oSalesOrder = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oOrders)
    If oSalesOrder.GetByKey(SalesOrderKey) Then
        oDeliveryNote = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oDeliveryNotes)
        oDeliveryNote.CardCode = oSalesOrder.CardCode
        oDeliveryNote.SalesPersonCode = oSalesOrder.SalesPersonCode
        oDeliveryNote.DocType = SAPbobsCOM.BoDocumentTypes.dDocument_Items
        oDeliveryNote.DocumentSubType = SAPbobsCOM.BoDocumentSubType.bod_None
        oDeliveryNote.Address = oSalesOrder.Address
        oDeliveryNote.ShipToCode = oSalesOrder.ShipToCode
        oDeliveryNote.Address2 = oSalesOrder.Address2
        oDeliveryNote.HandWritten = SAPbobsCOM.BoYesNoEnum.tNO
        oDeliveryNote.JournalMemo = "Delivery - " & oSalesOrder.CardCode
        oDeliveryNote.Comments = "Based on SO " & Convert.ToString(SalesOrderKey)
        oDeliveryNote.PaymentGroupCode = oSalesOrder.PaymentGroupCode
        oDeliveryNote.DocObjectCode = SAPbobsCOM.BoObjectTypes.oDeliveryNotes
        oDeliveryNote.DocObjectCodeEx = SAPbobsCOM.BoObjectTypes.oDeliveryNotes
        oDeliveryNote.DocDueDate = Now.Month & "/" & Now.Day & "/" & Now.Year
        oDeliveryNote.TrackingNumber = ""

        For icnt = 0 To oSalesOrder.Lines.Count - 1
            oSalesOrder.Lines.SetCurrentLine(icnt)
            oDeliveryNote.Lines.ItemCode = oSalesOrder.Lines.ItemCode
            oDeliveryNote.Lines.Quantity = oSalesOrder.Lines.Quantity


            UpdateSystemLog(0, 0, "Insert Delivery SKU: " + oSalesOrder.Lines.ItemCode, "IME-D0V", MyConn)
            UpdateSystemLog(0, 0, "Insert Delivery Quantity: " + Convert.ToString(oSalesOrder.Lines.Quantity), "IME-D0V", MyConn)


            oDeliveryNote.Lines.DiscountPercent = oSalesOrder.Lines.DiscountPercent
            oDeliveryNote.Lines.TaxCode = oSalesOrder.Lines.TaxCode
            oDeliveryNote.Lines.LineTotal = oSalesOrder.Lines.LineTotal
            oDeliveryNote.Lines.COGSCostingCode = oSalesOrder.Lines.COGSCostingCode
            oDeliveryNote.Lines.COGSCostingCode2 = oSalesOrder.Lines.COGSCostingCode2
            oDeliveryNote.Lines.COGSCostingCode3 = oSalesOrder.Lines.COGSCostingCode3
            oDeliveryNote.Lines.COGSCostingCode4 = oSalesOrder.Lines.COGSCostingCode4
            oDeliveryNote.Lines.COGSCostingCode5 = oSalesOrder.Lines.COGSCostingCode5
            oDeliveryNote.Lines.Rate = oSalesOrder.Lines.Rate

            oDeliveryNote.Lines.Add()
        Next
        lRetCode = oDeliveryNote.Add()

        If lRetCode <> 0 Then
            Dim sErr As String
            oCompany.GetLastError(lRetCode, sErr)
            UpdateSystemLog(lRetCode, 0, "Insert Delivery Error --> " + sErr, "IME-D0A", MyConn)
        Else
            Dim sErr As String
            oCompany.GetLastError(lRetCode, sErr)
            UpdateSystemLog(lRetCode, 0, "Insert Delivery --> " + sErr, "IME-D0B", MyConn)
        End If


    End If
End Function
0

There are 0 best solutions below