ejemplo basico de rfc´s

14
RFC Una RFC solo es una función que se puede llamar desde un sistema externo a SAP , el cual puede ser otro SAP u otro tipo de sistema. Vamos que se definen en la SE37 igualmente con la diferencia de que en la pestaña de atributos se pincha el radiobutton "Modulo de acceso remoto". Las aplicaciones de una RFC si que son mas extensas, pero vamos, que por ejemplo, permiten intercambiar datos entre SAP y el sistema llamante...infinidad de cosas. Has de mucho cuidado es con los destinos RFC (transacción SM59 ) y los usuarios que están ligados a ellos. Hay varios tipos de usuarios, y normalmente el que se utiliza para pasar información es el CPIC (lo puedes ver por la transacción SU01 y la pestaña logon data). Has de tener en cuenta que el usuario CPIC no pide logon, porque sólo se pasa información, pero si el usuario es DIALOG pide pantalla de logon y normalmente se utiliza para pasar pantallas, o sea, conectarse en remoto a una transacción. En teoria este tema lo gestionan los de sistemas, que se encargan de crear los destinos y los usuarios asociados a ellos, por lo que para tí debería ser transparente. Por lo demás, es una función como cualquier otra, y si la llaman desdel exterior de SAP, mientras le pasen los parámetros correctamente, no hay problema. Espero que te sirva de ayuda hasta que alguien te pase la documentación. CREAR GRUPO DE FUNCIONES Antes de crear un RFC se debe crear un Grupo de Funciones y para esto hay 2 formas de crearlo: 1. Transacción SE80/Edit Object/Function Group Hacemos clic en la Hoja Blanca (Create) y aparecera la siguiente pantalla

Upload: manuel-loayza-gahona

Post on 10-Oct-2014

1.456 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ejemplo Basico de RFC´s

RFC

Una RFC solo es una función que se puede llamar desde un sistema externo a SAP, el cual puede ser otro SAP u otro tipo de sistema. Vamos que se definen en la SE37

igualmente con la diferencia de que en la pestaña de atributos se pincha el radiobutton "Modulo de acceso remoto". Las aplicaciones de una RFC si que son mas extensas, pero

vamos, que por ejemplo, permiten intercambiar datos entre SAP y el sistema llamante...infinidad de cosas. Has de mucho cuidado es con los destinos RFC (transacción SM59) y los usuarios que están ligados a ellos. Hay varios tipos de

usuarios, y normalmente el que se utiliza para pasar información es el CPIC (lo puedes ver por la transacción SU01 y la pestaña logon data). Has de tener en cuenta que el

usuario CPIC no pide logon, porque sólo se pasa información, pero si el usuario es DIALOG pide pantalla de logon y normalmente se utiliza para pasar pantallas, o sea, conectarse en remoto a una transacción. En teoria este tema lo gestionan los de sistemas,

que se encargan de crear los destinos y los usuarios asociados a ellos, por lo que para tí debería ser transparente. Por lo demás, es una función como cualquier otra, y si la

llaman desdel exterior de SAP, mientras le pasen los parámetros correctamente, no hay problema. Espero que te sirva de ayuda hasta que alguien te pase la documentación.

CREAR GRUPO DE FUNCIONES

Antes de crear un RFC se debe crear un Grupo de Funciones y para esto hay 2 formas de crearlo:

1. Transacción SE80/Edit Object/Function Group

Hacemos clic en la Hoja Blanca (Create) y aparecera la siguiente pantalla

Page 2: Ejemplo Basico de RFC´s

Luego que se llena los datos le das Save.

2. Otra forma de crear es en la transacción SE37/Function Module/Create(F5)

Y nos aparecerá la misma pantalla para crear funciones.

EJM DE RFC:

Para crear las RFC se debe ir a la transacción SE37

En Function Module le coloco el nombre de mi RFC y le doy Create. Me aparecerá la

siguiente pantalla donde completo los datos y le doy Save.

Function Module : Es el nombre de la RFC. Function Group : Es el nombre de la Función Short text : Es la descripción que le queremos dar.

Page 3: Ejemplo Basico de RFC´s

EJEMPLOS:

TODAS LAS TABLAS QUE VAMOS A UTILIZAR DEL DICCIONARIO DE

DATOS SE DECLARAN EN UN INCLUDE QUE YA ESTA DEFINIDO POR

DEFECTO CUANDO SE CREA LA FUNCION. (LZPRUEBATOP)

CADA VEZ QUE CREEMOS UNA SUBRUTINA SE CREARA POR DEFECTO

