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.
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
Una vez agregado el boton, debemos asignarle la macro para que ejecute el codigo que acabamos de escribir.
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.).
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.
Y con eso, termina esta publicacion.
Saludos a todos los lectores.
Hola Felipe me sale el siguiente mensaje: Error de Compilacion: No se ha definido el tipo definido por el usuario.
Que puede ser?,
Hola, me ha conectado perfectamente y he logrado introducir datos en la la base de datos de prueba. Me podrías ayudar como hacer esto con las facturas de proveedores. Lo he intentado pero no logro usando el objeto oPurchaseInvoices.
Muestra el codigo que estas usando o el error que da al crear el documento.
Atte.
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
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.
Estimados, si en el detalle del documento tengo campos de usuario como los puedo agregar, no aparecen disponibles?
Saludos Cordiales
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.
Buenas tardes estimados.
Si quisiera solo consultar los datos de un cliente de la table OCRD seria asi?
Set vDoc = oCompany.GetBusinessObject(OCRD)
Hola, se podrian subir mas de una orden de compra con este scrip?
Si estimado, necesita incluir esto dentro de un ciclo for o while
Atte.
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.
oPurchaseInvoice
Estimado:
Necesito crear una orden de compra por servicio, que debo modificar en el codigo que tienes acá? .
Saludos,
Luis
En ese caso, en la cabecera debes enviar la propiedad
vDoc.DocType = dDocument_Service
y en el detalle debes enviar como minimo
vDoc.Lines.ItemDescription = «Descripcion del servicio»
vDoc.Lines.LineTotal = 50000
vDoc.Lines.TaxCode = Impuesto
vDoc.Lines.AccountCode = Cuenta contable del servicio
Atte.
Muchas Gracias Felipe, Funciono 100% !!!!.
Saludos..LuisMR
Estimado :
Se puede dejar la orden de compra pase por autorización?
Sldos,Luismr
Debes tener activado en las parametrizaciones generales, un checkbox que dice, «Activar procedimiento por DI».
Atte.
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!
Esto suele suceder porque usas Office 32 bits y tienes instalado SAP B1 en 64 bits o viceversa.
Atte.
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?
Asegurate de tener instalada la DI API.
Tambíen verifica que si el office es 32 bits, el cliente y DI API sean 32 bits tambien, o ambos en 64 bits.
Atte.