✒️La memoria en SAP y en ABAP
La memoria en SAP y en ABAP
La Memoria en ABAP
En ciertas oportunidades, podría pasar que mientras ejecutamos un programa u objeto ABAP, necesitemos de datos que se obtengan en otro programa ABAP que se ejecuto previamente.
Existen varias formas de solucionar esto, una de ellas es pasando parámetros de un programa a otro, si es que ambos objetos son programas. Otra opción es utilizar la memoria para pasar los datos.
En ABAP existen sentencias que nos permiten manipular fácilmente los datos que subimos y bajamos de memoria. Para subir datos a memoria vamos a utilizar la sentencia EXPORT:
EXPORT <valor> TO MEMORY ID <id_unico>
El ID que se utiliza debe ser único. Ejemplo de como levantar o subir datos a memoria:
**---------------------------------------------------*
START-OF-SELECTION.
**---------------------------------------------------*
* Exporto a memoria el estado del usuario
EXPORT v_estado_usu TO MEMORY ID 'Z_ESTADO'.
IF sy-subrc NE 0.
MESSAGE e000(z1) WITH 'Error al exportar'.
ENDIF.
NOTA: El ID de memoria que se utiliza para la sentencia IMPORT o EXPORT debe ser único y representa una ubicación escrita en la memoria ABAP. Para el ejemplo anterior escogimos “Z_estado”, pero puede ser cualquier otro.
Para bajar o descargar los datos de memoria utilizamos la sentencia IMPORT:
IMPORT <valor> TO MEMORY ID <id_unico>
Ejemplo:
* Importo de memoria el estado del usuario
IMPORT v_estado_usu FROM MEMORY ID 'Z_ESTADO'.
IF sy-subrc NE 0.
MESSAGE e000(z1) WITH 'Error al importar'.
ENDIF.
NOTA: Se pueden exportar e importar tanto variables, como estructuras o tablas internas a memoria.
Luego de bajar los datos de memoria, es conveniente liberar el área de memoria utilizada. Esto lo hacemos con la sentencia FREE MEMORY:
FREE MEMORY ID 'id_unico'
Ejemplo:
* Libero la memoria Abap
FREE MEMORY ID 'Z_ESTADO'.
NOTA: Para que la exportacion-importacion de datos funcione correctamente se debe utilizar la misma sesion de memoria o ejecucion.
Utilizaremos la sentencia SUBMIT para poder llamar a un programa dentro de la ejecución de otro programa. Ejemplo de un programa que exporta datos:
*&---------------------------------------------------------------------*
*& Report zprueba_abap_4_9_2
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zprueba_abap_4_9_2.
* Declaración de datos
DATA: v_estado_usu TYPE char10.
**---------------------------------------------------*
START-OF-SELECTION.
**---------------------------------------------------*
* Exporto a memoria el estado del usuario
EXPORT v_estado_usu TO MEMORY ID 'Z_ESTADO'.
IF sy-subrc NE 0.
MESSAGE e000(z1) WITH 'Error al exportar'.
ENDIF.
SUBMIT zprueba_abap_4_8 AND RETURN.
Luego en el programa que importa los datos será:
*&---------------------------------------------------------------------*
*& Report zprueba_abap_4_8
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zprueba_abap_4_8.
* Declaración de datos
DATA: v_estado_usu TYPE char10.
**---------------------------------------------------*
START-OF-SELECTION.
**---------------------------------------------------*
* Importo de memoria el estado del usuario
IMPORT v_estado_usu FROM MEMORY ID 'Z_ESTADO'.
IF sy-subrc NE 0.
MESSAGE e000(z1) WITH 'Error al importar'.
ELSE.
WRITE:/ v_estado_usu.
ENDIF.
* Libero la memoria Abap
FREE MEMORY ID 'Z_ESTADO'.
Nota: Cuando decimos que la importación o exportación debe realizarse en la misma sesión de memoria, nos referimos que a este técnica para pasar variables y tablas entre programas debe ser utilizada de la siguiente forma:
Supongamos que tenemos un programa P1 que exporta a memoria una variable V1 y un programa P2 que necesita utilizar esa variable.
Lo correcto seria colocar dentro de P1 un EXPORT de la variable V1, y luego dentro de P1 ejecutar un SUBMIT al programa P2.
Esta secuencia de trabajo es la correcta ya que estamos trabajando dentro de lo que denominamos la misma sesión de memoria.
Distinto seria ejecutar P1 y luego abrir otro modo de SAP y ejecutar P1, ya que en este caso no estariamos utilizando la misma sesión de memoria.
 
 
 
Sobre el autor
Publicación académica de Alexander Castellanos, en su ámbito de estudios para la Carrera Consultor ABAP.
Alexander Castellanos
Profesión: Ingeniero de Sistemas - Colombia - Legajo: JS42A
✒️Autor de: 67 Publicaciones Académicas
🎓Egresado del módulo:
Certificación Académica de Alexander Castellanos