Anda di halaman 1dari 5

INTERACCION ENTRE SAP Y OTROS SISTEMAS (IDOCs Y RFCs)

Hay varias maneras de lograr el intercambios de datos entre SAP y otros sistemas, pero basicamente son estas dos formas las mas usadas: Modo 1 - Enviar un documento IDOC a el sistema destino, para ello debes hacer toda la configuracion correspondiente a IDOC s, una vez recibido el documento en el sistema destino este puede ser leido o cargado facilmente. Modo 2 - Desde el sistema NO SAP escribir un programa que acceda a los datos directamente desde la base de datos de SAP, esto es llamado una funcion RFC , por ejemplo si el sistema NO SAP esta desarrollado en Visual Basic se puede escribir un programa en Visual Basic que acceda a las funciones internas de SAP y saque los datos directamente de alli. Tambien se pueden hacer RFC s desde Java, C , etc, etc. Aqui te mando un resumen que yo escribi sobre esto para mi uso personal, espero te sea de ayuda.

El modo 1 - IDOC s: -----------------IDOC S es un mecanismo de intercambio de datos basado en archivos de texto en formato ASCII que permite intercambiar informacin entre sistemas SAP o entre SAP y otros sistemas diferentes de SAP,. A esta capacidad se le da el nombre de intercambio de datos entre aplicaciones distribuidas (ALE Aplications Link Enable) Los IDOC s son archivos comunes de texto ASC II que pueden ser ledos directamente por las personas a travs de cualquier editor de texto y que poseen un formato preestablecido por lo que pueden ser levantados con facilidad por aplicaciones es critas en lenguajes como Visual Basic o Java. La aplicacin principal de los IDOC s es el intercambio de informacin entre sistemas, es decir sirven como base ideal para la creacin de INTERFASES, pero tambien se los utiliza para llevar adelante cargas masivas de datos. Un ejemplo del uso de los IDOC s que no esta relacionado con interfases es la carga de todas las tablas relacionadas con el manejo de materiales en una implementacin de tipo Retail, en este caso en particular es mejor utilizar IDOCS en lugar de Batch Inputs ya que la carga inicial ser entonces mucho mas completa y consistente porque existen formatos de IDOC s estndar para realizar esta tarea. Otro ejemplo del uso de IDOC s es el intercambio de informacin entre dispositivos especializado s y el sistema SAP, uno de los mas comunes es el intercambio entre los datos de los P.O.S.T. de una tienda y el modulo MM de SAP. ( P.O.S.T. son los dispositivos fabricados por IBM que leen los cdigos de barras de los productos de los supermercados y depo sitan la facturacin en una base de datos propietaria de IBM que luego justamente necesita ser enviada a un sistema de procesamiento de datos como SAP ) SAP posee un numero determinado de IDOC s predefinidos en el sistema que pueden cumplir un buen numero de tareas, pero tambin es posible crear nuestros propios IDOC s con el formato que nosotros deseemos. Para poder utilizar IDOC s es necesario llevar adelante una serie estructurada de parametrizaciones que afectan tanto a la manera en que SAP intercambia datos como a el formato mismo de los mensajes y los formatos de los IDOC s.

Parametrizaciones para poner a punto un sistema para intercambiar IDOC s. C rear los sistemas lgicos, transaccion SALE o SCC 4 Asignar sistemas lgicos, transaccion SALE

C onexiones RFC , transaccion SM59 Destinos RFC , transaccion BD97 Puertos, transaccion WE21 Functio ns Modules Partners Profiles, transaccion WE20 C rear un Distribution Model, transaccion BD64

Parametrizaciones para poner a punto los propio s IDOC s.

Definir o elegir Segmento de IDOC C rear Messages Types. Declarar una combinacion valida de Messages Types y IDOC type. Definir una combinacin valida de Messages y Processing Methods. Definir el codigo de procesamiento

