Sol. de Traslado a Transf. de Stock - DI API

Buen día expertos,

Estoy probando un código para crear transferencias de stock en SAP B1, con eso no tengo problema.

Quería consultar si hay algún código o función que pueda convertir o pasar una Solicitud de Traslado a una Transferencia de Stock a traves de DI API.

He estado buscando pero no encuentro nada relacionado con esta conversión.

Espero puedan ayudarme, gracias de antemano!

¿Alguien de @businessone que sepa sobre el tema?

Hay varias personas con experiencia en SDK, esperemos poder recibir aportaciones.

Un saludo.

2 Me gusta

Buenas @l.villarreal,

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.

Un saludo!

2 Me gusta

Tal como dice @Charlei117.

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:

  1. 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.

  2. 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.

Saludos.

1 me gusta

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

Saludos.

Buen día!

@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 :v:t3:

2 Me gusta

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