Hola Expertos,
Quisiera saber como crear una entrega a partir de una factura reserva ya creada,
usando el SDK de SAP Business One.
Hola Expertos,
Quisiera saber como crear una entrega a partir de una factura reserva ya creada,
usando el SDK de SAP Business One.
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.
Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.