Importar ordenes de compra desde excel via DI API

Bueno, continuando con la programacion en vba, hoy quiero mostrarles como se puede importar un documento (en este caso orden de compra) a SAP usando una hoja de excel y unas pocas lineas de codigo.

Para ver los pasos previos (necesarios para que funcione el codigo), deben mirar el primer post;

Programar una macro para importar desde excel usando la DI API

Vamos a comenzar abriendo MS Excel y a llenar los datos como se muestra en esta imagen (los titulos los pueden colocar a su gusto). El boton no es necesario que lo agreguen aun.

instantánea22

Una vez colocado esos datos (obviamente con los codigos de su compañia), vamos a la ventana de macros y pegamos el siguiente codigo.

Public oCompany As SAPbobsCOM.Company

Public Sub ConnSAP()

        Dim lRetCode, ErrorCode As Long
        Dim ErrorMessage As String
        
        Set oCompany = New SAPbobsCOM.Company
        
        oCompany.DbServerType = SAPbobsCOM.BoDataServerTypes.dst_MSSQL2008
        oCompany.DbUserName = "sa"
        oCompany.DbPassword = "SAP*****"
        oCompany.Server = "sap9"
        oCompany.CompanyDB = "SBO_DemoCL"
        oCompany.UserName = "manager"
        oCompany.Password = "********"
        oCompany.UseTrusted = False
        oCompany.Language = ln_Spanish_La
        
        lRetCode = oCompany.Connect()
        If lRetCode <> 0 Then
            MsgBox (oCompany.GetLastErrorDescription())
        Else
            Imp_OC
        End If
End Sub

Public Sub Imp_OC()
        
        Dim Retval As Long
        Dim vDoc As SAPbobsCOM.Documents
        
        Set vDoc = oCompany.GetBusinessObject(oPurchaseOrders)
        
        RowC = 2
        RowD = 5
        
        If ActiveSheet.Cells(RowC, 1) <> "" Then
        
            vDoc.CardCode = ActiveSheet.Cells(RowC, 1)
            vDoc.CardName = ActiveSheet.Cells(RowC, 2)
            vDoc.DocDate = ActiveSheet.Cells(RowC, 3)
            vDoc.DocDueDate = ActiveSheet.Cells(RowC, 4)
            
            vDoc.Lines.ItemCode = ActiveSheet.Cells(RowD, 1)
            vDoc.Lines.Quantity = ActiveSheet.Cells(RowD, 2)
            vDoc.Lines.Price = ActiveSheet.Cells(RowD, 3)
            vDoc.Lines.WarehouseCode = ActiveSheet.Cells(RowD, 4)
            vDoc.Lines.TaxCode = ActiveSheet.Cells(RowD, 5)
            
            RowD = RowD + 1

            Do While ActiveSheet.Cells(RowD, 1) <> ""
            
                vDoc.Lines.Add
                                
                vDoc.Lines.ItemCode = ActiveSheet.Cells(RowD, 1)
                vDoc.Lines.Quantity = ActiveSheet.Cells(RowD, 2)
                vDoc.Lines.Price = ActiveSheet.Cells(RowD, 3)
                vDoc.Lines.WarehouseCode = ActiveSheet.Cells(RowD, 4)
                vDoc.Lines.TaxCode = ActiveSheet.Cells(RowD, 5)
            
                RowD = RowD + 1
                
            Loop
            
            Retval = vDoc.Add
            If Retval <> 0 Then
                MsgBox (oCompany.GetLastErrorDescription())
            Else
                MsgBox ("OK")
            End If
        Else
            MsgBox ("Nada que cargar")
        End If
        
        oCompany.Disconnect
End Sub

Acto seguido, volvemos a excel y agregamos un boton de formulario en la hoja desde la pestaña programador –> insertar –> controles de formulario

instantánea23

Una vez agregado el boton, debemos asignarle la macro para que ejecute el codigo que acabamos de escribir.

instantánea24

instantánea25

Y eso es todo, ahora solo basta con presionar el boton que agregamos y asignamos a la macro, esperar e ir a visualizar a SAP si se creo nuestra OC (Si tienen algun transaction validando campos obligatorios no funcionará al 100% ya que no están incluidos sus campos…ojo con eso.).

instantánea26

Si les aparece el mensaje «OK», quiere decir que se cargó correctamente el documento, de lo contrario aparecerá el mensaje de error correspondiente. Ahora solo basta ir a SAP B1 y revisar el documento.

instantánea27

Y con eso, termina esta publicacion.

Saludos a todos los lectores.

También te podría gustar...

46 Respuestas

  1. Javier dice:

    Hola,

    Al intentar ejecutar la macro me marca el error -10 el nombre del recurso especificado no se encuentra en el archivo de imagen

    algo que me falte?

  2. Alexander dice:

    Hola, muy buen día, copio tal cual el código y me da un error: El componente ActiveX no pudo crear el objeto.
    Ya revisé en la seguridad de excel y si tiene habilitado las funcionalidades ActiveX.
    Estoy usando Excel 2016 y mi sistema es SAP B1 9.2
    Muchas gracias de antemano!

  3. Luis dice:

    Estimado:
    Necesito crear una orden de compra por servicio, que debo modificar en el codigo que tienes acá? .
    Saludos,
    Luis

  4. Julio Cesar dice:

    Estimado:

    El ejemplo que nos muestras es para Ordenes de Compras, será factible hacerlo con Facturas de Proveedores.
    en el codigo esta linea es la que seleccionas el tipo de documento de marketing a usar.
    Set vDoc = oCompany.GetBusinessObject(oPurchaseOrders)
    mi pregunta es para una factura de proveedores que opcion selecciono
    Set vDoc = oCompany.GetBusinessObject(?????????)

    Gracias.

  5. Wuenceslao dice:

    Hola, se podrian subir mas de una orden de compra con este scrip?

  6. Luis Guzhñay dice:

    Buenas tardes estimados.
    Si quisiera solo consultar los datos de un cliente de la table OCRD seria asi?
    Set vDoc = oCompany.GetBusinessObject(OCRD)

  7. Luis Guzhnay dice:

    Necesito obtener la informacion del socio de negocio enviando usando como filtro el id del socio, es una consulta sencilla pero yo que recien estoy aprendiendo se me complica. Por favor si pueden darme algun indicio de como hacerlo les agradeceria mucho.

  8. Enrique dice:

    Estimados, si en el detalle del documento tengo campos de usuario como los puedo agregar, no aparecen disponibles?

    Saludos Cordiales

  9. Dario Bustillos dice:

    Hola Felipe me sale el siguiente mensaje: Error de Compilacion: No se ha definido el tipo definido por el usuario.

    Que puede ser?, gracias por tu ayuda.

  10. Martin de Loera dice:

    Muy buenas tardes

    Estoy muy interesado intentando echar andar esto pero me manda error:
    Se ha producido el error ‘429’ en tiempo de Ejecucion…. El componente ActiveX no puede crear el objeto.

    Alguien ha tenido este mismo error?

    Disculpen ustedes la molestia

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *