on 05-12-2016 10:35 PM
Buenas tardes estimados,
Estoy utilizando un ejemplo que encontré para migrar una Oferta desde VB6, pero al momento de probar la conexión me aparece el mensaje “Database server type not supported”.
Estos son mis datos de conexión.
oCompany.DbUserName = “sa”
oCompany.DbPassword = “*****”
oCompany.Server = “Servidor”
oCompany.CompanyDB = “SBO_Demo”
oCompany.UserName = “manager”
oCompany.Password = “*******”
oCompany.DbServerType = SAPbobsCOM.BoDataServerTypes.dst_MSSQL2012
oCompany.UseTrusted = False
La versión de SAP que utilizo es SAP Business One 9.1 (9.10.190) PL: 09 (32-bit).
Estoy usando SAP Business One DI API Version 9.0
Espero me puedan ayudar.
Gracias
Estimados para cerrar el hilo voy a poner un resumen aqui.
Primero la PC donde se va a trabajar tiene que tener instalado el cliente de SAP para que se instalen los DLL del DI API, también tener instalado el cliente de SQL en mi caso SQL Client 2012.
Con esto, ya en VB6 en el Menú Proyecto> Referencias...elegimos SAP Business One DI API Version 9.0.
Aquí pongo el código que utilizo el cual gran parte lo saque de la pagina http://www.qualityinfosolutions.com/importar-ordenes-de-compra-desde-excel-via-di-api/
Private Sub cmdExportarSAP_Click()
On Error GoTo errores
Dim oCompany As SAPbobsCOM.Company
Dim Retval as long
Dim rsDet As New ADODB.Recordset
rsDet.CursorLocation = adUseClient
Set oCompany = New SAPbobsCOM.Company
oCompany.DbUserName = "sa"
oCompany.DbPassword = "********"
oCompany.Server = "Servidor"
oCompany.CompanyDB = "SBO_Demo"
oCompany.UserName = "manager"
oCompany.Password = "manager"
oCompany.DbServerType = SAPbobsCOM.BoDataServerTypes.dst_MSSQL2012
oCompany.UseTrusted = False
oCompany.LicenseServer = "Servidor:30000"
Dim vDoc As SAPbobsCOM.Documents
Set vDoc = oCompany.GetBusinessObject(oQuotations)
vDoc.CardCode = Me.txtCodCli.Text
vDoc.CardName = Me.txtCli.Text
vDoc.Address2 = Me.txtDirObr.Text
vDoc.Address = Me.txtDirCli.Text
vDoc.docrate = TipCam
vDoc.DocCurrency = Moneda
vDoc.TaxDate = CDate(Me.txtFecEmi.Text)
vDoc.DocDate = CDate(Me.txtFecEmi.Text)
vDoc.SalesPersonCode = Me.txtCodVen.Text
'Campo de usuario cabecera
vDoc.UserFields.Fields.Item("U_SYP_NOM_VENTA").Value = Me.txtNomCot.Text
'Lineas de detalle
rsDet.Open "VEN_Cot_ExpSAP " & NumMov, cn, adOpenStatic, adLockReadOnly
'
Dim Ambiente As String
'
Dim i As Integer
'
If rsDet.EOF = False Then
For i = 0 To rsDet.RecordCount - 1
vDoc.Lines.ItemCode = rsDet!Codigo
vDoc.Lines.ItemDescription = rsDet![Des]
vDoc.Lines.Quantity = rsDet!Cantidad
Ambiente = rsDet!Ambiente
vDoc.Lines.UserFields.Fields.Item("U_SYP_AMBIENTE").Value = Ambiente
vDoc.Lines.Price = rsDet![Precio Und.]
vDoc.Lines.DiscountPercent = rsDet![% de dscto]
vDoc.Lines.CostingCode = rsDet!Area
vDoc.Lines.CostingCode2 = rsDet![Sub área]
vDoc.Lines.CostingCode3 = rsDet![Unidad de negocio]
vDoc.Lines.Currency = Moneda
'
vDoc.Lines.Add
'
rsDet.MoveNext
Next i
End If
'
retval = vDoc.Add
'
'Recupero docentry de la oferta creada
Me.txtDocEntry.Text = oCompany.GetNewObjectKey()
'
If retval <> 0 Then
MsgBox (oCompany.GetLastErrorDescription())
Else
MsgBox ("OK")
End If
'
oCompany.Disconnect
'
If rsDet.State = adStateOpen Then rsDet.Close: Set rsDet = Nothing
'
Exit Sub
errores:
MsgBox Err.Description & " " & Error
End Sub
Muchas gracias a todos por su ayuda.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hola Ricardo.
Segun tu codigo de vb6 le estas diciendo al DIAPI de SAP que tenes tu base de datos en SQL 2012:
oCompany.DbServerType = SAPbobsCOM.BoDataServerTypes.dst_MSSQL2012
Es esto correcto?
Si no es así en esa linea tendrias que indicarle que SQL tenes.
En mi caso que tengo un SQL 2008R2 alli yo coloco:
oCompany.DbServerType = SAPbobsCOM.BoDataServerTypes.dst_MSSQL2008
Ademas veo que en tu codigo faltan 2 lineas:
server= IP de tu servidor o Nombre de tu servidor.
licenseServer= IP de tu servidor : 30000
/*** donde el 30000 es el puerto de coneccion de SAP ***/
Revisa esto y ojala te ayude en algo.
Saludos.
Saul.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Estimado Saul,
Gracias por contestar.
Si, mi base de datos esta en SQL 2012.
Las 2 lineas que mencionas ya están agregadas y sigue saliendo el mismo mensaje.
Set oCompany = New SAPbobsCOM.Company
oCompany.DbUserName = "sa"
oCompany.DbPassword = "*******"
oCompany.Server = "X.X.X.X"
oCompany.CompanyDB = "SBO_Demo"
oCompany.UserName = "manager"
oCompany.Password = "*********"
oCompany.DbServerType = SAPbobsCOM.BoDataServerTypes.dst_MSSQL2012
oCompany.UseTrusted = False
oCompany.LicenseServer = "X.X.X.X:30000"
Estoy probando este código en una PC con Windows XP, primero asumí que era porque el XP no es compatible con SQL Server 2012, pero luego genere el ejecutable y instale el cliente de SAP en una PC con Win 7 y aparece el mismo mensaje.
Saludos.
Ricardo Uribe.
¿En la pc con windows XP y en la pc con win7 tenes instalado el SQL Client 2012 ?
otra pregunta:
¿Tenes instalado SAP cliente y entra correctamente en la pc con XP y en la pc con win7 ?
De preferencia tambien que tengas instalado los DIAPI de SAP en dicho equipo.(donde estas corriendo el ejecutable).
Revisa esto por favor.
Saludos.
En una pc donde te corra bien el cliente de SAP, corre tu ejecutable, y verificas si te funciona.
Si en caso no te funciona, instala en esa pc los DIAPI, que vienen con tus instaladores del PL de SAP. (imagen donde los podes ubicar, en mi caso tengo SAP 9.0 PL 15 y en dicha carpeta, voy a packages, luego DIAPI, luego SETUP)
Luego de instalar los DIAPI, corre de nuevo tu ejecutable.
Saludos.
Estimado Saul,
Al parecer faltaba el cliente SQL 2012.
Como este no lo puedo instalar en la PC con XP, lo que hago es generar el EXE y ejecutarlo en la PC con Win7.
Al final ya pude conectar y migrar una oferta de venta.
Solo tengo un par de dudas.
Primero, porque para agregar las lineas de detalle en la oferta , se tiene que agregar una linea antes, ejemplo
vDoc.Lines.ItemCode = rsDet!Codigo
vDoc.Lines.ItemDescription = rsDet![Des]
vDoc.Lines.Quantity = rsDet!Cantidad
vDoc.Lines.Price = rsDet![Precio Und.]
vDoc.Lines.DiscountPercent = rsDet![% de dscto]
rsDet.MoveNext
For i = 1 To rsDet.RecordCount - 1
vDoc.Lines.Add
vDoc.Lines.ItemCode = rsDet!Codigo
vDoc.Lines.ItemDescription = rsDet![Des]
vDoc.Lines.Quantity = rsDet!Cantidad
vDoc.Lines.Price = rsDet![Precio Und.]
vDoc.Lines.DiscountPercent = rsDet![% de dscto]
rsDet.MoveNext
Next i
Segundo, tengo un campo de usuario en la linea de detalle del tipo nvarchar y cuando quiero agregarle un valor desde un recordset.
vDoc.Lines.UserFields.Fields.Item("U_SYP_AMBIENTE").Value = rsDet!Ambiente
aparece un mensaje de error "illegal value entered", he tenido que pasar el valor antes a una variable string para que no me mande el mensaje de error.
Dim Ambiente as string
Ambiente = rsDet!Ambiente
vDoc.Lines.UserFields.Fields.Item("U_SYP_AMBIENTE").Value = Ambiente
Gracias por toda la ayuda prestada.
Ricardo buen día.
Respecto a tus otras dos preguntas:
1.- Para no tener que agregar la linea extra que mencionas puedes estructurar el FOR de esta forma:
For i = 0 To rsDet.RecordCount - 1
vDoc.Lines.ItemCode = rsDet!Codigo
vDoc.Lines.ItemDescription = rsDet![Des]
vDoc.Lines.Quantity = rsDet!Cantidad
vDoc.Lines.Price = rsDet![Precio Und.]
vDoc.Lines.DiscountPercent = rsDet![% de dscto]
vDoc.Lines.Add
rsDet.MoveNext
Next i
inicias con el For i=0
y el vDoc.Lines.Add lo colocamos al final antes de movernos al siguiente registro.
A mí me ha funcionado bien de esa manera.Espero te sirva.
2.- Respecto lo de la variable string, me parece extraño ese error, no se exactamente que sea pero lo mejor es hacerlo como ya lo has indicado, usando como intermedio una variable string .
Me parece excelente que hayas logrado migrar la información que necesitabas desde DIAPI.
Para que a otros miembros de la comunidad les pueda ayudar este tema, favor de colocarlo como Resuelto, y marcar las respuestas que te ayudaron o resolvieron tu duda.
Fue un gusto apoyarte.
Saludos cordiales.
Saul.
Buen día Saul,
Acabo de cambiar mi código a la manera que mencionas y funciona perfecto.
Me gustaría aun no cerrar el hilo de la pregunta, ya que tengo algunas consultas mas al final pondría todo lo que he hecho y cerraría el hilo.
Mi pregunta es, al momento de migrar yo necesito recuperar algunos valores que se autogeneran en SAP, ¿como podría hacer eso?.
Por ejemplo al momento de guardar una Oferta se genera el docentry, numdoc y un numero que manejamos internamente llamado RQ.
Estaba pensado en hacer esto desde el transaction del mismo SAP, que después de guardar actualice valores en otra base de datos, pero quiero saber si habría otra manera.
Saludos
Ricardo Uribe
Para tu pregunta 1, tienes que tener en cuenta que para sap las matrices siempre empiezan con 0 así como sucede con los detalles de documento.
Para tu pregunta 2, igual puedes hacer esto:
vDoc.Lines.UserFields.Fields.Item("U_SYP_AMBIENTE").Value.ToString = rsDet!Ambiente
para indicarle que tu campo usuario aceptar valores string.
Hola Claudio,
Ya realice el cambio y funciono.
Parar cerrar el hilo, ¿el DI API me asegura que al guardar desde VB6 no se va a cruzar con alguien que guarda desde SAP y que el numero que me devuelve oCompany.GetNewObjectKey es el numero de la ultima oferta guardada desde VB6 y no de alguien que acaba de crear una oferta desde SAP?.
¿Puedo marcar mas de una respuesta como Correcta?.
Saludos
Ricardo Uribe
Estimado Ricardo, este hilo a lo mejor resuelve tu duda https://scn.sap.com/thread/3378055
Saludos cordiales
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
110 | |
12 | |
11 | |
6 | |
5 | |
4 | |
4 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.