PDA

Ver la Versión Completa : Consultas a la BD de SAP desde un programa en VB


Erika T
17/09/09, 14:25:20
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.:confused:

pedrol
24/09/09, 15:36:47
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

http://www.synactive.com/docu_e/specials/guiscripting.html


un saludo
pedro luis garcia

Erika T
02/10/09, 20:19:24
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.

ArtuAgui
27/03/10, 15:59:04
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.


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-

joedelphi2002
14/07/11, 18:17:43
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

ihurtado
07/10/11, 14:29:15
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.


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 !

doraxploradora
14/11/11, 17:22:03
' 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