✒️ABAP Las subrutinas
ABAP Las subrutinas
Subrutinas:
Subrutinas – Son secciones de códigos que pueden ser utilizadas más de una vez.
Modularizar – Es la acción de pasar código de un programa a una subrutina, para mejorar la lectura y mantenimiento del mismo.
Notas:
1. Lo ideal es que una subrutina no tenga más de 50 lineas de código..
2. Una subrutina se declara con la palabra reservada PERFORM, Ej: PERFORM selecciono_datos.
3. Si hacemos doble clic en el nombre de la subrutina, el programa nos propondrá crear la subrutina.
4. Las opciones para crear subrutinas son: crear un nuevo include de datos o crearlas en el mismo programa de control.
5. El nombre de la subrutina debe ser lo más representativo posible del resultado que produce la subrutina.
6. La longitud del nombre de la subrutina no pude exceder los 30 caracteres.
7. Al crear la subrutina se crea el bloque FORM-ENDFORM donde colocaremos nuestro código de la subrutina.
Tipos de Subrutinas – Existen dos tipos:
1. INTERNAS: Cuando la subrutina está dentro del mismo programa que la llama.
2. EXTERNAS: Cuando la subrutina está en un programa distinto al que la llama. Como puede ser un include de programa u otro programa.
Parámetros: Son datos que se pasan de los programas principales y una subrutina.
Nota: A los definidos en el programa principal, a la derecha de la palabra PERFORM, se le llama Parámetros Actuales y a los definidos en la subrutina, a la derecha de la palabra FORM, se le llama Parámetros Formales.
Tipos de parámetros: Pueden ser de tres tipos.
1. De entrada: Cuando se utilizan para pasar datos del programa principal a la subrutina.
2. De salida: Cuando se utilizan para pasar datos de la subrutina al programa principal.
3. De entrada y salida: Cuando se utilizan para pasar datos de la subrutina al programa principal y también viceversa.
Paso de parámetros a subrutinas – Utilizaremos tres opciones: TABLES, USING, y CHANGING.
PERFORM procesar_datos TABLES ti_vuelos USING st_vuelos CHANGING v_flag.
Existen tres formas de pasar parámetros:
1. Paso por valor: Durante la llamada a una subrutina, los parámetros formales son creados como copias de los parámetros actuales y los cambios en los parámetros formales no afectan a los actuales.
************************************************************************ *** Paso de parametros por valor *************************************** ************************************************************************ DATA: v_f1(1) TYPE c VALUE 'B'. PERFORM paso_por_valor USING v_f1. WRITE v_f1. *&---------------------------------------------------------------------* *& Form PASO_POR_VALOR *&---------------------------------------------------------------------* FORM paso_por_valor USING value(pf1). pf1 = 'X'. ENDFORM. " PASO_POR_VALOR Nota: El Resultado sera B 2. Paso por referencia: Solo la dirección de los parámetros actuales a los parámetros formales. Si cambia el valor de los parámetros formales también cambiaran los actuales. ************************************************************************* **** Paso de parametros por 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_POR_REFERENCIA *&---------------------------------------------------------------------* FORM paso_por_referencia USING p_g1 CHANGING p_g2. p_g1 = p_g2 = 'X'. ENDFORM. " PASO_POR_REFERENCIA 2. Paso por valor y resultado: Durante la llamada a una subrutina, los parámetros formales son creados como copias de los actuales y los cambios de los parámetros formales son copiados a los parámetros actuales al final de la subrutina. ************************************************************************ *** Paso de parametros por valor y resultado *************************** ************************************************************************ DATA: v_h1(1) TYPE c VALUE 'A', v_h2(1) TYPE c VALUE 'B'. PERFORM paso_por_valor_y_resultado1 USING v_h2 CHANGING v_h1. *&---------------------------------------------------------------------* *& Form PASO_POR_VALOR_Y_RESULTADO1 *&---------------------------------------------------------------------* FORM paso_por_valor_y_resultado1 USING value(p_f2) CHANGING value(p_f1). p_f1 = p_f2. ENDFORM. " PASO_POR_VALOR_Y_RESULTADO1 ************************************************************************ END-OF-SELECTION. ************************************************************************ WRITE:/'H1 es:', v_h1. *&---------------------------------------------------------------------* *& Form PASO_POR_VALOR_Y_RESULTADO1 *&---------------------------------------------------------------------* FORM paso_por_valor_y_resultado1 USING value(p_f2) CHANGING value(p_f1). p_f1 = p_f2. ENDFORM. " PASO_POR_VALOR_Y_RESULTADO1
SUBRUTINAS EXTERNAS: Para llamar a una subrutina que está en un programa distinto al que estamos procesando debemos utilizar la siguiente sintaxis:
PERFORM <sub>(<programa>) USING ...
También podemos agregar includes a nuestro programa de la siguiente manera:
INCLUDE <report>.
pre { direction: ltr; color: #000000; orphans: 2; widows: 2; background: transparent } pre.western { font-family: "Liberation Mono", "Courier New", monospace; so-language: es-ES } pre.cjk { font-family: "Noto Sans Mono CJK SC", monospace; so-language: zh-CN } pre.ctl { font-family: "Liberation Mono", "Courier New", monospace; so-language: hi-IN } p { margin-bottom: 0.25cm; direction: ltr; color: #000000; line-height: 115%; orphans: 2; widows: 2; background: transparent } p.western { font-family: "Liberation Serif", "Times New Roman", serif; so-language: es-ES } p.cjk { font-family: "Noto Serif CJK SC"; so-language: zh-CN } p.ctl { font-family: "Lohit Devanagari"; so-language: hi-IN } a.sdfootnotesym-western { font-size: 10pt } a.sdfootnotesym-cjk { font-size: 10pt } a.sdendnotesym-western { font-size: 10pt } a.sdendnotesym-cjk { font-size: 10pt }
 
 
 
Sobre el autor
Publicación académica de José Valentín López Montilla, en su ámbito de estudios para la Carrera Consultor ABAP.
José Valentín López Montilla
Profesión: Ingeniero de Sistemas - Venezuela - Legajo: GT35M
✒️Autor de: 134 Publicaciones Académicas
🎓Egresado de los módulos:
Disponibilidad Laboral: FullTime
Presentación:
Ingeniero de sistemas y magister scientiarum en ingeniería de software, con más de 30 años de experiencia en el área de tecnología de información, objetivo principal consultor sap abap
Certificación Académica de José López