cancel
Showing results for 
Search instead for 
Did you mean: 

Importar oferta de venta desde VB6

rimaribe
Participant
0 Kudos

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

Accepted Solutions (1)

Accepted Solutions (1)

rimaribe
Participant
0 Kudos

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.

Answers (2)

Answers (2)

saul_hernandez2
Participant
0 Kudos

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.

rimaribe
Participant
0 Kudos

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.

saul_hernandez2
Participant
0 Kudos

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

rimaribe
Participant
0 Kudos

No tenia instalado el Client 2012.

Lo acabo de instalar en el equipo con Win7 y ahora aparece el mensaje "Failed connect or logon to SLD, please check connection parameters and configure file"

En la PC con XP no carga el SAP cliente, en la PC con Win7 si carga normal.

Saludos

saul_hernandez2
Participant
0 Kudos

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.

rimaribe
Participant
0 Kudos

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.

saul_hernandez2
Participant
0 Kudos

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.

rimaribe
Participant
0 Kudos

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

Former Member
0 Kudos

Hola Ricardo, yo capturo el docentry de la siguiente forma  Dim Variable As String = oCompany.GetNewObjectKey.ToString().

Saludos cordiales

former_member188471
Active Contributor
0 Kudos

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.

rimaribe
Participant
0 Kudos

Estimado Claudio,

Me parece que la opcion ToString() es para VB.Net, yo estoy usando VB6 he probado poniendo solo oCompany.GetNewObjectKey y no me devuelve nada.

Otra cosa, ¿en que parte del código pongo que me devuelva el docentry, al final?

Saludos

rimaribe
Participant
0 Kudos

Estimado Julian,

Estoy ejecutando el codigo en VB6, me parece que la opcion ToString es para VB.Net.

Gracias

Ricardo Uribe

Former Member
0 Kudos

Estimado, tienes razón olvide decir que estaba en vb.net y quedaría como tú dices oCompany.GetNewObjectKey, esta linea debería ir después que ya hallas ingresado la oferta de venta.

Saludos

rimaribe
Participant
0 Kudos

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

former_member188471
Active Contributor
0 Kudos

Es correcto, disculpa.

former_member188471
Active Contributor
0 Kudos

Esa parte lo controla SAP no te preocupes asignara el que corresponda.

saul_hernandez2
Participant
0 Kudos

Hola Ricardo.

Puedes marcar unicamente una respuesta como correcta, pero puedes marcar varias repuestas como de ayuda.

Saludos.

Former Member
0 Kudos

Estimado Ricardo, este hilo a lo mejor resuelve tu duda  https://scn.sap.com/thread/3378055

Saludos cordiales