================= ******** UNIDAD 4 ******** =================
******** Lección 1: "Sub Rutinas" *********
Son secciones de código que pueden ser usadas mas de una vez.
Modularizar: Es cuando el codigo pasa por una subrutina, es ideal que la subrutina no tenga mas de 50 lineas de codigo.
Una SUBRUTINA se declara con la palabra reservada PERFORM Nombre Subrutina-
Para crear una colocamos la sentencia anterior, doble click a la subrutina y nos saldra una ventana en la cual podemos elegir donde crearla. Es recomendable que al crear la subrutina sea lo mas entendible posible.
TIPOS DE SUBRUTINA
INTERNAS : Cuando esta dentro del mismo programa donde se llama.
EXTERNAS: Cuando esta en un programa distitno al que se las llama. puede ser el caso de un INCLUDE SUBTURNAS.
SUBTURINAS INTERNAS
Al crear una subrutina este crea un bloque FORM-ENDFORM donde colocamos nuestro codigo.
A los parametros definidos a la derecha de la palabra PERFORM se los llama parametros actuales.
A los parametros definidos a la subrutina a la dereca Pde PERFORM se los llama parametros formales.
Los parametros pueden ser de 3 tipos:
DE ENTRADA: Cuando pasan datos del programa a la subrutina
DE SALIDA: Cuando se usan de la subrutina al programa.
DE ENTRADA Y SALIDA: Cuando se usan del programa a la subrutina y de la subrutina al programa.
PASOS DE PARAMETROS A SUBRUTINAS
Para pasar los parametros usamos USING, CHANGING y TABLES.
PERFORM "Subrutina" TABLES <tabla>,
USING <parametros entrada>
CHANGING <parametros salida>.
Debemos especificar los parametros formales de esta forma nos aseguramos que el tipo corresponde a la subrutina.
DATA: ti_vuelos LIKE STANDARD TABLE OF sflight,
st_vuelos LIKE LINE OF ti_vuelos,
v_flag TYPE sy_subrc.
PERFORM procesar_datos TABLES ti_vuelos
USING st_vuelos
CHANGING v_flag.
FORM procesar_datos TABLES t_vuelos STRUCTURE sflight
USING st_vuelos STRUCTURE sflight
CHANGING p_flag TYPE sy-subrc.
ENDFORM.
Existen 3 formas de pasar parametros.
PASO POR VALOR: Son creados como copias de los parametros actuales, no afectan a los actuales.
DATA: v_fi(1) TYPE c VALUE 'b'.
PERFORM paso_por_valor USING v_fi.
WRITE: v_fi
FORM paso_por_valor USING value (pfi).
pfi = 'X'
ENDFORM.
La salida sera B
Audio 1: Al enviar un parametro a la subrutina tienen que tener el mismo tipo y longitud de caracteres, al hacer el envio crea una copia de la variable original. Se tiene que colocar VALUE para obtener otro valor en la variable de la SUBRUTINA.
PASO POR REFERENCIA:
Para poder hacer el cambio dentro de la subrutina hacia los parametros actuales necesitamos hacer uso del CHANGING.
DATA: v_g1(1) TYPE c VALUE 'A',
v_g2(1) TYPE c VALUE 'B'.
WRITE: v_g1, v_g2.
PERFORM paso_por_referencia USING v_gi
CHANGING v_g2.
WRITE: v_g1,vg2.
FORM paso_por_refencia USING p_g1
CHANGING p_g2.
p_gi = pg2 = 'X'.
ENDFORM.
Salida de A,B = X
Audio 2 : Cuando se pssa parametros por referencia se cambia el valor del parametro dentro de la subrutina y fuera tambien, para que se actualice la referencia es debido al CHANGING
PASO POR VALOR Y RESULTADO:
Los parametros formales son copiados a los parametros actuales al final de la subrutina.
DATA: v_g1(1) TYPE c VALUE 'A',
v_g2(1) TYPE c VALUE 'B'.
WRITE: v_g1, v_g2.
PERFORM paso_por_valor_resultado USING v_gi
CHANGING v_g2.
WRITE: v_g1
FORM paso_por_refencia USING VALUE (p_g1)
CHANGING VALUE (p_g2).
p_gi = pg2.
ENDFORM.
Resultado : v_g1 es B
SUBRUTINAS EXTERNAS:
Cuando queremos llamar a una subrutina fuera del programa.debemos usar la siguiente sintaxis.
PERFORM <sub>(<programa>) USING