Modo 2 - RFC desde Visual Basic: --------------------------------------La tecnica RFC consiste en llamar desde un sistema externo, por ejemplo una aplicacion escrita en Visual Basic o C a las funciones internas de SAP ya sean estas funciones estandar de SA P o desarrolladas por nosotros mismos. C uando se instala el Front End de SAP en el computador que se va a utilizar como terminal para trabajar con SAP tambien se instalan un buen numero de componentes de comunicaciones que son utilizados por lenguajes como Visual Basic para poder acceder al sistema SAP. A este conjunto de componentes de comunicacion se les denomina C onectores DC OM. La maquina desde la cual se debe ejecutar este programa debe tener correctamente instalado el SAP Gui. No hacen falta otros pasos especiales o configuraciones, si el SAP Gui esta correctamente instalado se puede escribir directamente un programa en Visual Basic para conectarse a SAP. He aqui un ejemplo de un programa en Visual Basic que establece la conexion con SAP y ejecuta una funcion estandar de SAP:

Option Explicit ' C onectores a las SAP.Functions. Dim R3 As Object Dim MyFunc As Object ' Parametros a enviar a la funcion. Dim PEBELP As Object ' Parametros a recibir desde la funcion. Dim RESULTADO As Object ' Tablas a ser enviadas a la funcion Dim TABLA As Object ' Resultado de la llamada a SAP. Dim Result As Boolean Private Sub C ommand1_C lick() ' Establecer la conexion con los Add Ins de SAP. Set R3 = C reateObject("SAP.Functions")

' C argar los parametros de conexion R3.C onnection.Messageserver = "sr3teste" ' Nombre del server R3.C onnection.Groupname = "" R3.C onnection.System = "01" ' Sistema R3.C onnection.C lient = "110" ' Mandante R3.C onnection.User = "A971907" ' Usuario R3.C onnection.Password = "minelan" ' Password R3.C onnection.language = "ES" ' Idioma ' Ejecutar la conexion en modo visible. If R3.C onnection.logon(0, False) <> True Then MsgBox "No se ha podido establecer la conexin" Else ' Establecer contacto con la funcion. Set MyFunc = R3.Add ("RFC _PRUEBA") ' C argar los parametros a enviar a la funcion - EXPORTING Set PEBELP = MyFunc.exports("PEBELP") PEBELP.Value = "00020" ' C argar la tabla con los datos que vamos a enviar - TABLES. Set TABLA = MyFunc.Tables("TABLA") TABLA.rows.Add TABLA.Value(1, TABLA.Value(1, TABLA.Value(1, TABLA.Value(1, TABLA.Value(1, TABLA.Value(1, TABLA.Value(1, TABLA.Value(1, TABLA.Value(1, "adrnr") = "0000010007" ' Direccion. "matnr") = "000000000000051676" ' Material. "knttp") = "K" ' Tipo de imputacin. "ewerk") = "C 002" ' C entro. "bpreibapi") = "20" ' Precio. "mwskz") = "09" ' Indicador de IVA. "etmen") = "2" ' C antidad del material. "kostl") = "0000000001" ' C entro costo. "eindt") = "20040909" ' Fecha del item.

' Llamar a la funcion de SAP. Result = MyFunc.C ALL ' Analizar el resultado de la llamada. If Result = False Then MsgBox "Error en el llamado a la funcion RFC _PRUEBA." Else MsgBox "Funcion RFC _PRUEBA ejecutada OK." ' Recoger los parametros devueltos por la funcion - IMPORTING Set RESULTADO = MyFunc.impor ts("RESULTADO") MsgBox "El resultado devuelto es: " & RESULTADO.Value End If ' Terminar la sesion. R3.C onnection.logoff End If End Sub

El programa listado arriba llama desde Visual Basic a la funcion SAP 'R FC _PRUEBA'. Si esta misma llamada hubiese que hacerla desde SAP tendria esta forma : C ALL FUNC TION 'RFC _PRUEBA' EXPORTING pebelp = '00080' IMPORTING resultado = vresultado TABLES TABLA = ttabla.

