Entregas de productos por SDK

Hola Expertos,

Quisiera saber como crear una entrega a partir de una factura reserva ya creada,

usando el SDK de SAP Business One.

1 me gusta

No hay una función o método que pueda copiar automáticamente un documento a otro. En su lugar, debe usar los objetos apropiados de DI API para copiar todas las propiedades que deseas transferir y luego agregar el nuevo documento. Hay dos formas básicas de lograr esto:

  • Crear una instancia del objeto Origen y usar el método GetByKey para recuperar la factura que desea copiar. Luego crear una instancia del objeto Entrega. Establecer las propiedades básicas del encabezado para la entrega (por ejemplo, CardCode, DocDate, etc.). Recorrer las Líneas de la Facura e ir agregando las líneas a la Entrega a medida que avanzas. Establece las propiedades BaseLine, BaseType y BaseEntry ( BaseLine debe ser el LineNum de la Factura, BaseType será 13 para una Factura y BaseEntry es la DocEntry de la Factura). Establece el código de artículo y la cantidad en la línea de la Entrega. Finalmente, agrega la Entrega.

  • La segunda opción es usar la interfaz XML en la DI API. Como antes, se debe crear una instancia del objeto Entrega y recupera la Factura que deseas copiar. Exporta esto a una cadena XML utilizando el método GetAsXML. Usa XSLT para transformar esto del formato Factura XML al formato de Entrega (básicamente el mismo pero con diferentes propiedades de tipo de objeto). La transformación XSLT debe llenar los nodos BaseLine, BaseType y BaseEntry en las líneas del documento utilizando los valores de la Factura. Una vez que tenga el xml para la Entrega, use el método GetObjectFromXML del objeto Company en la API DI para cargar este XML en un objeto de Entrega y luego agregarlo.

El Método 1 es más simple de implementar. El Método 2 es mas complejo, pero es más rápido (para documentos más grandes) y puede ser más flexible.

Usando el Metodo 1, Aca esta un ejemplo de copiar documentos desde una Orden PO a Una Factura de Compras AP, para tu caso es casi lo mismo, solo que debe usar los objetos respectivos (oInvoices y oDeliveryNotes)

Private Sub DO_GRPO(ByVal PO_DocEntry As Integer)
 
        Dim iTotalPO_Line As Integer
        Dim iTotalFrgChg_Line As Integer
 
        Dim baseGRPO As SAPbobsCOM.Documents
        baseGRPO = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oPurchaseOrders)
 
        Dim GRPO As SAPbobsCOM.Documents
        GRPO = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oPurchaseInvoices)
 
 
        If baseGRPO.GetByKey(PO_DocEntry) = True Then
 
            GRPO.CardCode = baseGRPO.CardCode
            GRPO.DocDate = Today.Date
            GRPO.DocDueDate = Today.Date
 
            iTotalPO_Line = baseGRPO.Lines.Count
            iTotalFrgChg_Line = baseGRPO.Expenses.Count
 
            Dim x As Integer
            For x = 0 To iTotalPO_Line - 1
 
                baseGRPO.Lines.SetCurrentLine(x)
 
                If baseGRPO.Lines.LineStatus = SAPbobsCOM.BoStatus.bost_Close Then
 
                Else
 
                    GRPO.Lines.ItemCode = baseGRPO.Lines.ItemCode
                    GRPO.Lines.WarehouseCode = baseGRPO.Lines.WarehouseCode
                    GRPO.Lines.Quantity = baseGRPO.Lines.Quantity
 
                    GRPO.Lines.BaseType = "22"
                    GRPO.Lines.BaseEntry = baseGRPO.DocEntry
                    GRPO.Lines.BaseLine = baseGRPO.Lines.LineNum
 
                    GRPO.Lines.Add()
                End If
 
 
            Next
 
            ' Freight Charges
 
            If iTotalFrgChg_Line > 0 Then
 
                Dim fcnt As Integer
 
                For fcnt = 0 To iTotalFrgChg_Line - 1
 
                    GRPO.Expenses.SetCurrentLine(fcnt)
                    GRPO.Expenses.ExpenseCode = baseGRPO.Expenses.ExpenseCode
                    GRPO.Expenses.BaseDocType = "22"
                    GRPO.Expenses.BaseDocLine = baseGRPO.Expenses.LineNum
                    GRPO.Expenses.BaseDocEntry = baseGRPO.DocEntry
 
                    GRPO.Expenses.Add()
 
                Next
 
            End If
 
            GRPO.Comments = "Test"
 
            lRetCode = GRPO.Add
 
            If lRetCode <> 0 Then
                oCompany.GetLastError(lErrCode, sErrMsg)
                MsgBox(lErrCode & ", " & sErrMsg)
            Else
                'Me.Text = "Added"
                MsgBox("Added")
                Load_PO()
            End If
 
        End If
 
        baseGRPO = Nothing
        GRPO = Nothing
 
        GC.Collect()
 
    End Sub

Saludos.

2 Me gusta

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.