Lo primero seria saber cuando quieres crear una transferencia de stock, para saber cuando quieres captar el evento y su posterior código.
Pero me temo que vas a tener que captar la información de una solicitud y crear una transferencia de stock, pero acuérdate de colocar la información base para que haga referencia a su anterior documento.
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 solicitud que desea copiar. Luego crear una instancia del objeto Traslado. Establecer las propiedades básicas del encabezado para el Traslado (por ejemplo, CardCode, DocDate, etc.). Recorrer las Líneas de la Solicitud e ir agregando las líneas al Traslado a medida que avanzas. Establece las propiedades BaseLine, BaseType y BaseEntry ( BaseLine debe ser el LineNum de la Solicitud, BaseType será 1250000001 para una Solicitud y BaseEntry es la DocEntry de la Solicitud). Establece el código de artículo y la cantidad en la línea del Traslado. Finalmente, agrega el Traslado.
La segunda opción es usar la interfaz XML en la DI API. Como antes, se debe crear una instancia del objeto Solicitud y recupera la Solitud que deseas copiar. Exporta esto a una cadena XML utilizando el método GetAsXML. Usa XSLT para transformar esto del formato Socilitud XML al formato de Traslado (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 Solicitud. Una vez que tenga el xml para el Traslado, use el método GetObjectFromXML del objeto Company en la API DI para cargar este XML en un objeto de Traslado 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.
Aca un ejemplo de copiar documentos (Desde una Orden PO a Una Factura de Compras AP)
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
@Gera_Mendez y @Charlei117 muchas gracias por su apoyo con el tema. Afortunadamente con el ejemplo que me proporciona @GabrielGS pude pasarlo al lenguaje C# y conseguir la copia de las líneas de un documento a otro.
Gracias a todos por su aportación. Saludos cordiales