UN INCLUDE (LZFPRUEBAF01) PARA EL CASO DE LA FUNCION

ZFPRUEBA1.

1. COLOCO COMO PARAMETROS EL COD. DE FABRICANTE Y EL

COD. DE MATERIAL Y ME DEVUELVE EL TIPO.

Page 4: Ejemplo Basico de RFC´s
Page 5: Ejemplo Basico de RFC´s

*----------------------------------------------------------------------* ***INCLUDE LZFPRUEBAF01 . *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form SELECCIONAR *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_I_MATERIAL text *----------------------------------------------------------------------* FORM SELECCIONAR USING VALUE(P_I_MATERIAL) LIKE Y23TAB01-MATERIAL. SELECT SINGLE MATERIAL INTO Y23TAB01-MATERIAL FROM Y23TAB01 WHERE MATERIAL = P_I_MATERIAL. IF SY-SUBRC <> 0. RAISE MATERIAL_INEXISTENTE. ENDIF. ENDFORM. " SELECCIONAR *&---------------------------------------------------------------------* *& Form SELECCIONAR_PROVEEDOR *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_I_MATERIAL text * -->P_I_PROVEE text *----------------------------------------------------------------------* FORM SELECCIONAR_PROVEEDOR USING VALUE(P_I_MATERIAL) LIKE Y23TAB01-MATERIAL P_I_PROVEE LIKE Y23TAB01-FABRICANTE E_TIPO LIKE Y23TAB01-TIPO. SELECT SINGLE TIPO INTO Y23TAB01-TIPO FROM Y23TAB01 WHERE FABRICANTE = P_I_PROVEE AND MATERIAL = Y23TAB01-MATERIAL. IF SY-SUBRC = 0. E_TIPO = Y23TAB01-TIPO. ELSE. E_TIPO = 'EL TIPO SE ENCUENTRA VACIO'. ENDIF. ENDFORM. " SELECCIONAR_PROVEEDOR

Page 6: Ejemplo Basico de RFC´s

EJECUTAR LA FUNCION

Nos aparecerá la pantalla para colocar el código del proveedor y el cód igo Del material.

Lo ejecutamos:

2. COLOCO EL COD. DE FABRICANTE Y ME DEVUELVE EL NOMBRE

Y EL RUC DEL PROVEEDOR.

Page 7: Ejemplo Basico de RFC´s

*----------------------------------------------------------------------* ***INCLUDE LZFPRUEBAF02 . *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form SELECCIONAR_FABRICANTE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_I_FABRICANTE text *----------------------------------------------------------------------* FORM SELECCIONAR_FABRICANTE USING VALUE(P_I_FABRICANTE) LIKE Y23TAB01-FABRICANTE. SELECT SINGLE FABRICANTE INTO Y23TAB01-FABRICANTE FROM Y23TAB01 WHERE FABRICANTE = P_I_FABRICANTE. ENDFORM. " SELECCIONAR_FABRICANTE *&---------------------------------------------------------------------* *& Form SELECCIONAR_NOMBRE_PROVEEDOR *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------*

Page 8: Ejemplo Basico de RFC´s

* -->P_I_FABRICANTE text * -->P_E_NOMBRE text *----------------------------------------------------------------------* FORM SELECCIONAR_NOMBRE_PROVEEDOR USING VALUE(P_I_FABRICANTE) LIKE Y23TAB01-FABRICANTE E_NOMBRE LIKE Y23TAB02-NOMBREPROVEEDOR E_NRORUC LIKE Y23TAB02-NRORUC. SELECT SINGLE NOMBREPROVEEDOR INTO Y23TAB02-NOMBREPROVEEDOR FROM Y23TAB02 WHERE PROVEEDOR = P_I_FABRICANTE. IF SY-SUBRC = 0. E_NOMBRE = Y23TAB02-NOMBREPROVEEDOR. SELECT SINGLE NRORUC INTO Y23TAB02-NRORUC FROM Y23TAB02 WHERE PROVEEDOR = P_I_FABRICANTE. IF SY-SUBRC = 0. E_NRORUC = Y23TAB02-NRORUC. ELSE. RAISE RUC_INEXISTENTE. ENDIF. ELSE. RAISE NOMBRE_INEXISTENTE. ENDIF. ENDFORM. " SELECCIONAR_NOMBRE_PROVEEDOR

3. COLOCO EL COD. DE MATERIAL ME DEVUELVE EL COD DEFL

FABRICANTE Y UNA TABLA (ZTABLA) CON LOS DATOS PARA

EXPORTAR DEL RFC.

