You are on page 1of 14

RFC

Una RFC solo es una funcin 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 pestaa 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
(transaccin SM59) y los usuarios que estn ligados a ellos. Hay varios tipos de
usuarios, y normalmente el que se utiliza para pasar informacin es el CPIC (lo puedes
ver por la transaccin SU01 y la pestaa logon data). Has de tener en cuenta que el
usuario CPIC no pide logon, porque slo se pasa informacin, pero si el usuario es
DIALOG pide pantalla de logon y normalmente se utiliza para pasar pantallas, o sea,
conectarse en remoto a una transaccin. 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
debera ser transparente. Por lo dems, es una funcin como cualquier otra, y si la
llaman desdel exterior de SAP, mientras le pasen los parmetros correctamente, no hay
problema. Espero que te sirva de ayuda hasta que alguien te pase la documentacin.
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. Transaccin SE80/Edit Object/Function Group

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

Luego que se llena los datos le das Save.

2. Otra forma de crear es en la transaccin 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 transaccin 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
Function Group
Short text

:
:
:

Es el nombre de la RFC.
Es el nombre de la Funcin
Es la descripcin que le queremos dar.

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.

*----------------------------------------------------------------------*
***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

EJECUTAR LA FUNCION
Nos aparecer la pantalla para colocar el cdigo del proveedor y el cd igo Del
material.

Lo ejecutamos:

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


Y EL RUC DEL PROVEEDOR.

*----------------------------------------------------------------------*
***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
*----------------------------------------------------------------------*

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

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

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

EJECUCION
Colocamos el Cdigo de material

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

Datos de la tabla.

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.

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

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 cdigo de fabricante:

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

ZTABLA1:

ZTABLA2:

LISTA DE OBJETOS:

You might also like