viernes, 28 de noviembre de 2014

Introducción ABAP. Subrutinas

Continuamos repasando los conceptos básicos de ABAP, el lenguaje de programación de SAP. En este post vamos a hablar de las subrutinas.

Las subrutinas son conjuntos de instrucciones que pueden ser llamadas desde el programa en diversas ocasiones.
Para definirlas se utilizan las palabras clave FORM y ENDFORM que se especifican al inicio y final de las instrucciones que forman la subrutina. Para llamarla se utiliza la sentencia PERFORM.

Ejemplo:  PERFORM  ejemplo.                Llama a la subrutina.
                .......
                FORM ejemplo.                         Definición de la subrutina.
                     -----
                ENDFORM.

El programa principal y la subrutina se pueden comunicar mediante parámetros pasados por valor o referencia, siendo recomendable especificar el tipo de dato al definirlo.

Pase de parámetros por referencia

      PERFORM  <nombre>  USING  parametro1  parametro2.
      .....
      FORM <nombre>  USING parametro1   parametro2.
         ----
      ENDFORM.


Los parámetros que son pasados a la subrutina en la llamada  (FORMALES), se actualizan con los parámetros (ACTUALES) definidos en la subrutina.

Ejemplo:  DATA: d_numero1 TYPE i VALUE 1,
                                  d_numero2 TYPE i VALUE 2.
                     PERFORM sumar USING d_numero1 d_numero2.
                     ….
                     FORM sumar USING l_numero1 type i
                                                         l_numero2  type i.
                            l_numero1 = l_numero1 + l_numero2.
                     ENDFORM.


Ahora:  d_numero1 = 3      y d_numero2 = 2.
Pase de parámetros por referencia

      PERFORM  <nombre>  USING  parametro1  parametro2.
      .....
      FORM <nombre> USING VALUE (parametro1) VALUE(parametro2).
         ----
      ENDFORM.


Los parámetros que son pasados a la subrutina no se actualizan con el valor de los parámetros definidos en la subrutina.

Ejemplo:  DATA: d_numero1 TYPE i VALUE 1,
                                  d_numero2 TYPE i VALUE 2.
                     PERFORM sumar USING d_numero1 d_numero2.
                     ….
                     FORM sumar USING l_numero1 type i
                                                        Value( l_numero2)  type i.
                            l_numero2 = 3.
                            l_numero1 = l_numero1 + l_numero2.
                     ENDFORM.


Ahora:  d_numero1 = 4    y   d_numero2 = 2.

Utilizando STRUCTURE se puede pasar como parámetro una estructura y hace referencia a sus campos en la subrutina.

Ejemplo: DATA: BEGIN OF r_provincias,
                                Codigo   LIKE lfa1-lifnr,
                                Nombre  LIKE lfa1-name1,
                           END OF r_provincias.
             PERFORM informar USING r_provincias.
             FORM informar USING rs_provincias STRUCTURE r_provincias.
                  rs_provincias-nombre = ‘JOSE’.
             ENDFORM.


También se puede pasar como parámetro una tabla interna. Para hacer referencia se utiliza TABLES:

Ejemplo:  DATA  d_contador TYPE i VALUE 1.
                DATA: BEGIN OF i_provincias OCCURS 0,
                                Codigo   LIKE lfa1-lifnr,
                                Nombre  LIKE lfa1-name1,
                           END OF i_provincias.
            PERFORM informar   TABLES   i_provincias
                                                 USING     d_contador.
            FORM informar TABLES is_provincias STRUCTURE i_provincias
                                        USING VALUE(l_contador).
                  is_provincias-codigo =  d_contador.
                  is_provincias-nombre = ‘JOSE’.
                 APPEND is_provincias.  
             ENDFORM.


Se inserta el registro en la tabla interna i_provincias.









No hay comentarios:

Publicar un comentario