ABAP OO – Tutorial ALV Simple
Este tutorial explica y demuestra mediante un ejemplo el uso de ALV's en desarrollos a medida en el Sistema SAP. En mi caso prefiero los ALV Orientados a Objetos y además añado una capa de Objetos que
representan y permiten la interacción entre la visualización y los datos de la base de datos. Para el tutorial utilizaré el modelo de datos de Test de Vuelos y Aerolíneas (Tablas SFLIGHT, ...) que SAP proporciona de forma estándar como DEMO para las pruebas en desarrollos.
Para rellenar el modelo DEMO de tablas de SAP con datos podemos usar el programa estándar SAPBC_DATA_GENERATOR, detallado en la documentación de SAP que podemor ver en este enlace.
El siguiente diagrama muestra la forma de separar los datos mediante objetos que aplico en mis desarrollos ABAP.

Mostrar Errores Estándar en un POPUP
Cada vez que ejecutamos un módulo de funciones estándar es habitual que dicho módulo retorne una tabla de mensajes. Esta tabla de mensajes nos indicará si la ejecución ha ido bien o en caso contrario los errores que se han producido.
En nuestros programas es habitual que tengamos que mostrar un log de errores a los usuarios una vez han ejecutado una funcionalidad. Como no queremos construir una ventana a medida para mostrar los errores, podemos utilizar la siguiente función estándar que hace dicho trabajo por nosotros:
C14ALD_BAPIRET2_SHOW
Si rellenamos la tabla de tipo BAPIRET2, y ejecutamos el módulo de funciones podremos ver el siguiente resultado:
Ayuda Z para un campo en una Screen
Si necesitamos añadir una ayuda para búsqueda sobre un campo que facilite la entrada de datos a los usuarios, pero los datos que necesitamos añadir para la selección los queremos fijar nosotros, podemos usar el siguiente código ABAP:
* Declaraciones de Variables **************************** TYPES: BEGIN OF ty_fields. INCLUDE STRUCTURE help_value. TYPES: END OF ty_fields. TYPES: BEGIN OF ty_helptab, feld(50), END OF ty_helptab. DATA: it_centro TYPE TABLE OF t001w, et_centtro LIKE LINE OF it_centro, it_fields TYPE TABLE OF ty_fields, et_fields LIKE LINE OF it_fields, it_helptab TYPE TABLE OF ty_helptab, et_helptab LIKE LINE OF it_helptab. * Variables para Tablas de Información (F1) de Ayuda de Usuario. DATA: gv_tabla_f1 LIKE help_info-tabname, gv_campo_f1 LIKE help_info-fieldname. * Asociar Ayuda a un Campo de la Pantalla de Selección *************************************************************** * Variable de la Pantalla para la Ayuda AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_werks. PERFORM prepara_ayuda_centro_z. PERFORM ayuda USING 'Centros de 0 a 100' CHANGING p_centro. * Rutina de Carga de Datos de la Ayuda *************************************************************** FORM prepara_ayuda_centro_z. * Campo que se muestra en el F1 gv_campo_f1 = 'WERKS'. gv_tabla_f1 = 'T001W'. FREE it_ihelp_fields. CLEAR: et_fields, it_fields[]. et_fields-tabname = 'T001W'. " Tabla de referencia del campo et_fields-fieldname = 'WERKS'. " Campo para mostrar en la ayuda et_fields-selectflag = 'X'. " Flag de Retorno del Campo APPEND et_fields TO it_fields. * Para mostrar otro campo, en este caso la Descripción et_fields-tabname = 'T001W'. " Tabla de referencia del campo et_fields-fieldname = 'NAME1'. " Descripción et_fields-selectflag = ''. " Sin Retorno APPEND et_fields TO it_fields. CLEAR : it_helptab[], it_centro[]. SELECT werks name1 FROM t001w INTO CORRESPONDING FIELDS OF TABLE it_centro WHERE werks BETWEEN '0' AND '100' ORDER BY werks ASCENDING. * Rellena la Tabla de Valores de uno a uno en orden LOOP AT it_centro INTO et_centro. et_helptab-feld = et_centro-werks. APPEND it_helptab. et_helptab-feld = et_centro-name1. APPEND et_helptab TO it_helptab. ENDLOOP. ENDFORM. * Rutina Lanzador de la Ayuda *************************************************************** FORM ayuda USING p_titulo CHANGING p_return. CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE' EXPORTING TITEL = p_titulo fieldname = gv_campo_f1 tabname = gv_tabla_f1 IMPORTING SELECT_VALUE = p_return TABLES FIELDS = it_fields VALUETAB = it_helptab EXCEPTIONS FIELD_NOT_IN_DDIC = 1 MORE_THEN_ONE_SELECTFIELD = 2 NO_SELECTFIELD = 3 OTHERS = 4. IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM.
Convertir Importes de Carácter a Decimal
La conversión de importes en ABAP es un poco liosa y se generan dumps a menudo debido a una mala conversión de importes recibidos en formato carácter o String. En ABAP los importes se guardan en un tipo CURRENCY, es decir, un número decimal.
Si queremos convertir de formato carácter a un formato CURRENCY, como por ejemplo el elemento de datos DMBTR de la tabla estándar de posiciones contables FI de SAP podemos usar el siguiente código para convertir las variables:
" Quito el separador REPLACE ALL OCCURRENCES OF '.' IN string_importe WITH space. " Elimino Posibles Espacios CONDENSE string_importe NO-GAPS. " Convierto a DMBTR que es una variable ABAP de tipo decimal " para importes, concretamente de posiciones de documentos FI PACK string_importe TO dmbtr.
Acceso a la pila de Memoria de Ejecución ABAP o Hachazo
El sistema SAP está basado en un código de programación estático que puede ser personalizado y adaptado en puntos especificos del proceso de ejecución. Esto es que SAP nos permite escribir código ABAP en ciertos puntos de ejecución del proceso estándar para adaptarlo a las necesidades del cliente.
En muchas ocasiones, cuando estamos programando una Exit, dentro de la exit no tenemos acceso a todos los datos necesarios para llevar a cabo la tarea o decisión que tiene como objetivo la exit en cuestión.
Para solucionar este problema de datos, mediante debugging de la exit, podemos acceder a la pila de memoria ABAP de ejecución del programa estándar que estamos adaptando, y en este punto rastrear los datos que necesitamos a lo largo de las diferentes llamadas de programa que sean realizado durante el proceso estándar.
Nuevo Laboratorio de Pruebas Virtual con ESXI
Tras bastante tiempo chapuzeando pruebas en diferentes chatarras reaprovechadas, segundos pc's guarrufos, que siempre se quedaban cortos, etc... decidimos profesionalizarnos un poco.
Hemos dado el paso y nos hemos comprado una máquina especialmente para realizar pruebas, pero queríamos la flexibilidad para montar sistemas a diestro y siniestro, lo que no dejaba una única solución: Virtualización.
Activar Debug en un Popup ABAP
En ciertas ocasiones nos encontramos que queremos empezar a debugar un report a partir de una ventana Popup, pero dichas ventanas no tienen el interprete de comandos SAP para ejecutar /h, y activar el mdo debugging.
En estos casos tenemos la siguiente opción para activar el modo debigging de ABAP:
- Creamos un fichero de texto plano con el editor que prefiramos. Podemos poner el nombre que queramos pero esta bien que se entienda para que sirve. En mi caso tengo puesto "ActivarDebugging.txt".
- Dentro del fichero debemos escribir lo siguiente:
[Function] Command=/h Type=SystemCommand
- Guardamos el fichero, lo cerramos y ejecutamos el report hasta el punto en que se muestra el Popup donde queremos activar el modo debugging.
- En este punto, lo único que tenemos que hacer, es abrir el explorador de carpetas y arrastrar el fichero, en mi caso "ActivarDebugging.txt", sobre el Popup del report de SAP. Al soltar el fichero sobre el Popup el modo debuggind de ABAP quedará activado, y se podrá ver mediante el mensaje informativo en color verde en la barra de estado de la ventana SAP.