Page 9: Ejemplo Basico de RFC´s

*----------------------------------------------------------------------* ***INCLUDE LZFPRUEBAF04 . *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form SELECCIONAR_MATERIAL *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_I_MATERIAL text *----------------------------------------------------------------------* FORM SELECCIONAR_MATERIAL USING P_I_MATERIAL E_FABRICANTE. SELECT SINGLE FABRICANTE INTO Y23TAB01-FABRICANTE FROM Y23TAB01 WHERE MATERIAL = P_I_MATERIAL. IF SY-SUBRC = 0. E_FABRICANTE = Y23TAB01-FABRICANTE. ELSE. RAISE MATERIAL_INEXISTENTE. ENDIF. ENDFORM. " SELECCIONAR_MATERIAL *&---------------------------------------------------------------------* *& Form SELECCIONAR_TABLA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_I_MATERIAL text * -->P_E_MATERIAL text * -->P_TI_Y23TAB01 text *----------------------------------------------------------------------* FORM SELECCIONAR_TABLA TABLES ZTABLA STRUCTURE Y23TAB01 USING P_I_MATERIAL. SELECT * INTO CORRESPONDING FIELDS OF TI_Y23TAB01 FROM Y23TAB01. ENDSELECT.

Page 10: Ejemplo Basico de RFC´s

IF SY-SUBRC = 0. MOVE-CORRESPONDING TI_Y23TAB01 TO ZTABLA. APPEND ZTABLA. ENDIF. ENDFORM. " SELECCIONAR_TABLA

EJECUCION

Colocamos el Código de material

Me devuelve el código del fabricante y una entrada a la tabla que se va a exportar.

Datos de la tabla.

Page 11: Ejemplo Basico de RFC´s

4. COLOCO EL COD. DE FABRICANTE ME DEVUELVE EL COD

NOMBRE DEL PROVEEDOR Y DOS TABLAS (ZTABLA1 Y ZTABLA2)

CON LOS DATOS PARA EXPORTAR DEL RFC.

Page 12: Ejemplo Basico de RFC´s

*----------------------------------------------------------------------* ***INCLUDE LZFPRUEBAF04 . *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form SELECCIONAR_NOMBREPROVEEDOR *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_I_FABRICANTE text * -->P_E_NOMBREPROVEEDOR text *----------------------------------------------------------------------* FORM SELECCIONAR_NOMBREPROVEEDOR USING VALUE(P_I_FABRICANTE) LIKE Y23TAB01-FABRICANTE E_NOMBREPROVEEDOR LIKE Y23TAB02-NOMBREPROVEEDOR. SELECT SINGLE NOMBREPROVEEDOR INTO Y23TAB02-NOMBREPROVEEDOR FROM Y23TAB02 WHERE PROVEEDOR = P_I_FABRICANTE. IF SY-SUBRC = 0. E_NOMBREPROVEEDOR = Y23TAB02-NOMBREPROVEEDOR. ELSE. RAISE NO_OK. ENDIF. ENDFORM. " SELECCIONAR_NOMBREPROVEEDOR *&---------------------------------------------------------------------* *& Form EXPORTAR_TABLA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_ZTABLA1 text * -->P_ZTABLA text * -->P_2 text * -->P_I_FABRICANTE text *----------------------------------------------------------------------* FORM EXPORTAR_TABLA TABLES ZTABLA1 STRUCTURE Y23TAB01 ZTABLA2 STRUCTURE Y23TAB02 USING P_I_FABRICANTE. SELECT * INTO CORRESPONDING FIELDS OF TI_Y23TAB01 FROM Y23TAB01 WHERE FABRICANTE = P_I_FABRICANTE. ENDSELECT. IF SY-SUBRC = 0. MOVE-CORRESPONDING TI_Y23TAB01 TO ZTABLA1. APPEND ZTABLA1. ENDIF.

Page 13: Ejemplo Basico de RFC´s

SELECT * INTO CORRESPONDING FIELDS OF TI_Y23TAB02 FROM Y23TAB02 WHERE PROVEEDOR = P_I_FABRICANTE. ENDSELECT. IF SY-SUBRC = 0. MOVE-CORRESPONDING TI_Y23TAB02 TO ZTABLA2. APPEND ZTABLA2. ENDIF. ENDFORM. " EXPORTAR_TABLA

Lo ejecutamos:

Colocamos el código de fabricante:

Nos devuelve el Nombre del Proveedor y las entradas a 2 tablas:

ZTABLA1:

Page 14: Ejemplo Basico de RFC´s

ZTABLA2:

LISTA DE OBJETOS: