Está en la página 1de 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


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.
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 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.
*----------------------------------------------------------------------*
***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 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.
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 código de fabricante:

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

ZTABLA1:
ZTABLA2:

LISTA DE OBJETOS:

También podría gustarte