✒️ABAP Las subrutinas
ABAP Las subrutinas
Resumen
Unidad 4 leccion 1
Las Subrutinas
1- Que son las subrutinas?
Son secciones de código q pueden ser utilizadas + de una vez dentro de un mismo programa y también ser utilizadas x otros programas q la referencien.
* la idea de pasar código de los programas a subrutinas es: = Faciles de leer = Faciles de mantener => a esto se llama modularizar. La idea es q la subrutina no tenga + de 50 lineas.
* La modularización ayuda a encontrar + facil/ los errores
* Al debuguear el prog el resultado de una subrutina sea el esperado sin entrar en detalle de como se llega a ese resultado.
En ABAP la subrutina se declara PERFROM (llevar acabo) y seguido de un nombre.
Ej: seleccionamos los datos de la tabla de usuarios
PERFORM seleccionar_datos.
si hacemos doble clic en el nombre de la subrutina, el sist nos propondrá crear la subrutina en la sgnte ventana de diálogo.
Digitar Si => donde crearla => crear un nuevo include.
=> o crearla en el mismo programa. (xa este caso crearla en el mismo programa).
El sist genera el sgnte bloque de control en nuestro programa xa completarlo con código q corresponda.
* Form SEECCIONAR DATOS
* text => q hace la rutina
* text => P1 text = parametros de entrada y salida
* text => P2 text = parametros de entrada y salida
FORM seleccionar_datos.
................
ENDFORM.
Ej: la subrutina Seleccionar datos
* form SELECCIONAR_DATOS.
* Seleccionar los datos de la tabla usuarios ztabla_usrios_g
* P_ti_usarios tabla interna de usuarios
FORM seleccionar_datos.
---------
ENDFORM.
El nombre de la subrutina => debe ser lo + representativo posible y no exceder de 30 caracteres.
2- Los tipos de subrutinas
Dos tipos de subrutinas: Internas y Externas
Internas: Cuando la subrutina se encuentra dentro del mismo programa o en un include de subrutina, el cual se encuentra declarado en el prog. de control.
Programa => REPORT ztest_subrutinas.
START-OF-SELECTION.
PERFORM seleccionar_datos.
" form seleccionar_datos
" Seleccionamos los datos de la tabla ztabla_usrios_g
" P_ti_usuarios tabla interna de usuarios
FORM seleccionar_datos.
........
ENDFORM.
Externas: Cuando la subrutina se encuentra en un prog. distinto al q la llama.
Como llamar una subrutina externa desde otro prog.
PERFORM <nombre subrutina > IN PROGRAM < nombre_programa_subrutina>
Ej: de como ejecutamos la subrutina SELECCIONAR_DATOS desde otro prog. ABAP.
* Report ZTEST_SUBRUTINAS_2
Report ztest_subturinas_2.
START-OF-SELECTION.
PERFORM seleccionar_datos IN PROGRAM ztest_subrutina.
3- El paso a paso del parámetros a subrutinas.
podemos pasar datos entre el programa ppal y una subrutina a través de parámetros.
Los parámetros de subrutinas pueden ser de 3 tipos:
- De entrada: cuando se utiliza xa pasar datos del programa ppal a la subrutina.
- De Salida: cuando se utiliza xa pasar datos de la subrutina al prog. ppal.
- De entrada / Salida: cuando se utiliza xa pasar datos de la subrutina al prog ppal y viceversa.
Xa pasar los parámetros en las subrutinas vamos a utilizar tres palabras reservadas q son las sgntes:
- USING: xa declarar parámetros de entrada q serán utilizados en la subrutina.
- CHANGING: xa declarar parámetros de entrada / salida q serán utilizados en la subrutina.
- TABLES: xa declarar parámetros de entrada/salida q son tablas las cuales serán utilizadas en la subrutina
Las palabras reservadas q acabamos de mencionar y q deben ser escritas en este orden.
PERFORM <nombre_subrutina> TABLES <tabla interna>
USING <parámetro de entrada>
CHANGING <parámetro de entrada/salida>
Los parámetros definidos dentro del prog. ppal en la declaracion de la subrutina, a la dercha de la palabra reservada PERFORM se les llama parámetros actuales.
Ej: REPORT ztest_subrutinas.
DATA: v_hay_datos(1) TYPE c.
START-OF-SELECTION.
* seleccionamos los datos de la tabla de usuarios
PERFORM seleccionar_datos CHANGING v_hay_datos =>> llamados parámetros acutales.
FORM seleccionar_datos CHANGING p_hay_datos =>> llamados parámetros formales.
A los parámetros q se especifican en la definicion de la subrutina, a la derecha de la palabra reservada FORM => son parámetros formales.
Ahora bien, en el bloque FORM-ENDFORM. debemos especificar el tipo de los parámetros formales.
EJ: donde pasamos parámetros como: tabla interna, una estructura y variable tipo caracter.
DATA: ti_usuarios LIKE STANDARD TABLE OF ztabla_usuarios.
LIKE LINE OF ti_usuarios.
CHANGING v_flag.
START-OF-SELECTION.
" procesamos los datos
PERFORM procesar_datos TABLES ti_usuarios.
USING wa_usuarios.
CHANGING v_flag.
" estos son los parámetros actuales
" form procesar_datos
" text
FORM procesar_datos TABLES p_ti_usuarios STRUCTURE ztabla_usuarios
USING p_wa_usuarios STRUCTURE ztabla_usuarios.
CHANGING p_flag TYPE sy-subrc.
" Estos son los parámetros formales
Cuando una subrutina es llamada, los parámetros deben ser pasados en el mismo orden en el q fueron declarados, asi mismo se debe respetar el orden en la misma secuencia del bloque.
Existen 3 formas de pasar parámetros
- Paso por valor: durante la llamada a la subrutina, los parámetros formales son creados como copias de los parámetros actuales. Los campos en los parámetros formales no afectan a los parámetros actuales.
Ej: paso de parámetros por valor
DATA: v_f1 TYPE c VALUE 'b'.
PERFORM paso_por_valor USING v_f1.
write v_f1.
" paso x valor
FORM paso_por_valor USING value(pf1).
pf1 = 'X'.
ENDFORM.
La salida x pantalla luego de la ejecucion del codigo anterior será ´B' como se ve en la imagen.
impresión x pantalla
test
B
- Paso por referencia: Durante la llamda a la subrutina, solo la direccion de los parámetros actuales se transfieren a parámetros formales. Dentro de la subrutina, se trabaja el campo del prog q hace la llamada.
Si cambiamos los parámetros formales, el contenido del campo del prog q hace la llamada también cambia.
" paso de parametros x referencia
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_g1,
CHANGING v_g2.
write:/ v_g1, v_g2.
" form paso x referencia
FORM paso_por_referencia USING p_g1,
CHANGING p_g2.
p_g1 = p_g2 = 'X'.
ENDFORM.
La salida x pantalla luego de la ejecución de código anterior será A B y X X
Termina la ejecución de la subrutina y las variables q son parámetro x referencia toma el valor q se asigno en la subrutina con X y xa las dos variables.
- Paso por valor y resultado: durante la llamada a la subrutina, los parámetros formales son creados como copias de los parámetros actuales. Los cambios en los parámetros formales son copiados a los parámetros actuales al final de subrutina.
* paso de parametros x valor y resultado
DATA: v_h1(1) TYPE c VALUE 'A',
v_h2(1) TYPE c VALUE 'B'.
PERFORM paso_por_valor_y_resultado USING v_h2,
CHANGING v_h1.
write:/ 'H1 es :', v_h1
FORM paso_por_valor_y_resultado USING value (p_f2)
CHANGING value ( p_f1).
p_fi = p_f2.
ENDFORM.
4- Las declaraciones de datos globales y locales:
Cuando declaramos datos en un prog ABAP, es decir:
= variables
= estructuras
= tabla interna
= otros tipos de datos.
=> podemos hacerlo de 2 formas:
- Globalmente
- Localmente
Hasta el momento siempre declaramos datos después del
REPORT
(declaración de variables)
y antes de la declaración del evento
START-OF-SELECCTION
Declaración de datos q realizamos en este lugar de un prog. son llamadas de declaraciones GLOBALES, significa q estas declaraciones pueden ser utilizadas en cualquier lugar del prog. osea pueden ser utilizadas en el prog. ppal o en cualquiera de las subrutinas q el prog. contenga.
REPORT ztest_subrutinas.
CONSTANTS: c_nombre_reporte(40) TYPE c VALUE 'Reporte de Clientes'.
START-OF-SELECCTION.
Las declaraciones globales teinen una ventaja y un desventaja.
- La ventaja es q se facilita el armado y la declaración en el prog. y la utilizamos donde corresponda.
X La desventaja es q podemos decir q al realizar todas las declarione de datos en forma global no setamos generado un código ABAP tan eficiente en cuanto a la moduclarizacion lo cual en algun punto puede complicar el mantto futuro del prog.
Otro posibilidad es: realizar declaraciones LOCALES = declarar datos locales => la idea es modularizar lo + posible codigo y consumir la menor cantidad de recursos del sist.
REPORT ztest_subrutinas.
CONSTANTS: c_nombre_reporte(40) TYPE c VALUE 'Reporte Clientes'.
START-OF-SELECCTION.
PERFORM imprimir_reporte.
* form imprime reporte
FORM imprimir_reporte.
DATA: v1_fecha(10) TYPE c.
CLEAR v1_fecha.
v1_fecha = sy-datum.
CONCATENATE v1_fecha+6(2) v1_fecha+4(2) v1_fecha+0(4) INTO v1_fecha SEPARATED BY '/'
WRITE: c_nombre_reporte.
WRITE: v1_fecha.
ENDFORM.
tt
 
 
 
Sobre el autor
Publicación académica de Gustavo Betancur Guzmán, en su ámbito de estudios para la Carrera Consultor ABAP.
Gustavo Betancur Guzmán
Profesión: Ingeniero de Sistemas - Colombia - Legajo: WS86O
✒️Autor de: 164 Publicaciones Académicas
🎓Egresado de los módulos:
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial
- Carrera Consultor en SAP MM Nivel Avanzado
- Carrera Consultor en SAP MM Nivel Inicial