Desde SAP, la funcion tendra la siguiente forma :

FUNC TION rfc_prueba. *"---------------------------------------------------------------------*"*"Interfase local *" IMPORTING *" VALUE(PEBELP) TYPE EBELP OPTIONAL *" EXPORTING *" VALUE(RESULTADO) LIKE MARA-MATNR *" TABLES *" TABLA STRUC TURE ZRFC _SGM_TABITEM OPTIONAL *"---------------------------------------------------------------------TABLES: zrfc_sgm_tabitem.

* Establecer el valor de un campo obligatorio. zrfc_sgm_tabitem-mand t = sy-mandt. " Mandante

* Recoger los parametros enviados a la funcion. zrfc_sgm_tabitem-ebelp = pebelp. " Nro de item

* Recoger los datos enviados a la funcion como tabla. LOOP AT tabla. zrfc_sgm_tabitem-adrnr = tabla-adrnr. " Direccion. zrfc_sgm_tabitem-matnr = tabla-matnr. " Material. zrfc_sgm_tabitem-knttp = tabla-knttp . " Tipo de imputacin. zrfc_sgm_tabitem-ewerk = tabla-ewerk. " C entro. zrfc_sgm_tabitem-bpreibapi = tabla-bpreibapi. " Precio. zrfc_sgm_tabitem-mwskz = tabla-mwskz . " Indicador de IVA. zrfc_sgm_tabitem-etmen = tabla-etmen. " C antidad material. zrfc_sgm_tabitem-kostl = tabla-kostl. " C entro costo. zrfc_sgm_tabitem-eind t = tabla-eind t. " Fecha del item. INSERT zrfc_sgm_tabitem. ENDLOOP.

* Establcer el resultado de la operacion. resultado = '123456'.

ENDFUNC TION.

1 - Debe tenerse en cuenta que como la funcion es de tipo RFC no se permiten parametros de tipo REFERENC E, por lo tanto se debe establecer el flag "Trasp. Valores" al declarar los parametros de la funcion:

2 - Para que la funcion en SAP sea RFC debe se tearse el siguiente flag: Atributos / Modulo de acceso remoto.

3 - Los parametros de la funcion serian: IMPORT

PEBELP TYPE EBELP Opcional Trasp. Valores EXPORT RESULTADO LIKE MARA-MATNR Trasp. Valores TABLAS TABLA LIKE ZRFC _SGM_TABITEM Trasp. Valores

4 - Las funciones RFC no pueden tener salida a pantalla Esta funcion haria que el codigo en Visual Basic a pesar de ejecutar la funcion reportara un error. C ALL FUNC TION 'POPUP_TO_INFORM' EXPORTING titel = 'Funcion BAPI_PO_C REATE.' txt1 = 'Ha habido errores' txt2 = '' txt3 = '' txt4 = ''. La funcion opera, y crea el pedido, pero como el codigo no esta preparado para recibir el mensaje el sistema responde con Result = False lo cual se interpreta como un error, a pesar de haber funcionado bien., En el archivo dev_rfc.trc se devuelve el estado del "error". El mensaje en el archivo seria algo asi como: **** ERROR file opened at 20040924 170432 Pacific Dayligh, SAP -REL 620,0,949 R FC -VER 3 584466 MT-SL T:1636 ======> Screen output without connection to user. T:1636 <* RfcReceive [1] : returns 3:R FC _SYS_EXC EPTION T:1636 <* RfcC allReceive [1] : returns 3:RFC _SYS_EXC EPTION >TS> Fri Sep 24 17:05:01 2004

Se ejecuta la funcion desde Visual Basic y luego al mirar la tabla se vio qu e habia dado el alta, por lo tanto funciono. La tabla que usamos para probar esta funcion es ZRFC _SGM_TABITEM.

Anda mungkin juga menyukai