Consultas a la BD de SAP desde un programa en VB

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Erika T
    Junior Member
    • sep
    • 2

    #1

    Consultas a la BD de SAP desde un programa en VB

    Hola, quisiera saber como se puede realizar la conexión a la BD de SAP desde un programa en VB 6, solo para consultar datos sobre los productos contenidos en la BD. Si puedieran ayudarme se los agradeceria mucho.
  • pedrol
    Junior Member
    • ago
    • 10

    #2
    holas

    yo estoy mirando algo similar , he puesto un post abajo

    puedes hacer peticiones utilizando SAP gui scripting
    o tambien conectando a traves de una RFC

    hay mucha documentacion y ejemplos en internet




    un saludo
    pedro luis garcia

    Comentario

    • Erika T
      Junior Member
      • sep
      • 2

      #3
      Hola Pedro, muchas gracias por atender a mi pregunta, pero segun lo que entendi del SAP gui, y corrigeme si me equivoco, es que este sirve para optimizar las transacciones SAP utilizadas habitualmente, digase cargar valores o crear botones y con ello variar la interface de SAP.

      Lo que yo requiero es conectar un programa externo que esta hecho en VB 6 a la base de datos del SAP, la cual esta en ORACLE, para hacer consultas de precios y caracteristicas de los productos que estan en esa BD, pero no se como hacerlo.

      Si pudieran orientarme se los agradeceria mucho.

      Comentario

      • ArtuAgui
        Junior Member
        • mar
        • 3

        #4
        Emeplo de descarga de datos desde VB

        Espero que a alguien le pueda servir este código.
        Extrae la órdenes previsionales de fabricación desde ayer, hasta 7 días de horizonte.

        Código:
        Sub Captura_OPs()
        '
        ' Captura las Órd. Previsionales de fabricación
        '
            Dim R3, MyFunc, App As Object
            Dim SEL_TAB, NAMETAB, TABENTRY, ROW As Object
            Dim Registro As String
            Dim Longitud as Long
        
        
        '**********************************************
        'Crear objeto y parámetros de conexión
        '**********************************************
            Set R3 = CreateObject("SAP.Functions")
            R3.Connection.System = "ABC"
            R3.Connection.SystemNumber = "01"
            R3.Connection.ApplicationServer = "server.mysap.com"
            R3.Connection.Client = "012"
            R3.Connection.User = "username"
            R3.Connection.Password = "password"
            R3.Connection.Language = "ES"
            
            If R3.Connection.Logon(0, True) <> True Then
                MsgBox ("Conexión SAP imposible")
                Exit Sub
            End If
        
        '************************************************* ****
        'Call RFC function TABLE_ENTRIES_GET_VIA_RFC
        '************************************************* ****
            Set MyFunc = R3.Add("RFC_READ_TABLE")
            
            Set strExport1 = MyFunc.Exports("QUERY_TABLE")
            Set strExport2 = MyFunc.Exports("DELIMITER")
            Set tblOptions = MyFunc.Tables("OPTIONS")
            Set tblData = MyFunc.Tables("DATA")
            Set tblFields = MyFunc.Tables("FIELDS")
        
        '************************************************* ****
        'Exportar órdenes de fabricación
        '************************************************* ****
        
            ' Definición de la Tabla a exportar
            strExport1.Value = "PLAF"     ' <--------- Tabla
            strExport2.Value = "|"          ' <--------- Delimitador de campos
            
            ' (EQ means =, LT means <, GT means >)
            ' Defino criterios para el Query
            tblOptions.AppendRow
            tblOptions(1, "TEXT") = "PLWRK EQ '1234'"
            
            tblOptions.AppendRow
            tblOptions(2, "TEXT") = "AND PAART EQ 'PE'"
            
            Desde = Format(Now() - 1, "YYYYMMDD")
            Hasta = Format(Now() + 7, "YYYYMMDD")
            
            tblOptions.AppendRow
            tblOptions(3, "TEXT") = "AND PSTTR LT " & Hasta
            
            tblOptions.AppendRow
            tblOptions(4, "TEXT") = "AND LGORT EQ 'P001'"
            
        
        
        
            ' Definición de campos a recuperar
            tblFields.AppendRow
            tblFields(1, "FIELDNAME") = "MATNR"     'Material
            
            tblFields.AppendRow
            tblFields(2, "FIELDNAME") = "GSMNG"     'Cantidad
            
            tblFields.AppendRow
            tblFields(3, "FIELDNAME") = "VERID"     'Versión de fabricación
            
            tblFields.AppendRow
            tblFields(4, "FIELDNAME") = "PSTTR"     'Fecha inicio de la orden
            
        
            
            
            debut_extract = 1
            ' Ejecución RFC
            If MyFunc.Call = True Then
                If tblData.RowCount > 0 Then
                    For introw = 1 To tblData.RowCount
                        Registro = tblData(introw, "WA")
                        Longitud = Len(Registro)
                        '
                        ' Proceso el registro extraído
                        '                               ...
                        '
                    Next
                End If
            End If
            
            ' Desconexión
            R3.Connection.logoff
        
        End Sub
        Si alguien conoce un ejemplo de lo contrario (subir o actualizar algún campo de una tabla, por favor me contacte at pirel dot com)

        Saludos,
        -ArtuAgui-

        Comentario

        • joedelphi2002
          Junior Member
          • mar
          • 2

          #5
          Dim Rst As ADODB.Recordset
          Dim Cnn As ADODB.Connection


          Set Rst = New ADODB.Recordset
          Set Cnn = New ADODB.Connection
          sQuery = "Driver={SQL Server};Server=SERVERSAP;Database=empresa;" 'Conexion 1
          sQuery = "Provider=SQLOLEDB.1;Password=Nut1610;Persist Security Info=True;User ID=sa;Initial Catalog=empresa;Data Source=Serversap" 'Conexion 2
          'Cualquiera de las dos conexiones funciona, la primera es por usuario de windows y la segunda por el SA, por seguridad puedes leer esta cadena de alguna archivo encriptdo, etc, es decir, ponerle la seguridad que queiras si es que no pueden ver la contraseña del SA los desarrolaldores
          Cnn.Open sQuery 'abre la conexion a BD
          Cnn.Execute sQuery 'Ejecuta un comando Insert o Update donde squery es el comando a ejecutar
          Rst.Open sQuery, Cnn 'ejecuta una consulta a la BD y lo deja en el recordset

          Espero te sirva

          Comentario

          • ihurtado
            Junior Member
            • sep
            • 6

            #6
            Duda sobre declaracion de variables

            Originalmente publicado por ArtuAgui
            Espero que a alguien le pueda servir este código.
            Extrae la órdenes previsionales de fabricación desde ayer, hasta 7 días de horizonte.

            Código:
            Sub Captura_OPs()
            '
            ' Captura las Órd. Previsionales de fabricación
            '
                Dim R3, MyFunc, App As Object
                Dim SEL_TAB, NAMETAB, TABENTRY, ROW As Object
                Dim Registro As String
                Dim Longitud as Long
            
            
            '**********************************************
            'Crear objeto y parámetros de conexión
            '**********************************************
                Set R3 = CreateObject("SAP.Functions")
                R3.Connection.System = "ABC"
                R3.Connection.SystemNumber = "01"
                R3.Connection.ApplicationServer = "server.mysap.com"
                R3.Connection.Client = "012"
                R3.Connection.User = "username"
                R3.Connection.Password = "password"
                R3.Connection.Language = "ES"
                
                If R3.Connection.Logon(0, True) <> True Then
                    MsgBox ("Conexión SAP imposible")
                    Exit Sub
                End If
            
            '************************************************* ****
            'Call RFC function TABLE_ENTRIES_GET_VIA_RFC
            '************************************************* ****
                Set MyFunc = R3.Add("RFC_READ_TABLE")
                
                Set strExport1 = MyFunc.Exports("QUERY_TABLE")
                Set strExport2 = MyFunc.Exports("DELIMITER")
                Set tblOptions = MyFunc.Tables("OPTIONS")
                Set tblData = MyFunc.Tables("DATA")
                Set tblFields = MyFunc.Tables("FIELDS")
            
            '************************************************* ****
            'Exportar órdenes de fabricación
            '************************************************* ****
            
                ' Definición de la Tabla a exportar
                strExport1.Value = "PLAF"     ' <--------- Tabla
                strExport2.Value = "|"          ' <--------- Delimitador de campos
                
                ' (EQ means =, LT means <, GT means >)
                ' Defino criterios para el Query
                tblOptions.AppendRow
                tblOptions(1, "TEXT") = "PLWRK EQ '1234'"
                
                tblOptions.AppendRow
                tblOptions(2, "TEXT") = "AND PAART EQ 'PE'"
                
                Desde = Format(Now() - 1, "YYYYMMDD")
                Hasta = Format(Now() + 7, "YYYYMMDD")
                
                tblOptions.AppendRow
                tblOptions(3, "TEXT") = "AND PSTTR LT " & Hasta
                
                tblOptions.AppendRow
                tblOptions(4, "TEXT") = "AND LGORT EQ 'P001'"
                
            
            
            
                ' Definición de campos a recuperar
                tblFields.AppendRow
                tblFields(1, "FIELDNAME") = "MATNR"     'Material
                
                tblFields.AppendRow
                tblFields(2, "FIELDNAME") = "GSMNG"     'Cantidad
                
                tblFields.AppendRow
                tblFields(3, "FIELDNAME") = "VERID"     'Versión de fabricación
                
                tblFields.AppendRow
                tblFields(4, "FIELDNAME") = "PSTTR"     'Fecha inicio de la orden
                
            
                
                
                debut_extract = 1
                ' Ejecución RFC
                If MyFunc.Call = True Then
                    If tblData.RowCount > 0 Then
                        For introw = 1 To tblData.RowCount
                            Registro = tblData(introw, "WA")
                            Longitud = Len(Registro)
                            '
                            ' Proceso el registro extraído
                            '                               ...
                            '
                        Next
                    End If
                End If
                
                ' Desconexión
                R3.Connection.logoff
            
            End Sub
            Si alguien conoce un ejemplo de lo contrario (subir o actualizar algún campo de una tabla, por favor me contacte at pirel dot com)

            Saludos,
            -ArtuAgui-

            ArtuAgui, tengo una duda, como declaro las variables strExport1, strExport2, tblOptions , tblData , tblFields?
            de antemano muchas gracias !

            Comentario

            • doraxploradora
              Junior Member
              • oct
              • 1

              #7
              conectar a una funcion en SAP desde Visual Basic- envia cabecera&amp;detalle de 1 tiquet

              ' Conectores a las SAP.Functions.
              Dim r3 As Object
              Dim MyFunc As Object

              ' Parametros a enviar a la funcion.
              Dim I_VENDOR As Object 'Proveedor como EXPORT

              Dim I_HEADER As Object 'Cabecera del Pedido de Compras
              Dim E_POSITION As Object 'Detalles como TABLA

              ' Resultado de la llamada a SAP.
              Dim Result1 As Boolean

              Dim ORDENDECOMPRA As Object
              Dim ENTRADADEMERCANCIA As Object
              Dim xPROVEEDOR As Object
              Dim E_MESSAGE As Object 'Mensajes como TABLA



              Private Sub Envia_Lineas()
              ' Establecer la conexion con los Add Ins de SAP.

              Set r3 = CreateObject("SAP.Functions")

              ' Cargar los parametros de conexion
              'R3.Connection.Messageserver = "SAPSERVQAS" ' Nombre del server
              r3.Connection.System = "DEV" ' Sistema
              r3.Connection.SystemNumber = "10" 'Instancia
              r3.Connection.Applicationserver = "SAPSERVQAS" ' Nombre del server
              r3.Connection.Client = "130" ' Mandante
              r3.Connection.User = "d.castro" ' Usuario
              r3.Connection.Password = "xxxx" ' Password
              r3.Connection.language = "ES" ' Idioma

              ' Ejecutar la conexion en modo INVISIBLE.
              If r3.Connection.Logon(0, True) <> True Then
              MsgBox "No se ha podido establecer la conexión"
              Else
              ' Establecer contacto con la funcion.
              Set MyFunc = r3.Add("ZMMF001") 'Nombre de la funcion ZMMF001 en SAP

              'DATOS PARA ENVIAR A SAP

              ' Cargar los parametros a enviar a la funcion - EXPORTING

              ' Datos del header- Cabecera del Ticket

              Set I_HEADER = MyFunc.Exports("I_HEADER")

              MyFunc.Exports.Item("I_HEADER").Value("LIFNR") = rc01(9, 0) 'Codigo del Proveedor
              MyFunc.Exports.Item("I_HEADER").Value("BUKRS") = rc01(0, 0) 'Sociedad
              MyFunc.Exports.Item("I_HEADER").Value("EKORG") = rc01(1, 0) 'Organizacion de Compras
              MyFunc.Exports.Item("I_HEADER").Value("EKGRP") = rc01(10, 0) 'Grupo de Compras
              MyFunc.Exports.Item("I_HEADER").Value("IHREZ") = "100" 'Referencia - Codigo del Chofer

              ' Cargar la tabla con los datos que vamos a enviar - TABLES.

              ' Datos del E_POSITION - Datos del detalle del ticket

              Set E_POSITION = MyFunc.Tables("E_POSITION")

              For I = 0 To UBound(rc01, 2)
              E_POSITION.Rows.Add
              E_POSITION.Value(I + 1, "BEDNR") = rc01(11, I) 'Ticket
              E_POSITION.Value(I + 1, "WERKS") = rc01(12, I) 'Centro
              E_POSITION.Value(I + 1, "LGORT") = rc01(13, I) 'Almacen
              E_POSITION.Value(I + 1, "MATNR") = rc01(14, I) 'Material
              E_POSITION.Value(I + 1, "KBETR") = rc01(15, I) 'Importe
              E_POSITION.Value(I + 1, "MENGE") = rc01(16, I) - rc01(18, I) 'Cantidad menos cantidad penalizada
              E_POSITION.Value(I + 1, "PEINH") = rc01(17, I) 'Cantidad Base
              E_POSITION.Value(I + 1, "MENG2") = rc01(18, I) 'Cantidad Penalizada
              Next


              ' Llamar o invocar a la funcion de SAP.
              Result1 = MyFunc.Call

              ' Analizar el resultado de la llamada.
              If Result1 = False Then
              MsgBox "Error en el llamado a la funcion ZMMF001."
              Else
              MsgBox "Funcion ZMMF001 ejecutada OK."

              'Grabar Tiquet de SAP
              Set ORDENDECOMPRA = MyFunc.imports("E_PONUMBER")

              MsgBox "La Orden de Compra es: " & ORDENDECOMPRA.Value

              Set ENTRADADEMERCANCIA = MyFunc.imports("E_MBLNR")
              MsgBox "La Entrada de Mercancia es: " & ENTRADADEMERCANCIA.Value


              'Tabla de mensajes donde llegan los mensajes de error sean positivos o negativos

              Set E_MESSAGE = MyFunc.Tables("E_MESSAGE")


              Dim x As Integer

              x = 1

              Dim row As Object


              For Each row In MyFunc.Tables("E_MESSAGE").Rows

              'lstResult.AddItem MyFunc.Tables.Item("E_MESSAGE").Value(x, "TIPO") & " " & MyFunc.Tables.Item("E_MESSAGE").Value(x, "MSG")

              MsgBox (MyFunc.Tables.Item("E_MESSAGE").Value(x, "TIPO") & " " & MyFunc.Tables.Item("E_MESSAGE").Value(x, "MSG"))

              x = x + 1

              Next


              End If
              ' Terminar la sesion en SAP
              r3.Connection.Logoff
              End If
              End Sub

              Comentario

              Trabajando...